哇,我花了很长时间才弄清楚这一点,而且那里的答案对我来说似乎很不完整。
在我们开始之前,请记住,此答案假定您使用的是最新的 Google API PHP Library,截至 2014 年 5 月 26 日。
1 - 确保您的应用请求的访问类型为 offline。 refresh_token 否则不提供。来自 Google:只有在授权码请求中包含 access_type=offline 时才会显示此字段。
$gClient->setAccessType('offline');
2 - 首次授权后,保留提供的refresh_token 以供进一步访问。这可以通过 cookies、database 等来完成。我选择存储在数据库中:
$tokens = json_decode($gClient->getAccessToken()); /* Get a JSON object */
setRefreshToken($con, $tokens->refresh_token /* Retrieve form JSON object */);
3 - 检查AccessToken 是否已过期,如果是,请向 Google 请求刷新令牌。
if ($gClient->isAccessTokenExpired()) {
$refreshToken = getRefreshToken($con, $email);
$gClient->refreshToken($refreshToken);
}
getRefreshToken 从我们的数据库中检索先前存储的refresh_token,然后我们将该值传递给客户端的refreshToken 方法。
快速说明:请务必记住,如果您之前授权过您的应用,您可能不会在响应中看到 refresh_token,因为它仅在我们第一次调用时提供authenticate。因此,您可以转到https://www.google.com/settings/security 并撤销对您应用的访问权限,也可以在创建客户端对象时添加以下行:
$gClient->setApprovalPrompt('force');
来自 Google:如果值为 force,那么即使用户之前同意您的应用程序针对给定的一组范围,用户也会看到一个同意页面。 这反过来又确保了 @987654338每次授权都提供@。
完整示例:http://pastebin.com/jA9sBNTk