代码之家  ›  专栏  ›  技术社区  ›  learningtech

无法使用php-sdk获取quickbooks刷新令牌

  •  1
  • learningtech  · 技术社区  · 5 年前

    我正在尝试了解更多关于用于生成访问令牌的quickbooks PHP SDK的信息。下面的代码运行良好。它将抓取我存储到数据库中的最后一个可用访问令牌,将其分配给quickbooks数据服务,然后抓取500条发票记录并打印发票号码:

    <?php
    require __DIR__.'/vendor/autoload.php';
    require '../../../wp-config.php';
     
    use QuickBooksOnline\API\DataService\DataService;
    use QuickBooksOnline\API\Core\OAuth\OAuth2\OAuth2LoginHelper;
     
    $con = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
     
    if ($con->connect_errno) {
     
        printf("connection failed: %s\n", $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());
    

    然后我看到错误消息:

    QuickBooksOnline\API\Core\HttpClients\FaultHandler Object
    (
        [context:QuickBooksOnline\API\Core\HttpClients\FaultHandler:private] => 
        [httpStatusCode:QuickBooksOnline\API\Core\HttpClients\FaultHandler:private] => 400
        [responseBody:QuickBooksOnline\API\Core\HttpClients\FaultHandler: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:QuickBooksOnline\API\Core\HttpClients\FaultHandler:private] => Invalid auth/bad request (got a 400, expected HTTP/1.1 20X or a redirect)
        [intuit_tid:QuickBooksOnline\API\Core\HttpClients\FaultHandler:private] => 1-5ffb7959-7079cde00c9068e3506236c7
        [intuitErrorType:QuickBooksOnline\API\Core\HttpClients\FaultHandler:private] => ValidationFault
        [intuitErrorCode:QuickBooksOnline\API\Core\HttpClients\FaultHandler:private] => 500
        [intuitErrorElement:QuickBooksOnline\API\Core\HttpClients\FaultHandler:private] => 
        [intuitErrorMessage:QuickBooksOnline\API\Core\HttpClients\FaultHandler:private] => Unsupported Operation
        [intuitErrorDetail:QuickBooksOnline\API\Core\HttpClients\FaultHandler: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() 在上一次会议上。

    为什么我新刷新的令牌会导致错误消息?

    为什么在a)我尝试创建刷新,然后b)看到错误消息,然后c)禁用刷新令牌代码,然后d)刷新页面后,过去一小时内发布的旧令牌仍然有效?

    如何正确刷新访问令牌?

    0 回复  |  直到 5 年前
    推荐文章