服务响应中的json无效


Invalid json in service response

我正在尝试使用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);
}
?>

我将很快使用一个数据库,但我想让它与cookie首先工作。我得到的错误如下:

[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}

如果我尝试使用OAuth2而不是Google Plus作为服务,我也会得到"响应无效json"。

[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 -我也尝试了"opt_params"变量,但它仍然说无效的JSON:(

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

在我的情况下,我也收到了一个无效的json- In -service-response,我确信正确的凭证设置,我试图运行传递给Google API的URL与GET协议和查询字符串,并且总是有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)