如何使用查询字符串参数制作Guzzle帖子

时间:2016-03-02 15:00:03

标签: post query-string guzzle google-oauth2 guzzle6

在Google Oauth2实施中,我正在尝试使用guzzle call来交换令牌的授权码。

以下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();

但是,第二次调用会生成Malformed Json错误消息。

知道我可能做错了什么,或者我如何调试上面示例中生成的最终网址?

2 个答案:

答案 0 :(得分:4)

我在没有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()

答案 1 :(得分:-2)

您是否尝试过使用数组和http://php.net/json_encode