服务响应中的json无效

时间:2015-08-05 20:20:12

标签: php oauth-2.0 google-api-php-client google-oauth2

我试图使用PHP API获取我的个人资料信息,但它似乎在过去几天没有工作。

我的代码如下:

<?php
try {
    $client_id = '****************.apps.googleusercontent.com';
    $client_secret = '*********************';
    $redirect_uri = '**********************';
    $google_key = '***************';

    $client = new Google_Client();
    $client->setClientId($client_id);
    $client->setClientSecret($client_secret);
    $client->setRedirectUri($redirect_uri);
    $client->setDeveloperKey($google_key);
    $client->setAccessType('offline');
    $client->setScopes(array('https://www.googleapis.com/auth/userinfo.email','https://www.googleapis.com/auth/userinfo.profile'));
    $plus = new Google_Service_Plus($client);

    if(isset($_GET['code'])) {
        $client->authenticate($_GET['code']);
        $accessToken = $client->getAccessToken();
        $refreshToken = json_decode($accessToken)->refresh_token;
        setcookie('refresh_token', $refreshToken, (time()+60*60*24*30));
        setcookie('access_token', $accessToken, (time()+60*60*24*30));
        header('Location: ./');
        exit();
    }

    if(isset($_COOKIE['access_token']) && $_COOKIE['access_token']) {
        $refreshToken = json_decode($_COOKIE['access_token'])->refresh_token;
        $accessToken = $_COOKIE['access_token'];
        setcookie('access_token', $accessToken, (time()+60*60*24*30));
        $client->setAccessToken($_COOKIE['access_token']);
    } else {
        $authUrl = $client->createAuthUrl();
    }

    if($client->getAccessToken()) {
        $accessToken = $client->getAccessToken();
        setcookie('access_token', $accessToken, (time()+60*60*24*30));
        if(isset($plus)){
            $userInfo = $plus->people->get('me');
        }
    }

    if($client->isAccessTokenExpired() && isset($userInfo)){
        $refreshToken = $_COOKIE['refresh_token'];
        $client->refreshToken($refreshToken);
        $newtoken = $client->getAccessToken();
        setcookie('access_token', $newtoken, (time()+60*60*24*30));
        header('Location: ./');
        exit();
    }

} catch (Google_Service_Exception $gse){
    error_log($gse, 0);
} catch (Google_Auth_Exception $gae){
    error_log($gae, 0);
}
?>

我很快就会使用数据库,但我想先让它使用cookies。我得到的错误如下:

[05-Aug-2015 20:40:36 Europe/London] exception 'Google_Service_Exception' with message 'Error calling GET https://www.googleapis.com/plus/v1/people/me?key=**********************: (403) ‹' in /home5/commodit/public_html/workflow/src/Google/Http/REST.php:110
Stack trace:
#0 /home5/commodit/public_html/workflow/src/Google/Http/REST.php(62): Google_Http_REST::decodeHttpResponse(Object(Google_Http_Request), Object(Google_Client))
#1 [internal function]: Google_Http_REST::doExecute(Object(Google_Client), Object(Google_Http_Request))
#2 /home5/commodit/public_html/workflow/src/Google/Task/Runner.php(174): call_user_func_array(Array, Array)
#3 /home5/commodit/public_html/workflow/src/Google/Http/REST.php(46): Google_Task_Runner->run()
#4 /home5/commodit/public_html/workflow/src/Google/Client.php(593): Google_Http_REST::execute(Object(Google_Client), Object(Google_Http_Request))
#5 /home5/commodit/public_html/workflow/src/Google/Service/Resource.php(237): Google_Client->execute(Object(Google_Http_Request))
#6 /home5/commodit/public_html/workflow/src/Google/Service/Plus.php(562): Google_Service_Resource->call('get', Array, 'Google_Service_...')
#7 /home5/commodit/public_html/workflow/includes/head.php(87): Google_Service_Plus_People_Resource->get('me')
#8 /home5/commodit/public_html/workflow/index.php(4): include('/home5/commodit...')
#9 {main}

我也得到了#34;响应无效json&#34;如果我尝试使用OAuth2而不是Google Plus作为服务。

[05-Aug-2015 20:46:02 Europe/London] exception 'Google_Service_Exception' with message 'Invalid json in service response: ‹' in /home5/commodit/public_html/workflow/src/Google/Http/REST.php:125
Stack trace:
#0 /home5/commodit/public_html/workflow/src/Google/Http/REST.php(62): Google_Http_REST::decodeHttpResponse(Object(Google_Http_Request), Object(Google_Client))
#1 [internal function]: Google_Http_REST::doExecute(Object(Google_Client), Object(Google_Http_Request))
#2 /home5/commodit/public_html/workflow/src/Google/Task/Runner.php(174): call_user_func_array(Array, Array)
#3 /home5/commodit/public_html/workflow/src/Google/Http/REST.php(46): Google_Task_Runner->run()
#4 /home5/commodit/public_html/workflow/src/Google/Client.php(593): Google_Http_REST::execute(Object(Google_Client), Object(Google_Http_Request))
#5 /home5/commodit/public_html/workflow/src/Google/Service/Resource.php(237): Google_Client->execute(Object(Google_Http_Request))
#6 /home5/commodit/public_html/workflow/src/Google/Service/Oauth2.php(175): Google_Service_Resource->call('get', Array, 'Google_Service_...')
#7 /home5/commodit/public_html/workflow/includes/head.php(89): Google_Service_Oauth2_Userinfo_Resource->get()
#8 /home5/commodit/public_html/workflow/index.php(4): include('/home5/commodit...')
#9 {main}

感谢您的帮助! 贝瑟尼

P.S - 我也试过&#34; opt_params&#34;变量,但它仍然表示无效的JSON :(

1 个答案:

答案 0 :(得分:0)

我建议查看Google / Config.php文件,有几个默认参数可以调整以获得解决不同问题的方法。

在我的情况下,我也收到了无效的json-in-service-response,我确信正确的凭据设置,我尝试运行使用GET协议和查询字符串传递给Google API的URL,并且始终有完整的纯文本以json格式回答,所以我查看了“disable_gzip”参数并修改它以查看更改后的行为是什么。

'Google_Http_Request' => array(
      // Disable the use of gzip on calls if set to true. Defaults to false.
      'disable_gzip' => self::GZIP_DISABLED, //self::GZIP_ENABLED,

      // We default gzip to disabled on uploads even if gzip is otherwise
      // enabled, due to some issues seen with small packet sizes for uploads.
      // Please test with this option before enabling gzip for uploads in
      // a production environment.
      'enable_gzip_for_uploads' => self::GZIP_UPLOADS_DISABLED,
    ),

您可以为Google_Client配置设置不同的值,类属性调用已定义的方法。

public function setClassConfig($class, $config, $value = null)
相关问题