只能获取一次QuickBooks API的访问令牌

时间:2016-04-18 02:50:36

标签: php api oauth quickbooks quickbooks-online

我使用PHPoAuthLibtheir 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的响应
  2. 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. 稍后再次使用该回复
    2. $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的一个基本误解

1 个答案:

答案 0 :(得分:1)

我不认为你拥有的是正确的OAuth实现。您是否阅读过OAuth规范并按照其定义实施?

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

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

看起来您正在尝试使用短期请求令牌来持续获取访问令牌。那不行。

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

  

$ quickbooksService-&GT; requestAccessToken(

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

此处的工作代码:

规格在这里: