#php #oauth-2.0 #quickbooks
#php #oauth-2.0 #quickbooks
Вопрос:
Я пытаюсь узнать больше о quickbooks PHP SDK для генерации токенов доступа. Приведенный ниже код работает отлично. Он получит последний функционирующий токен доступа, который я сохранил в базе данных, назначит его службе данных quickbooks, затем получит 500 записей счетов-фактур и распечатает номера счетов-фактур:
<?php
require __DIR__.'/vendor/autoload.php';
require '../../../wp-config.php';
use QuickBooksOnlineAPIDataServiceDataService;
use QuickBooksOnlineAPICoreOAuthOAuth2OAuth2LoginHelper;
$con = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if ($con->connect_errno) {
printf("connection failed: %sn", $con->connect_error());
exit();
}
$sql = "SELECT * FROM wp_forbook ORDER BY create_date DESC LIMIT 1";
$result = $con->query($sql);
$row = $result->fetch_object();
$accessToken = unserialize($row->token);
$con->close();
// Create SDK instance
$config = include('config.php');
$dataService = DataService::Configure(array(
'auth_mode' => 'oauth2',
'ClientID' => $config['client_id'],
'ClientSecret' => $config['client_secret'],
'RedirectURI' => $config['oauth_redirect_uri'],
'scope' => $config['oauth_scope'],
'baseUrl' => $config['mode']
));
/*
$oauth2LoginHelper = new OAuth2LoginHelper($config['client_id'], $config['client_secret']);
$accessToken = $oauth2LoginHelper->refreshAccessTokenWithRefreshToken($accessToken->getRefreshToken());
*/
$dataService->updateOAuth2Token($accessToken);
$allInvoices = $dataService->FindAll('Invoice', 0, 500);
echo '<pre>';
if($allInvoices) {
foreach ($allInvoices as $oneInvoice)
echo $oneInvoice->DocNumber."n";
} else {
echo print_r($dataService->getLastError(),1);
}
echo '</pre>';
Опять же, скрипт, который я только что вставил, работает отлично.
Однако, если я включу эти две строки для получения refreshToken
$oauth2LoginHelper = new OAuth2LoginHelper($config['client_id'], $config['client_secret']);
$accessToken = $oauth2LoginHelper->refreshAccessTokenWithRefreshToken($accessToken->getRefreshToken());
затем я вижу сообщение об ошибке:
QuickBooksOnlineAPICoreHttpClientsFaultHandler Object
(
[context:QuickBooksOnlineAPICoreHttpClientsFaultHandler:private] =>
[httpStatusCode:QuickBooksOnlineAPICoreHttpClientsFaultHandler:private] => 400
[responseBody:QuickBooksOnlineAPICoreHttpClientsFaultHandler:private] => Unsupported OperationOperation Could not find resource for relative : /v3/company/query of full path: https://c50.sandbox.qbo.intuit.com/qbo50/v3/company/query?minorversion=57 is not supported.
[helpMsg:QuickBooksOnlineAPICoreHttpClientsFaultHandler:private] => Invalid auth/bad request (got a 400, expected HTTP/1.1 20X or a redirect)
[intuit_tid:QuickBooksOnlineAPICoreHttpClientsFaultHandler:private] => 1-5ffb7959-7079cde00c9068e3506236c7
[intuitErrorType:QuickBooksOnlineAPICoreHttpClientsFaultHandler:private] => ValidationFault
[intuitErrorCode:QuickBooksOnlineAPICoreHttpClientsFaultHandler:private] => 500
[intuitErrorElement:QuickBooksOnlineAPICoreHttpClientsFaultHandler:private] =>
[intuitErrorMessage:QuickBooksOnlineAPICoreHttpClientsFaultHandler:private] => Unsupported Operation
[intuitErrorDetail:QuickBooksOnlineAPICoreHttpClientsFaultHandler:private] => Operation Could not find resource for relative : /v3/company/query of full path: https://c50.sandbox.qbo.intuit.com/qbo50/v3/company/query?minorversion=57 is not supported.
)
Если я снова закомментирую строки для токена обновления, нажмите обновить на моей веб-странице, тогда все снова заработает. Другими словами, мои старые токены, которые поступают прямо из базы данных, все еще работают, даже если я выполнял refreshAccessTokenWithRefreshToken()
в предыдущем сеансе.
Почему мои недавно обновленные токены вызывают сообщение об ошибке?
И почему старые токены, выпущенные в течение последнего часа, все еще работают после а) я пытаюсь создать обновление, затем б) вижу сообщение об ошибке, затем в) отключаю код токена обновления, затем г) обновляю страницу?
Как мне правильно обновить токены доступа?