You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用YouTube API的fetchAccessTokenWithRefreshToken时提示令牌格式无效

解决Google Client PHP库中fetchAccessTokenWithRefreshToken报“Invalid token format”问题

先看你的代码,问题出在fetchAccessTokenWithRefreshToken的参数传递逻辑,以及可能的refresh token转义处理错误。以下是具体排查和修复步骤:

1. 先确认refresh token的实际格式

在调用刷新方法前,先输出refresh token的实际内容,检查是否存在转义错误:

var_dump($accessToken['refresh_token']);

如果输出的字符串里包含\/\/(双反斜杠加斜杠),说明你的access token文件里的JSON转义未被正确解析——正常情况下json_decode会把\/\/转换成单个/,若未转换,大概率是文件内容为手动粘贴的错误格式,或是保存时重复转义导致的。

2. 修复参数传递方式

不要直接传$accessToken['refresh_token']字符串,改用更可靠的方式获取refresh token:

方案一(推荐):使用Client内置的refresh token

if ($client->isAccessTokenExpired()) {
   try {
     // 从Client实例中获取已存储的refresh token,避免手动处理字符串格式
     $accessToken = $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
     $client->setAccessToken($accessToken);
     // 关键:将新的access token写回文件,否则下次运行仍会使用旧的过期token
     file_put_contents($accessTokenFilePath, json_encode($accessToken));
   } catch (Exception $e) {
     echo " Caught Exception: " . $e->getMessage() . "\r\n";
   }
}

方案二:修正refresh token字符串格式

如果必须手动传递refresh token字符串,确保它是正确的未转义格式(即单个/,而非\/\/)。你的原始refresh token正确格式应为:

1/09HLLzFdZusdfsdfAAGAkSNwF-L9IrWLZCMaBh9G-uedsdfdsfkl6SG8S9OEpvm_2r3USiaOsdfdfuZWruUXSb9YA3YA

若文件中存储的是1\/\/09...,说明保存时JSON格式错误,重新用json_encode保存初始access token:

// 初始获取access token后,用此方式保存到文件
file_put_contents($accessTokenFilePath, json_encode($initialAccessToken));

3. 额外注意事项

  • 初始授权时你已设置$client->setAccessType('offline');,确保了离线权限,这部分没问题。
  • 每次刷新token后必须将新token写回文件,否则下次启动脚本仍会调用过期token,重复触发错误。

内容的提问来源于stack exchange,提问作者Ayman Roshdy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 06:05:14