【问题标题】:QuickBooks-V3-PHP-SDK only working partially (with QuickBooks Online)QuickBooks-V3-PHP-SDK 仅部分工作(使用 QuickBooks Online)
【发布时间】:2020-02-09 16:12:26
【问题描述】:

QuickBooks-V3-PHP-SDK 让我很难受。

我正在尝试使用它来同步发票数据。我可以使用 OAuth 2.0 成功获得授权,并将我的客户端 PHP Web 应用程序连接到 QuickBooks Online。但是,虽然我可以成功进行 getCompanyInfo 调用并接收结果,但我无法进行 getUserInfo 调用(或大多数其他 API 调用),因为它会抱怨未设置“访问令牌对象”还没有。

在连接到 QuickBooks 并获得授权时,一切似乎都正常工作 - 并且访问令牌对象已成功放置在 PHP 会话中。但由于某种原因,当我尝试获取 UserInfo 数据或使用任何其他 API 调用时,它会报错。

这是我收到的错误:

Fatal error:  Uncaught QuickBooksOnline\API\Exception\SdkException: [0]: Can't get OAuth 2 Access Token Object. It is not set yet.

thrown in /compiled/src/Core/OAuth/OAuth2/OAuth2LoginHelper.php on line 129

这是我尝试获取 UserInfo 的方法:

$dataService->updateOAuth2Token($accessToken);
$OAuth2LoginHelper = $dataService->getOAuth2LoginHelper();
$result = $OAuth2LoginHelper->getUserInfo();

同样,获取 CompanyInfo 没有任何问题。

有人知道发生了什么吗?

下面我包含来自 apiCall.php 的代码(来自 HelloWorld 示例包,由我自己进一步编辑)。在我已经连接到 QuickBooks Online 并获得授权后,此文件用于通过 Ajax 发出请求。

<?php

require_once(__DIR__ . '/vendor/autoload.php');
use QuickBooksOnline\API\Core\ServiceContext;
use QuickBooksOnline\API\DataService\DataService;
use QuickBooksOnline\API\Core\Http\Serialization\XmlObjectSerializer;
use QuickBooksOnline\API\Facades\Invoice;

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'];
    $dataService->throwExceptionOnError(true);

    /*
     * Update the OAuth2Token of the dataService object
     */
    $dataService->updateOAuth2Token($accessToken);

    //Get the requested data:
    $action = filter_input(INPUT_GET, "action", FILTER_SANITIZE_SPECIAL_CHARS);
    $method = "get$action";

    switch($action){
        case "CompanyInfo":
            $result = $dataService->$method();
            break;

        case "UserInfo":
            $OAuth2LoginHelper = $dataService->getOAuth2LoginHelper();
            $result = $OAuth2LoginHelper->getUserInfo();
            break;

        case "InvoiceExample":
            $allInvoices = $dataService->Query("SELECT * FROM Invoice");
            $result = $allInvoices;
            break;
    }


    var_dump($result);

    return $result;
}

$result = makeAPICall();

?>

有人知道我做错了什么吗?

【问题讨论】:

    标签: php oauth-2.0 quickbooks quickbooks-online


    【解决方案1】:

    Intuit (QuickBooks) 支持团队为我提供了答案。在上面的 ApiCall 代码中,我必须使用以下代码来发出 UserInfo 请求:

    $result = $OAuth2LoginHelper->getUserInfo($accessToken->getAccessToken(), 'development');
    

    显然,如果这涉及生产密钥,我将不得不将“开发”替换为“生产”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-04
      • 1970-01-01
      • 2016-08-06
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多