У нас есть приложение, подключенное к 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
Как ни странно, использование этого способа привело к 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
Что, к сожалению, работает в производстве, как и ожидалось. Я хотел обратиться в случае, если я что-то упустил или у меня есть потенциальная проблема здесь.