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
相关产品推荐
相关产品推荐

