当我按照他们的示例时,我对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的文档中没有这样的示例,所以我尝试了一个快速的自制解决方案:
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的一个基本误解
答案 0 :(得分:1)
我不认为你拥有的是正确的OAuth实现。您是否阅读过OAuth规范并按照其定义实施?
一旦有了请求令牌和验证者,就可以使用它们来获取访问令牌。
那个访问令牌有效期为6个月。
看起来您正在尝试使用短期请求令牌来持续获取访问令牌。那不行。
即。如果你每次想要提出另一个请求时都这样做:
$ quickbooksService-&GT; requestAccessToken(
然后你做错了什么。你应该每6个月做一次,就是这样。
此处的工作代码:
规格在这里: