2016-03-02 7 views
2

В реализации 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(); 

Однако этот второй вызов генерирует сообщение об ошибке с Malformed Json.

Любая идея, что я могу сделать неправильно, или как я могу отлаживать, какой окончательный url генерируется в примере выше?

+1

Мое первое предположение заключалось в том, что отправляемые запросы как-то не идентичны. Я бы начал использовать параметр «debug». Передайте значение true в качестве опции для создания вашего клиента или в вашем почтовом запросе. –

ответ

3

Я пытался без 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()