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