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

Xero OAuth2 PHP定时任务刷新令牌遇BadMethodCallException错误求助

Xero OAuth2令牌刷新失败问题排查

问题原因及修复点:

  • 变量语法错误:代码中$accessToken和$refreshToken的定义末尾缺少分号,PHP会因语法错误导致变量未正确赋值,$refreshToken为空时就会触发"Required parameter not passed: 'refresh_token'"错误。
  • GenericProvider配置冗余:初始化GenericProvider时,配置数组里的'refresh_token' => $refreshToken是多余的,该类的配置项不包含这个参数,直接删除即可。
  • 令牌设置错误:刷新令牌后,你错误地把旧的refresh_token设置为access_token,正确的做法是使用新获取到的$newAccessToken中的访问令牌值。

修正后的核心代码片段:

// 修复变量末尾的分号
$accessToken  = "**********";
$refreshToken = "**********";
$realID       = "**********";  

$xeroTenantId = (string)$realID;

// 移除配置里的refresh_token项
$provider = new \League\OAuth2\Client\Provider\GenericProvider([
  'clientId'                => '********************************',   
  'clientSecret'            => '******************************************',
  'urlAuthorize'            => 'https://login.xero.com/identity/connect/authorize',
  'urlAccessToken'          => 'https://identity.xero.com/connect/token',
  'urlResourceOwnerDetails' => 'https://identity.xero.com/resources'
]);

$newAccessToken = $provider->getAccessToken('refresh_token', [
  'refresh_token' =>  $refreshToken
]);

// 使用新的access_token而非旧的refresh_token
$config = XeroAPI\XeroPHP\Configuration::getDefaultConfiguration()->setAccessToken( (string)$newAccessToken->getToken() );    

额外提醒:刷新令牌成功后,务必把新的refresh_token(通过$newAccessToken->getRefreshToken()获取)存储起来,下次刷新时需要使用这个新的refresh_token,否则后续令牌刷新会再次失效。

内容的提问来源于stack exchange,提问作者Joakim Krassman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 08:17:45