Возвращение ответа API с авторизацией токена в функциях. php - PullRequest
0 голосов
/ 06 января 2020

Я использую форму в WordPress для вызова стороннего API, и я хочу отфильтровать ответ в тексте подтверждения после отправки. Мне удалось сделать это на apis, где не требуется авторизация токена, используя, например, это в моих функциях. php:

add_filter( 'gform_confirmation_4', 'custom_confirmation', 10, 4 );
function custom_confirmation( $confirmation, $form, $entry, $ajax ) {
$response = wp_remote_get( 'https://api.github.com/users/someuser' );

if ( is_wp_error( $response ) ) {
echo 'An error happened';
} else {
$body = wp_remote_retrieve_body( $response );
$data = json_decode( $body );
}

$confirmation .= print_r( $data->id, true );
return $confirmation;

}

, которая возвращает значение "id" для этого пользователя github из json и печатает его в подтверждении.

Для моего ограниченного API, для которого сначала требуется токен авторизации, я помещаю его в функции. php

add_filter( 'gform_webhooks_request_headers_4', function ( $request_headers ) {
$token = GFCache::get( 'accessToken' );

if ( ! $token ) {
    $post_url = 'https://MyRestrictedApi.com/v1/auth/accesstokenrequest? 
name=something&password=something';
    $headers  = array( 'Content-Type' => 'application/x-url-form-encoded' );

    $response = wp_remote_post( $post_url, array( 'body' => $body, 'headers' => $headers ) );
    gf_webhooks()->log_debug( 'gform_webhooks_request_headers: response => ' . print_r( $response, 
true ) );

    if ( ! is_wp_error( $response ) && wp_remote_retrieve_response_code( $response ) == 200 ) {
        $response_body_json  = wp_remote_retrieve_body( $response );
        $response_body_array = json_decode( $response_body_json, true );

        if ( isset( $response_body_array['accessToken'] ) ) {
            $token = $response_body_array['accessToken'];
            GFCache::set( 'accessToken', $token, true, $response_body_array['expires_in'] - 30 );
        }
    }
}

if ( $token ) {
    gf_webhooks()->log_debug( 'gform_webhooks_request_headers: token added.' );
    $request_headers['Authorization'] = 'Bearer ' . $token;
}

return $request_headers;
} );

Это корректно выдает токен как Я вижу, что он работает в журналах отладки формы и показывает данные ответа API из формы, представленные внутри журналов.

Я пытался объединить эквивалент этих двух блоков кода, чтобы получить ответ, напечатанный в подтверждении формы при вызове API с ограниченным доступом, который заменяет демонстрационную версию github, использованную выше, на приведенную ниже.

add_filter( 'gform_confirmation_4', 'custom_confirmation', 10, 4 );
function custom_confirmation( $confirmation, $form, $entry, $ajax ) {
$response = wp_remote_get( 'https://MyRestrictedAPI.com/v1/user/list' );

if ( is_wp_error( $response ) ) {
echo 'An error happened';
} else {
$body = wp_remote_retrieve_body( $response );
$data = json_decode( $body );
}

$confirmation .= print_r( $data->id );
return $confirmation;

}

Но в результате он печатает «1» в подтверждении (возможно, истинное значение ssl), тогда как «id» 8864 будет ожидаемым. Просмотр журналов отладки формы показывает:

(
[body] => 
[method] => GET
[headers] => Array
    (
        [Authorization] => Bearer 9kcTI3DEChPHgRr3kheHqnGaiBqaeT7MzIQUCZwM-5KLuLpZxL...
    )

[sslverify] => 1
)

2020-01-06 9:29:10.110383 - DEBUG --> GF_Webhooks::process_feed(): Webhook successfully executed. 
code: 200; body: [{"id":8864,"name": etc...

Нужно ли мне использовать accessToken во второй функции в моих функциях. php, поэтому он не печатает ответ? Любые советы о том, как это сделать? Спасибо

...