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

Google Merchant授权AccessToken过期,如何获取Refresh Token?

Google Merchant Center 授权:解决AccessToken过期问题

Google的AccessToken有效期固定为1.5小时,无法直接延长,但可以通过Refresh Token实现自动获取新的AccessToken,让脚本长期运行。以下是具体解决方案:

核心原理

当你设置setAccessType('offline')后,用户首次授权时Google会返回包含refresh_token的完整Token数据。这个Refresh Token长期有效(除非用户撤销授权或Google主动标记失效),可用来无限次获取新的AccessToken,无需用户再次手动授权。

你的代码问题点

授权流程已开启offline模式,但缺少Refresh Token的持久化存储和自动刷新逻辑,导致每次脚本启动依赖临时AccessToken,过期后无法继续运行。

修正后的代码实现

1. 授权并存储完整Token(含Refresh Token)

用户完成授权后,获取完整Token数据并持久化存储(如数据库、加密文件):

$client = new Google_Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri($redirect_uri);
$client->setAccessType('offline');
$client->setScopes([Google_Service_ShoppingContent::CONTENT]);

$service = new Google_Service_ShoppingContent($client);
$code = $_POST['code'];

// 获取包含refresh_token的完整Token数据
$tokenData = $client->fetchAccessTokenWithAuthCode($code);

// 持久化存储Token数据(示例用文件,实际建议用加密数据库)
file_put_contents('google_merchant_token.json', json_encode($tokenData));

$client->setAccessToken($tokenData);

2. 启动脚本时自动刷新Token

每次启动脚本,读取存储的Token数据,客户端会自动检测过期并使用Refresh Token刷新:

$client = new Google_Client();
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setRedirectUri($redirect_uri);
$client->setScopes([Google_Service_ShoppingContent::CONTENT]);

// 从存储读取Token数据
$tokenData = json_decode(file_get_contents('google_merchant_token.json'), true);
$client->setAccessToken($tokenData);

// 检测Token过期并自动刷新
if ($client->isAccessTokenExpired()) {
    // 用Refresh Token获取新的AccessToken
    $newTokenData = $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
    
    // 更新存储中的Token数据(access_token已更新)
    file_put_contents('google_merchant_token.json', json_encode($newTokenData));
    
    $client->setAccessToken($newTokenData);
}

// 初始化服务并执行业务逻辑
$service = new Google_Service_ShoppingContent($client);
// 此处编写你的数据获取/处理代码...

关键注意事项

  • Refresh Token仅首次授权返回:只有用户第一次授权时,fetchAccessTokenWithAuthCode会返回refresh_token,后续刷新AccessToken不会生成新的Refresh Token,必须妥善保存首次获取的完整Token数据。
  • Refresh Token失效场景:若用户撤销应用授权、Google检测到异常操作,Refresh Token会失效,此时需引导用户重新授权。
  • 存储安全:Token包含敏感信息,存储时需加密处理,避免明文暴露。

内容的提问来源于stack exchange,提问作者anton plashkevich

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:46:03