我们有一个与QuickBooks Online OAuth2 Workflow连接的应用程序。除了尝试刷新用户的访问密钥时,其他所有内容都处于工作状态。
在PHP SDK文档化之后,在用户与QuickBooks同步之前,我们调用了刷新令牌,如下所示:
$this->data_service = DataService::Configure(array(
'auth_mode' => 'oauth2',
'ClientID' => xxx,
'ClientSecret' => xxx,
'refreshTokenKey' => xxx,
'QBORealmID' => xxx,
'baseUrl' => 'production',
);
$oauth2_login_helper = $this->data_service->getOAuth2LoginHelper();
$refreshed_token_object = $oauth2_login_helper->refreshToken();
// Update DB with new access_token, refresh_token
奇怪的是,如果access_token过期(一个小时或更长时间),则使用这种方法会产生401:invalid_grant。值得一提的是,此行为仅在生产中发生。在我们的本地和开发环境中,以上代码成功更新了oauth2密钥。
经过一番搏斗,我最终将以上内容更改为:
$oauth2_login_helper = new OAuth2LoginHelper(xxx, xxx);
$access_token_object =
$oauth2_login_helper->refreshAccessTokenWithRefreshToken(
xxx
);
// Update DB with access_token, refresh_token
足够令人沮丧的是,它可以按预期进行生产。我想伸出手,以防万一我遗漏了一些东西或这里有潜在问题。