使用 Google API 为 Google 日历 v3 刷新令牌
Refreshing Tokens with Google API for Google Calendar v3
我正在尝试使用 Google API (PHP) 在系统日历和用户的 Google 日历之间执行每日同步。我希望系统用户能够在系统内设置一次访问他们的日历,然后系统可以通过 cron 作业每天同步日历。
我已经设法让整个过程正常工作,从授权访问到同步日历,但我被令牌到期时间卡住了。
我认为它在 v3 中的工作方式是旧令牌将充当刷新令牌。因此,一旦用户提供了授权,我只需要将旧令牌传递给 Google,它就可以让我 运行 同步。
这似乎可行,只要我在初始令牌的 1 小时到期时间内。一个小时过去后,它停止工作,我需要让用户再次授权访问。
有没有办法让用户授权访问一次,然后每天同步一次日历,而无需用户再次授权访问?
谢谢!
那么,在您使用 Google 授权期间,您将收到一个令牌,该令牌将在 3600 秒或一小时后过期,过期是正常的。所以你需要使用刷新令牌来获取新的工作令牌。
以下是您需要的步骤:
$token = $client->getAccessToken();
$authObj = json_decode($token);
if(isset($authObj->refresh_token)) {
save_refresh_token($authObj->refresh_token);
}
保存此 refresh_token 很重要,然后您可以使用
更新它
$client->refreshToken($your_saved_refresh_token);
然后将您的新访问令牌设置到会话:
$_SESSION['access_token'] = $client->getAccessToken();
有关详细信息,请查看此 SO question。
我正在尝试使用 Google API (PHP) 在系统日历和用户的 Google 日历之间执行每日同步。我希望系统用户能够在系统内设置一次访问他们的日历,然后系统可以通过 cron 作业每天同步日历。
我已经设法让整个过程正常工作,从授权访问到同步日历,但我被令牌到期时间卡住了。
我认为它在 v3 中的工作方式是旧令牌将充当刷新令牌。因此,一旦用户提供了授权,我只需要将旧令牌传递给 Google,它就可以让我 运行 同步。
这似乎可行,只要我在初始令牌的 1 小时到期时间内。一个小时过去后,它停止工作,我需要让用户再次授权访问。
有没有办法让用户授权访问一次,然后每天同步一次日历,而无需用户再次授权访问?
谢谢!
那么,在您使用 Google 授权期间,您将收到一个令牌,该令牌将在 3600 秒或一小时后过期,过期是正常的。所以你需要使用刷新令牌来获取新的工作令牌。
以下是您需要的步骤:
$token = $client->getAccessToken();
$authObj = json_decode($token);
if(isset($authObj->refresh_token)) {
save_refresh_token($authObj->refresh_token);
}
保存此 refresh_token 很重要,然后您可以使用
更新它$client->refreshToken($your_saved_refresh_token);
然后将您的新访问令牌设置到会话:
$_SESSION['access_token'] = $client->getAccessToken();
有关详细信息,请查看此 SO question。