2015-05-24 4 views
0

Предполагается, что я хочу написать команду php для выкупа кода авторизации после его получения.Исключить код авторизации для OAuth api с API Google с помощью guzzle

Предполагается, что я использую guzzle для выполнения запроса, и я использую следующий код, где параметры должны быть правильными.

<?php 

namespace Pherserk\PHPGMailCommander\Command; 
use Guzzle\Http\Client; 

/** 
* Class ExchangeAuthorizationToken 
* @package Pherserk\PHPGmailCommander\Command 
*/ 
class ExchangeAuthorizationToken 
{ 
    private $url; 
    private $path; 
    private $grantType; 
    private $clientId; 
    private $clientSecret; 
    private $redirectUri; 

    public function __construct(array $config) 
    { 
     $this->url = $config['authorization_token']['code_exchange_uri']; 
     $this->path = $config['authorization_token']['code_exchange_path']; 
     $this->grantType = $config['authorization_token']['grant_type']; 
     $this->clientId = $config['client_id']; 
     $this->clientSecret = $config['client_secret']; 
     $this->redirectUri = $config['redirect_uri']; 
    } 

    /** 
    * @param string $accessToken 
    */ 
    public function run($accessToken = '4/the-authorization-token-here_hasbEen.obscured') 
    { 
     $client = new Client(); 
     $client->setBaseUrl($this->url); 
     $client->setSslVerification(true); 

     $request = $client->post($this->path, null, null, ['exceptions' => false]); 
     $request->addHeader('Content-Type', 'application/x-www-form-urlencoded'); 

     $query = $request->getQuery(); 
     $query['code'] = $accessToken; 
     $query['client_id'] = $this->clientId; 
     $query['client_secret'] = $this->clientSecret; 
     $query['redirect_uri'] = $this->redirectUri; 
     $query['grant_type'] = $this->grantType; 

     $response = $request->send(); 
     var_dump($response->getBody(true)); 
    } 
} 

Я получаю код статуса 400 с мотивацией invalid_grant. Я получил код авторизации, который я использую после запроса авторизации пользователя и перенаправления. Что мне не хватает?

ответ

0

Ну после спора на какое-то время я понял причину. Код уже был обновлен.

Настройка кода таким образом

$response = $request->send(); 
$decodedResponse = $response->json(); 

if (isset($decodedResponse['error'])) { 
    echo $decodedResponse['error_description']; 

    return false; 
} 

return true; 

Я заметил ошибку.