Youtube api无法刷新访问令牌

时间:2017-03-20 04:26:46

标签: php google-api youtube-data-api google-api-php-client google-oauth2

我以前在使用Google帐户时遇到问题,无法访问Youtube的API。所以我创建了一个新的gmail帐户&设法让它运作。不仅仅是像一小时之后。我发现Refresh Token并不令人耳目一新。我不知道为什么。这变得令人沮丧,因为我似乎不得不放弃使用Youtube服务。

这是我的代码:也许我做错了。

$client = new Google_Client();
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->setScopes('https://www.googleapis.com/auth/youtube');
$redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'],
    FILTER_SANITIZE_URL);
$client->setRedirectUri($redirect);
$client->setAccessType('offline');
$client->setApprovalPrompt('force'); // this line is important when you revoke permission from your app, it will prompt google approval dialogue box forcefully to user to grant offline access


// Define an object that will be used to make all API requests.
$youtube = new Google_Service_YouTube($client);

// Check if an auth token exists for the required scopes
$tokenSessionKey = 'token-' . $client->prepareScopes();
$_SESSION[$tokenSessionKey] = $manually_stored_token; //$client->getAccessToken();



if (isset($_SESSION[$tokenSessionKey])) {
  $client->setAccessToken($_SESSION[$tokenSessionKey]);
}


// Check to ensure that the access token was successfully acquired.
if($client->isAccessTokenExpired()) {

          $client->refreshToken($refresh_token);
          if(!$client->isAccessTokenExpired()) {
               // do something
          } else {
              // refresh access token not granted
          }


} else if ($client->getAccessToken()) {

    // do something

} else {
       // do something
}

我在“登录和安全”下检查了我的帐户https://myaccount.google.com/u/0/security是否允许授权访问您的Google帐户,我仍然拥有授权。所以我不知道为什么它没有刷新我的令牌。

1 个答案:

答案 0 :(得分:0)

首次授权时,您会在回复中获得access_tokenrefresh_token
之后,您只会获得access_token回复。 refresh_token您必须保存并重复使用。

如果由于某种原因您将其丢失,则必须重置您的授权访问权限。

我有这个问题,不得不做一个肮脏的黑客,因为没有人能给我答案。

基本修复是"取消授权"一个用户,然后"重新授权"他们又来了。好像你没有,你永远不会得到refresh_token

进行测试和检查。打开您正在授权的帐户 进入仪表板,找到与您的帐户相关联的应用程序"节。
在那里,您将看到您的应用程序并可以手动将其删除以进行测试 但是,您需要稍后对此进行编码,但足以进行测试。