4

Guzzle Request

try {
    $url = 'https://www.googleapis.com/oauth2/v1/tokeninfo?';

    $client = new Client();
    $request = $client->createRequest('GET', $url);

    $query = $request->getQuery();
    $query['access_token'] = $access_token;

    $response = $client->send($request);

    $json = $response->json();

    if(!empty($json) && !isset($json['error'])) {
        return ($json['audience']==GOOGLE_CLIENT_ID);
    }

} catch(\Exception $e) {
    echo $e->getMessage();
}

Guzzle Response

Client error response
[status code] 400
[reason phrase] Bad Request
[url] https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=xxxx

Simple CURL Request

$url = 'https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=xxxx';
$curl_handle=curl_init();
curl_setopt($curl_handle,CURLOPT_URL,$url);
curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, false); //disable SSL check
$json_response = curl_exec($curl_handle);
curl_close($curl_handle);
$response = json_decode($json_response);
return $response;

Simple CURL Response

stdClass Object
(
    [issued_to] => xxx-xxx.apps.googleusercontent.com
    [audience] => xxx-xxx.apps.googleusercontent.com
    [user_id] => xxx
    [scope] => https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/plus.me
    [expires_in] => 3581
    [access_type] => offline
)

I can't figure out whats I am doing wrong with Guzzle, as you can see I got successful result using CURL but got Bad Request error on Guzzle....Any ideas?

UPDATE:

I figure out guzzle is returning actual response when response code is 200/OK, otherwise its returning guzzle exception now I can't figure out how to get the actual response in case of error?

Edris
  • 925
  • 9
  • 13

2 Answers2

4

I have found the solution use RequestException instead of Exception

try {
  //Google oAuth2 Code   
} catch(RequestException $e) {
  $response = $e->getResponse()->json(); //Get error response body
}
Edris
  • 925
  • 9
  • 13
0

It looks like you want to set exceptions = false when configuring guzzle. See a similar answer here: Guzzle: handle 400 bad request

$guzzle_config = array(
    'defaults' => array(
        'debug' => false,
        'exceptions' => false
        )
    );
Community
  • 1
  • 1