为什么为quickbooks新创建的api令牌在PHP中失败,但在curl中有效



当我用php-sdk刷新quickbooks的api令牌时,它们不适用于php-sdk。它们只能通过命令行使用curl。为什么它不适用于php-sdk?我将在下面演示这个问题:

下面的脚本运行得很好。它打印两次访问令牌和客户列表:

<?php
require_once(__DIR__ . '/vendor/autoload.php');
use QuickBooksOnlineAPIDataServiceDataService;
use QuickBooksOnlineAPICoreOAuthOAuth2OAuth2LoginHelper;
session_start();
function makeAPICall()
{
// 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' => "development"
));
/*
* Retrieve the accessToken value from session variable
*/
$accessToken = $_SESSION['sessionAccessToken'];
echo "OLD ACCESS TOKEN:n"; print_r($accessToken);
$oauth2LoginHelper = new OAuth2LoginHelper($config['client_id'], $config['client_secret']);
//$accessToken = $oauth2LoginHelper->refreshAccessTokenWithRefreshToken($accessToken->getRefreshToken());
/*
* Update the OAuth2Token of the dataService object
*/
$dataService->updateOAuth2Token($accessToken);
echo "NEW ACCESS TOKEN:n"; print_r($accessToken);
$i = 0;
while (1) {
$allCustomers = $dataService->FindAll('Customer', $i, 500);
$error = $dataService->getLastError();
if ($error) {
echo "The Status code is: " . $error->getHttpStatusCode() . "n";
echo "The Helper message is: " . $error->getOAuthHelperError() . "n";
echo "The Response message is: " . $error->getResponseBody() . "n";
exit();
}
if (!$allCustomers || (0==count($allCustomers))) {
break;
}
foreach ($allCustomers as $oneCustomer) {
echo "Customer[".($i++)."]: {$oneCustomer->DisplayName}<br/>";
echo "t * Id: [{$oneCustomer->Id}]n";
echo "t * Active: [{$oneCustomer->Active}]n";
echo "n";
}
}
}
$result = makeAPICall();

如果我启用线路$accessToken = $oauth2LoginHelper->refreshAccessTokenWithRefreshToken($accessToken->getRefreshToken());,我会得到以下输出:

OLD ACCESS TOKEN:
QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken Object
(
[accessTokenKey:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..KPBgO13eC2F6tGTYO-eBjg.n1B1jaePPz9krqEaRuy3k5QO70CmMneddPKHq_U-_Lf4kHiOu5zhhhTIoSvmjoX7cB8HPqKZCkGo_oBTwrTHgvFVIRGxsk4iJOp8eMuM34s6FNux6mzeDGB89Q-yKzDuJbMSYInm694Tdyun6YgOwOlsktRPqktOWVXUqbt6wmGa0YARV8lAT8CX1YnlgzJsS2uz0qfgFufnQd3IPOtzVmgR7X40eu64qQmIseHRvETw5myVLnkKHNPrjCAzr97-TtCZpxx9MIKqaSzDoDlnko4gOHUQB_eWrbTC9j3eeI2vX8xNFrHQh34SgSDWJBBvWdDuEgxCzJwdkvXd_c2yhW4jRJrgGuE7456EJjz7Qm-j2emWKLAS5SRJcEHcYYIZvKa1gO1SvsF0YMNz3aanyfP-ci-J_ipuVv4-lu_-NBjfopzieSLkbsJob6voVLAmEdXDAg2hjXe9VjAoI_fcPnMS_Nxt3bvXd2DLbqKDi5x0zatRQVVzSV9npOUz2Rwd2k7XtsdzkwzvVg9Nw3M-XZp7USgXzNqqIQCqzZqqWSomUsxtB7ZLlAXBR32pj_8Thnj2ail_qW_KpBlqqKtij-T0dbprx-I0hWGDOnpUFhCmip-oKLocBiAugBMWAaY6IHZ2U9tmZhWDC5XNbhqy_NLIkjh5YPBrAv3EvizGa1l_hfS3oc86EGpvFoBf8bvWpqkJiZt1vYNkvDV6pOk1ZgOmpPqhiRw-HEOAmBzONC3VI57u0dwVkM1m95HoSI4T49BFQSg5B1Rvg6BY3D_IKIT7Ve2dyTf0ApZXhPnZXqq3sDuy6b1113v-Q5k9xfa8TRNFZmkA5XN4tjy0bpO4sue5wGO-BG0aMBntM-1VEKvp0t2m3u2-RWJ6X2x3uvwn.YTlB02ihKoPJFoxHyuidhQ
[tokenType:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => bearer
[refresh_token:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => AB11619101552M4mvRdPUzPdddQQQDrruD2sf4Wc1nJ69GJsTs
[accessTokenExpiresAt:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => 1610378752
[refreshTokenExpiresAt:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => 1619101552
[accessTokenValidationPeriod:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => 3600
[refreshTokenValidationPeriod:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => 8726400
[clientID:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => AB5xEvDqPW14gGkIz5cEBWsaUQkK9gP7gg8zDrsWtay4JcqISS
[clientSecret:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => FJJG6S6Lr9NxTJOynnH448FZ9A3sVNEIT2exlezB
[realmID:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => 4620816365156528260
[baseURL:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => 
)
NEW ACCESS TOKEN:
QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken Object
(
[accessTokenKey:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..t-Dz4BeWjc8YKRyi2gESsw.YiG8g5LYBkI7s39gc_PfDWMoeNJfPPMh6ExTNONcWhDV1_H6cglhmttm4F1Hd-0xxGMtISYSxwH2ywCxn7Bz9twf-1R-QMv4k70nYrn8fesNi0OY9FsHl2ZHX7xJo76eUkCq1PQFV9iiZ4khL0VGXm-C8Cyqogzh23CdnjIJqG2s3ykhtUWjCHSy2PRpU1-_FZzBlFFUqxigeuLU8u1fLj7NAVuVzxx0sSEBNNl76fQ-iAzwjmuGBiM1IxgCSbRWJqMXoZPcuPuKD-lD8-EZMB4pNfJCjYeA2qRZ9COycaK_iJh9vuIfTTq49GhdwbIiBggvc0BbyccaGtQNK4UfLlb7SRogfG-AxRhNq1g54fOo9PkfeZ5Mn2VAWxgKzPLRbIupXIcwOpiWJVMz3zFvjBd64qj8OzITPhYhz0hJ5rATdBe3U20Z4DA8Klqy3A6DshCaiEwBFwd8QKmmorAFLF8HBWuD4kHVn5_NuuMsviqhN0JLkQ0JwZ01WsUxMEvS9Lj6O_OqFzpjWZrqNO8hW6k7GAX5tcnw2TaISL9l6eEXH_C3MQwg9fcKItehiPtQReM4rylgXfcfIQWVn1BiReOV2ctlcZbzhmi5WXsDU_0fxQdhr49DLZttiPDYA4iiCRY6BogbpeOg7_ekZpzpTpYYZzVWwapxreT6ZawrPYkq_KCxbMqJ8vL8uToDpfdHFPF92ITmIAQkuFGsji2ay4GnnAjHqmXey5tboWc0ahmHyZJh4Ujr_Mr1jnycHyXjK-_zLuuT036P2zCmZdgHR3sfv4G3wKeiqw8brKLj2J3ft441AS7FsuwnIXO0xZfefFdBX38yElqyDdCnSUm0KvIxQKW6-Veu4qr8aLuNG-RtJWO47BgRbCZguxoyNbXo.6x5sd3kIBdvUBsmfXkKSgg
[tokenType:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => bearer
[refresh_token:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => AB11619101552M4mvRdPUzPdddQQQDrruD2sf4Wc1nJ69GJsTs
[accessTokenExpiresAt:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => 1610378756
[refreshTokenExpiresAt:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => 1619101552
[accessTokenValidationPeriod:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => 3600
[refreshTokenValidationPeriod:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => 8726396
[clientID:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => AB5xEvDqPW14gGkIz5cEBWsaUQkK9gP7gg8zDrsWtay4JcqISS
[clientSecret:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => FJJG6S6Lr9NxTJOynnH448FZ9A3sVNEIT2exlezB
[realmID:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => 
[baseURL:QuickBooksOnlineAPICoreOAuthOAuth2OAuth2AccessToken:private] => 
)
The Status code is: 400
The Helper message is: Invalid auth/bad request (got a 400, expected HTTP/1.1 20X or a redirect)
The Response message is: <?xml version="1.0" encoding="UTF-8" standalone="yes"?><IntuitResponse xmlns="http://schema.intuit.com/finance/v3" time="2021-01-11T06:25:56.985-08:00"><Fault type="ValidationFault"><Error code="500"><Message>Unsupported Operation</Message><Detail>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.</Detail></Error></Fault></IntuitResponse>

如上所示,查询具有新令牌的客户会出现400错误。如果我使用curl:,两个令牌都有效

Success with old token:
curl -X GET 'https://sandbox-quickbooks.api.intuit.com/v3/company/4620816365156528260/query?query=SELECT%20*%20FROM%20Customer' 
-H 'accept: application/json' 
-H 'authorization:Bearer eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..KPBgO13eC2F6tGTYO-eBjg.n1B1jaePPz9krqEaRuy3k5QO70CmMneddPKHq_U-_Lf4kHiOu5zhhhTIoSvmjoX7cB8HPqKZCkGo_oBTwrTHgvFVIRGxsk4iJOp8eMuM34s6FNux6mzeDGB89Q-yKzDuJbMSYInm694Tdyun6YgOwOlsktRPqktOWVXUqbt6wmGa0YARV8lAT8CX1YnlgzJsS2uz0qfgFufnQd3IPOtzVmgR7X40eu64qQmIseHRvETw5myVLnkKHNPrjCAzr97-TtCZpxx9MIKqaSzDoDlnko4gOHUQB_eWrbTC9j3eeI2vX8xNFrHQh34SgSDWJBBvWdDuEgxCzJwdkvXd_c2yhW4jRJrgGuE7456EJjz7Qm-j2emWKLAS5SRJcEHcYYIZvKa1gO1SvsF0YMNz3aanyfP-ci-J_ipuVv4-lu_-NBjfopzieSLkbsJob6voVLAmEdXDAg2hjXe9VjAoI_fcPnMS_Nxt3bvXd2DLbqKDi5x0zatRQVVzSV9npOUz2Rwd2k7XtsdzkwzvVg9Nw3M-XZp7USgXzNqqIQCqzZqqWSomUsxtB7ZLlAXBR32pj_8Thnj2ail_qW_KpBlqqKtij-T0dbprx-I0hWGDOnpUFhCmip-oKLocBiAugBMWAaY6IHZ2U9tmZhWDC5XNbhqy_NLIkjh5YPBrAv3EvizGa1l_hfS3oc86EGpvFoBf8bvWpqkJiZt1vYNkvDV6pOk1ZgOmpPqhiRw-HEOAmBzONC3VI57u0dwVkM1m95HoSI4T49BFQSg5B1Rvg6BY3D_IKIT7Ve2dyTf0ApZXhPnZXqq3sDuy6b1113v-Q5k9xfa8TRNFZmkA5XN4tjy0bpO4sue5wGO-BG0aMBntM-1VEKvp0t2m3u2-RWJ6X2x3uvwn.YTlB02ihKoPJFoxHyuidhQ' 
-H 'content-type: application/json'
Success with new token:
curl -X GET 'https://sandbox-quickbooks.api.intuit.com/v3/company/4620816365156528260/query?query=SELECT%20*%20FROM%20Customer' 
-H 'accept: application/json' 
-H 'authorization:Bearer eyJlbmMiOiJBMTI4Q0JDLUhTMjU2IiwiYWxnIjoiZGlyIn0..t-Dz4BeWjc8YKRyi2gESsw.YiG8g5LYBkI7s39gc_PfDWMoeNJfPPMh6ExTNONcWhDV1_H6cglhmttm4F1Hd-0xxGMtISYSxwH2ywCxn7Bz9twf-1R-QMv4k70nYrn8fesNi0OY9FsHl2ZHX7xJo76eUkCq1PQFV9iiZ4khL0VGXm-C8Cyqogzh23CdnjIJqG2s3ykhtUWjCHSy2PRpU1-_FZzBlFFUqxigeuLU8u1fLj7NAVuVzxx0sSEBNNl76fQ-iAzwjmuGBiM1IxgCSbRWJqMXoZPcuPuKD-lD8-EZMB4pNfJCjYeA2qRZ9COycaK_iJh9vuIfTTq49GhdwbIiBggvc0BbyccaGtQNK4UfLlb7SRogfG-AxRhNq1g54fOo9PkfeZ5Mn2VAWxgKzPLRbIupXIcwOpiWJVMz3zFvjBd64qj8OzITPhYhz0hJ5rATdBe3U20Z4DA8Klqy3A6DshCaiEwBFwd8QKmmorAFLF8HBWuD4kHVn5_NuuMsviqhN0JLkQ0JwZ01WsUxMEvS9Lj6O_OqFzpjWZrqNO8hW6k7GAX5tcnw2TaISL9l6eEXH_C3MQwg9fcKItehiPtQReM4rylgXfcfIQWVn1BiReOV2ctlcZbzhmi5WXsDU_0fxQdhr49DLZttiPDYA4iiCRY6BogbpeOg7_ekZpzpTpYYZzVWwapxreT6ZawrPYkq_KCxbMqJ8vL8uToDpfdHFPF92ITmIAQkuFGsji2ay4GnnAjHqmXey5tboWc0ahmHyZJh4Ujr_Mr1jnycHyXjK-_zLuuT036P2zCmZdgHR3sfv4G3wKeiqw8brKLj2J3ft441AS7FsuwnIXO0xZfefFdBX38yElqyDdCnSUm0KvIxQKW6-Veu4qr8aLuNG-RtJWO47BgRbCZguxoyNbXo.6x5sd3kIBdvUBsmfXkKSgg' 
-H 'content-type: application/json'

所以我的问题是,如何使用新的访问令牌通过php-sdk查询客户

EDIT,当您阅读此消息时,您的令牌可能已过期。但我想强调的是,如果您同时运行我在上面发布的两个curl语句,它们都会起作用。

如果有必要,我可以再次生成新的代币供每个人试用。

在使用刷新访问令牌后,我也遇到了这种情况

$token = $loginHelper->refreshAccessTokenWithRefreshToken($refresh_token);

之后,我不得不在令牌中设置realmId,如下所示:

$token->setRealmID($myRealmId);

它奏效了。

更奇怪的是,我在Trait函数中这样做,并返回我更新的访问令牌(应该已经设置了realmId(,但当我试图使用SDK进行查询时:

$dataService->query("select * from class");

它仍然给我那个错误。因此,在返回访问令牌后,在尝试将其用于query之前,我必须再次设置realmId

最新更新