oauth2.0 刷新标记必须作为setAccessToken Youtube API的一部分传入或设置

ve7v8dk2  于 2022-11-28  发布在  其他
关注(0)|答案(1)|浏览(138)

我有下面的代码

if (file_exists($credentialsPath)) {

    $accessToken = file_get_contents($credentialsPath);

    $client->setAccessToken($accessToken);

    if ($client->isAccessTokenExpired()) {
        $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
        $newAccessToken = $client->getAccessToken();
        $accessToken = array_merge($accessToken, $newAccessToken);
        file_put_contents($credentialsPath, json_encode($accessToken));
    }
}

但一个小时后,如果我尝试使用Youtube数据API,我得到以下错误,

Fatal error: Uncaught exception 'LogicException' with message 'refresh token must be passed in or set as part of setAccessToken' in /var/sentora/hostdata/zadmin/public_html/classes/library/youtube/vendor/google/apiclient/src/Google/Client.php:267 Stack trace: #0 /var/sentora/hostdata/zadmin/public_html/classes/library/youtube/youtube.php(26): Google_Client->fetchAccessTokenWithRefreshToken(NULL) #1 /var/sentora/hostdata/zadmin/public_html/channel/apiwrap.php(3): require_once('/var/sentora/ho...') #2 {main} thrown in /var/sentora/hostdata/zadmin/public_html/classes/library/youtube/vendor/google/apiclient/src/Google/Client.php on line 267

请帮帮忙。

zvms9eto

zvms9eto1#

你需要设置这两个选项。刷新令牌没有返回,因为我们没有强制approvalPrompt。脱机模式是不够的。我们必须强制approvalPrompt。另外,重定向URI必须在这两个选项之前设置。它对我很有效。

$client = new Google_Client();
$client->setApplicationName('Project Name');
$client->setScopes('SCOPES');
$client->setAuthConfig('JSON_FILE_PATH');
$client->setRedirectUri($this->redirectUri);
$client->setAccessType('offline');  //this line is magic point
$client->setApprovalPrompt('force'); //this line is magic point

这是为我工作。我能够获得新的令牌使用刷新令牌。

相关问题