,所以我试图使访问令牌刷新工作。当访问令牌过期后,我运行RefReshToken()并通过RefResh_Token以从Google获得新的access_token。
有时它似乎有效,但是其他情况下,我会收到错误消息 Invalid_grant 之后。似乎我在不重新授权访问我的YouTube频道的情况下无法超过几天。
我做错了什么?
if ($client->getAccessToken()) {
if($client->isAccessTokenExpired()) {
$newToken = $client->getAccessToken();
//Run refreshToken() and pass in the refresh token to get a fresh access token.
$client->refreshToken($newToken['refresh_token']);
//Take old key object and replace everything except for refresh_token
$newKey = $client->getAccessToken();
$newKeyWithRefreshToken = json_decode($oldKey);
$newKeyWithRefreshToken->access_token = $newKey['access_token'];
$newKeyWithRefreshToken->token_type = $newKey['token_type'];
$newKeyWithRefreshToken->expires_in = $newKey['expires_in'];
$newKeyWithRefreshToken->created = $newKey['created'];
//save to db
DB::getInstance()->update('channel', $channelId , array(
'credentials' => json_encode($newKeyWithRefreshToken)
));
在您在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();
有关更多信息,请检查此问题。