如何使用CURL& amp ;;对Quickbooks Online API进行身份验证PHP

时间:2016-04-22 12:05:58

标签: php curl quickbooks-online

我通常使用效果很好的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的相同值。

如果有人可以告诉我我做错了什么,我会很感激。感谢。

2 个答案:

答案 0 :(得分:1)

您必须根据文档使用OAuth签署您的请求:

https://developer.intuit.com/docs/0100_accounting/0060_authentication_and_authorization

如果您想使用cURL执行此操作,则必须实施OAuth规范:

http://oauth.net/core/1.0a/

正如您在示例代码中所做的那样对其进行硬编码将无法正常工作。您必须使用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();