【发布时间】: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 的文档中没有此类示例,因此我尝试了一个快速的自制解决方案:
- 将 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']
]));
}
- 稍后再使用该响应
$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