2016-04-22 60 views
0

我通常使用PHP SDK,它运行良好。但是,我需要调用一个当前不可用的资源,这个资源能够按照https://developer.intuit.com/docs/api/accounting/invoice如何使用CURL和PHP对Quickbooks Online API进行身份验证

拉入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

检查你的/etc/nginx/nginx.conf尝试修改keep_alive&client_max_body_size完成后重新启动nginx。应该工作 –

回答

1

你必须使用OAuth签署您的要求,每个文档:

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

如果你想与卷曲要做到这一点,你必须实现OAuth规格:

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

只是在您的示例代码中完成硬编码将不起作用。您必须使用OAuth签名算法为每个请求计算的OAuth签名。

如果您不想自己做这个,请尝试使用已经为您提供此功能的库。例如,OAuth的库:

http://php.net/manual/en/book.oauth.php

或实际QuickBooks的在线+ PHP LIB,提供您需要的功能(声明 - 我是作者):

https://github.com/consolibyte/quickbooks-php

具体地,下载PDF文件:

+0

谢谢。我一直在试图安装这个库,但是我遇到了困难,因为这里的说明已经过时了吗? http://www.consolibyte.com/docs/index.php/PHP_DevKit_for_QuickBooks_-_Intuit_Partner_Platform_Quick-Start。特别是它询问了一个DSN。对我来说这意味着QB的Windows版本,但我可能是错的。 – user2029890

+0

我一直在阅读更多的论坛。我正在使用生产密钥(与官方SDK配合使用)。有什么配置文件应该看起来像一个工作的例子?我不确定数据库在这里扮演什么角色。我安装了mysql,数据实际上是在这里编写的 – user2029890

+0

如果您使用我们的代码,那么OAuth令牌将写入数据库。就我所知,我们的代码/标记与Intuit无法互操作,所以如果您想使用我们的代码,您必须通过“连接到QuickBooks”按钮重新连接。 GitHub *上包含的配置文件是一个工作示例,前提是您遵循GitHub自述文件中链接的快速入门指南。 –

0

也许这将帮助你:

创建字符串的所有参数和钥匙,并与授权的关键阵列和在标题部分使用。

$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(); 
相关问题