我通常使用效果很好的PHP SDK。但是,我需要通过SDK调用当前不可用的资源,该资源能够根据https://developer.intuit.com/docs/api/accounting/invoice提取PDF发票
因此我需要通过基本URL连接。现在,这是一个我只使用连接到我自己的公司帐户的应用程序。我通过oAuth Playground生成了所有凭据,并且每180天手动续订一次。这就是我试过的:
$url = "https://quickbooks.api.intuit.com/v3/company/123456/invoice/8661/pdf";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array("OAuth oauth_token:*******",
"oauth_nonce:******",
"oauth_consumer_key:*****",
"oauth_signature_method:HMAC-SHA1",
"oauth_timestamp:1461326602",
"oauth_version:1.0",
"oauth_signature:******"));
curl_setopt($curl, CURLOPT_VERBOSE, TRUE);
$result = curl_exec ($curl);
print $result;
这是回复:
< HTTP/1.1 400 Illegal character 0x20
< Server: nginx
< Date: Fri, 22 Apr 2016 11:58:59 GMT
< Content-Length: 0
< Connection: keep-alive
< Keep-Alive: timeout=5
我甚至不知道我是否使用了所有正确的密钥和令牌。我使用了成功用于PHP SDK的相同值。
如果有人可以告诉我我做错了什么,我会很感激。感谢。
答案 0 :(得分:1)
您必须根据文档使用OAuth签署您的请求:
https://developer.intuit.com/docs/0100_accounting/0060_authentication_and_authorization
如果您想使用cURL执行此操作,则必须实施OAuth规范:
正如您在示例代码中所做的那样对其进行硬编码将无法正常工作。您必须使用OAuth签名算法为每个请求计算OAuth签名。
如果您不想自己这样做,请尝试使用已经为您提供此功能的库。例如,OAuth库:
http://php.net/manual/en/book.oauth.php
或者是一个实际的QuickBooks Online + PHP lib,提供您需要的功能(免责声明 - 我是作者):
https://github.com/consolibyte/quickbooks-php
具体来说,下载PDF:
答案 1 :(得分:0)
也许这会对你有所帮助:
使用所有参数和键创建字符串,并使用Authorization键创建数组并在标题部分中使用。
$auth = 'realm="123456",oauth_consumer_key="KEYSTRING",oauth_token="TOKENSTRING",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1502970860",oauth_nonce="KbSwZN",oauth_version="1.0",oauth_signature="W3fYzXn5EZ1ajo6SfU0LZEQPKfc%3D"';
$headr = array();
$headr[] = 'Authorization: OAuth '.$auth;
$url = "https://quickbooks.api.intuit.com/v3/company/123456/customer/2";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER,$headr);
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
$response = curl_exec($ch);
echo "<pre>"; print_r($response); echo "</pre>"; die();