使用Google API的refreshToken过程出现问题时,如果遇到过期的令牌,则refreshToken不会获得AccessToken。此时我已经将刷新令牌保存到数据库。
$client = new Google_Client();
$client->setApplicationName("APP NAME");
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setAccessType('offline');
$client->setScopes(array('https://www.googleapis.com/auth/calendar'));
$client->setAccessToken( json_encode($access_token_from_db) );
if ( $client->isAccessTokenExpired() ) :
$client->refreshToken($refresh_token_from_db);
$new_access_token = $client->getAccessToken();
print_r($access_token);
//save to db -- but this fails
endif;
运行此操作后,新的访问令牌仍为空。即使我在检查到期之前将setAccessToken设置为现在已过期的令牌,同样的问题仍然存在。
在已保存refreshToken之后,状态似乎没有直接的示例。
在我的应用程序中,我们会根据操作(如果需要了解应用程序目的)将更新发送到用户的日历。
这个答案对我来说似乎不正确: How to refresh token with Google API client?
是因为它没有使用$ client-> isAccessTokenExpired()方法,加上不是一个干净的解决方案,脚本应该非常小而且小,以完成任务。从理论上讲:
虽然上面的例子有类似的功能,但它是2013年的答案,可能会有效,但不是最好的方法,我相信。