【问题标题】:Quick Books Create Customer OAuth 2.0 token errorQuickbooks 创建客户 OAuth 2.0 令牌错误
【发布时间】:2018-09-24 11:51:40
【问题描述】:
    use QuickBooksOnline\API\DataService\DataService; 
    use QuickBooksOnline\API\Core\Http\Serialization\XmlObjectSerializer; 
    use QuickBooksOnline\API\Facades\Customer; 
    use QuickBooksOnline\API\Core\OAuth\OAuth2\OAuth2LoginHelper;

    $oauth2LoginHelper = new OAuth2LoginHelper("clientId","clientSecret");
    $accessTokenObj = $oauth2LoginHelper->refreshAccessTokenWithRefreshToken("Q02i05iXG98OaKON8coU5fKmUCuzEkESkpkbXUcViPVnXaJ1eK");
    $accessTokenValue = $accessTokenObj->getAccessToken();
    $refreshTokenValue = $accessTokenObj->getRefreshToken();

    // Prep Data Services
    $dataService = DataService::Configure(array(
        'auth_mode' => 'oauth2',
        'ClientID' => "ClientID",
        'ClientSecret' => "ClientSecret",
        'accessTokenKey' => $accessTokenValue,
        'refreshTokenKey' => $refreshTokenValue,
        'QBORealmID' => "3644364364363463634",
        'baseUrl' => "sandbox-quickbooks.api.intuit.com"
    ));
    $dataService->setLogLocation("/Users/hlu2/Desktop/newFolderForLog");
    $dataService->throwExceptionOnError(true);
    //Add a new Vendor
    $theResourceObj = Customer::create([
        "BillAddr" => [
            "Line1" => $clientInformation['clientHomeAddress'],
            "City" => "t43",
            "Country" => "43t3",
            "CountrySubDivisionCode" => "34tt334",
            "PostalCode" => ""
        ],
        "Notes" => "3t34t",
        "Title" => "34t434t",
        "GivenName" => $clientName[0],
        "MiddleName" => "rehhhreherher",
        "FamilyName" => $clientName[1],
        "Suffix" => "Jr",
        "FullyQualifiedName" => $clientInformation['clientName'],
        "CompanyName" => "43t334t",
        "DisplayName" => $clientInformation['clientName'],
        "PrimaryPhone" => [
            "FreeFormNumber" => $clientInformation['clientPhoneNumber']
        ],
        "PrimaryEmailAddr" => [
            "Address" => $clientInformation['clientEmail']
        ]
    ]);
    $resultingObj = $dataService->Add($theResourceObj);
    $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";
    }
    else {
        echo "Created Id={$resultingObj->Id}. Reconstructed response body:\n\n";
        $xmlBody = XmlObjectSerializer::getPostXmlFromArbitraryEntity($resultingObj, $urlResource);
        echo $xmlBody . "\n";

        return $resultingObj->Id;
    }

我收到此错误

PHP 致命错误:未捕获 QuickBooksOnline\API\Exception\ServiceException:Http 状态代码 [400]:使用刷新令牌刷新 OAuth 2 访问令牌失败。正文:[{"error":"invalid_grant"}]。\n\n 在线抛出 /var/www/project1/vendor/quickbooks/v3-php-sdk/src/Core/OAuth/OAuth2/OAuth2LoginHelper.php 271、推荐人:http://project1.local/trial/

我做错了什么。谢谢。

【问题讨论】:

  • 遇到类似的错误,能否发布您如何使用刷新访问令牌生成新的访问/刷新密钥?
  • @AJ47 你做对了吗.. 我也有同样的问题
  • @the_big_blackbox 不完全是,我发布了一个类似的问题,但没有得到我想要的答案,stackoverflow.com/questions/54278156

标签: php api quickbooks


【解决方案1】:
  • 首先你已经手动生成了刷新令牌和访问令牌 第一次。
  • 因为第一次获取刷新令牌和访问令牌 需要授权码。
  • 所以你必须在生成刷新令牌之后生成授权码 和访问令牌
  • 之后你可以试试看是否正常

注意:如果您获得了 Invalid grant,那么您必须在生成 accesstoken 和 referesh token 之后生成 authcode

【讨论】:

  • 是的,我修好了。我使用刷新访问令牌来生成访问密钥和刷新密钥。谢谢。
  • @DragiPostolovski,你能发布你的解决方案吗?
【解决方案2】:
use QuickBooksOnline\API\DataService\DataService;

$dataService = DataService::Configure(array(
    'auth_mode' => 'oauth2',
    'ClientID' => 'your client id',
    'ClientSecret' => 'your client secret',
    'RedirectURI' =>'redirect url',
     'scope' => "com.intuit.quickbooks.accounting openid profile",
     'baseUrl' => 'development or production'
));

$OAuth2LoginHelper = $dataService->getOAuth2LoginHelper();
$authorizationCodeUrl = $OAuth2LoginHelper->getAuthorizationCodeURL();

if( isset($_GET['code']) ) {
    $accessTokenObj = $OAuth2LoginHelper->exchangeAuthorizationCodeForToken( $_GET['code'], 'your company id') );

    // save these for later use

    $refreshTokenValue = $accessTokenObj->getRefreshToken();
    // Expires every 12 hours.
    $refreshTokenExpiry = $accessTokenObj->getRefreshTokenExpiresAt();

    // The access token and access token expiration.
    $accessTokenValue = $accessTokenObj->getAccessToken();
    $accessTokenExpiry = $accessTokenObj->getAccessTokenExpiresAt();
}

【讨论】:

猜你喜欢
  • 2021-03-12
  • 2021-01-24
  • 1970-01-01
  • 2017-04-30
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 2014-02-25
相关资源
最近更新 更多