6

Google Oauth2 実装では、ガズル呼び出しを使用してトークンの認証コードを交換しようとしています。

次の guzzle 呼び出しは正常に機能し、期待値を返します。

 $result = $this->client->post(
        'https://www.googleapis.com/oauth2/v3/token?code=<authorization_code>&redirect_uri=<redirect_uri>&client_id=<client_id>&client_secret=<client_secret>&grant_type=authorization_code')
->getBody()->getContents();

ただし、これは投稿リクエストをマウントする汚い方法のようです。

きれいにするために、次の方法を試しました。

    $result = $this->client->post(
        'https://www.googleapis.com/oauth2/v3/token',
        [
            'query' =>
                [
                    'code' => <authorization_code>,
                    'redirect_uri' => <redirect_uri>,
                    'client_id' => <client_id>,
                    'client_secret' => <client_secret>
                    'grant_type' => 'authorization_code',
                ]
        ]
    )->getBody()->getContents();

ただし、この 2 番目の呼び出しではMalformed Jsonエラー メッセージが生成されます。

何が間違っているのか、または上記の例で生成されている最終的な URL をどのようにデバッグできますか?

4

2 に答える 2

11

codeパラメータなしで試してみましたが、うまくいきました。

$client = new \GuzzleHttp\Client();

$response = $client->post('https://www.googleapis.com/oauth2/v3/token', [
    'query' => [
        'client_id' => '...apps.googleusercontent.com',
        'client_secret' => 'secret',
        'refresh_token' => 'token',
        'grant_type' => 'refresh_token'
    ]
]);

$token = $response->getBody()->getContents()
于 2016-09-07T13:40:47.857 に答える
-3

配列とhttp://php.net/json_encodeを使用してみましたか

于 2016-03-08T09:25:08.197 に答える