Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么为quickbooks新创建的api标记在PHP中失败,但在curl中工作_Php_Curl_Quickbooks - Fatal编程技术网

为什么为quickbooks新创建的api标记在PHP中失败,但在curl中工作

为什么为quickbooks新创建的api标记在PHP中失败,但在curl中工作,php,curl,quickbooks,Php,Curl,Quickbooks,当我使用PHPSDK刷新quickbooks的api令牌时,它们不适用于PHPSDK。它们只能通过命令行使用curl。为什么它不适用于PHPSDK?我将在下面演示此问题: 下面的脚本非常有效。它打印两次访问令牌和客户列表: <?php require_once(__DIR__ . '/vendor/autoload.php'); use QuickBooksOnline\API\DataService\DataService; use QuickBooksOnline\API\Core\O

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

下面的脚本非常有效。它打印两次访问令牌和客户列表:

<?php
require_once(__DIR__ . '/vendor/autoload.php');
use QuickBooksOnline\API\DataService\DataService;
use QuickBooksOnline\API\Core\OAuth\OAuth2\OAuth2LoginHelper;
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();
如上所示,查询具有新令牌的客户会产生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'
所以我的问题是,如何使用新的访问令牌通过PHPSDK查询客户? 编辑,当您阅读此消息时,您的代币可能已过期。但是我想强调的是,如果您同时运行我上面发布的两个curl语句,它们将起作用


如有必要,我可以再次生成新令牌供所有人试用。

在使用以下命令刷新访问令牌后,我也会遇到这种情况:

$token=$loginHelper->refreshAccessTokenWithRefreshToken($refresh\u token)

之后,我必须在令牌中设置
realmId

$token->setRealmID($myRealmId)

它成功了

更奇怪的是,我在一个Trait函数中这样做并返回更新的访问令牌(据推测,realmId已经设置好了),但当我试图使用SDK调用query时:

$dataService->query(“从类中选择*)


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

作为友好建议,我不会公开发布有效令牌,即使是在沙箱环境中,您也不希望internet上的任何匿名者拥有这些资源,并在您访问时对API进行滥用调用。不知道为什么错误消息会提到与您的示例中使用的API URL不同的API URL?“操作无法找到完整路径的相关:/v3/公司/查询的资源:
https://c50.sandbox.qbo.intuit.com/qbo50/v3/company/query?minorversion=57
不受支持。“@CBroe我找不到
https://c50.sandbox.qbo.intuit.com/qbo50/v3/company/query?minorversion=57源代码中的
。我试图在供应商软件包中为
c50
qbo50
设置
grep
,但没有得到任何结果。因此,我猜quickbooks api返回了该字符串,尽管我可能根本没有ping该端点。我解决这个问题的方法是放弃PHPSDK,而只使用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'