【问题标题】:Can only get access token for QuickBooks API once只能获得一次 QuickBooks API 的访问令牌
【发布时间】:2016-04-18 02:50:36
【问题描述】:

我使用PHPoAuthLib 以根据their example 连接到 QuickBooks API

当我按照他们的示例进行操作时,我向 API 发出的第一个请求运行良好:

$result = json_decode($quickbooksService->request($url));
echo 'result: <pre>' . print_r($result, true) . '</pre>';

但是,在他们的示例中,他们使用 $_GET['oauth_token']$_GET['oauth_verifier'] 请求访问令牌,并且这些值仅在我的应用程序获得授权后立即从 QuickBooks Online 的单个回调期间在 $_GET 服务器变量上可用。

对于未来的请求,PHPoAuthLib 的文档中没有此类示例,因此我尝试了一个快速的自制解决方案:

  1. 将 QBO 的响应保存在某处

if (!empty($_GET['oauth_token']) {
    file_put_contents("token.txt", json_encode([
        'oauth_token' => $_GET['oauth_token'],
        'oauth_verifier' => $_GET['oauth_verifier'],
        'realm_id' => $_GET['realmId']
    ]));
}
  1. 稍后再使用该响应

$token = json_decode(file_get_contents("token.txt"));
$quickbooksService->requestAccessToken(
    $token->oauth_token,
    $token->oauth_verifier
    // $token->getRequestTokenSecret() is not necessary - it will be automatically populated
);
// At this point my app crashes and return a 500 error
// Further code does not run

我收到的错误是:

StreamClient.php 第 68 行中的 TokenResponseException: 请求资源失败。 HTTP 代码:HTTP/1.1 401 未授权

请记住,如果我在应用获得授权后立即使用令牌和验证器,那么它们完美地工作。如果我将它们保存到一个文件并尝试在 30 秒后重新使用它们,就会发生这种情况。

我认为这可能是对 OAuth 1.0 的基本误解

【问题讨论】:

    标签: php api oauth quickbooks quickbooks-online


    【解决方案1】:

    我认为您所拥有的不是正确的 OAuth 实施。您是否阅读过 OAuth 规范并按照那里定义的方式实施?

    一旦您拥有了请求令牌和验证者,您就可以使用它们来获取访问令牌。

    该访问令牌有效期为 6 个月。

    您似乎正在尝试使用短期请求令牌来持续获取访问令牌。那是行不通的。

    即如果您每次想提出另一个请求时都这样做:

    $quickbooksService->requestAccessToken(

    那你做错了什么。你应该每 6 个月做一次,就是这样。

    这里的工作代码:

    规格在这里:

    【讨论】:

      猜你喜欢
      • 2017-06-09
      • 1970-01-01
      • 2018-03-02
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      相关资源
      最近更新 更多