【问题标题】:How to authenticate to Quickbooks Online API using CURL & PHP如何使用 CURL 和 PHP 对 Quickbooks Online API 进行身份验证
【发布时间】:2016-04-22 12:05:57
【问题描述】:

我通常使用运行良好的 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 工作的值相同。

如果有人能告诉我我做错了什么,我将不胜感激。谢谢。

【问题讨论】:

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

标签: php curl quickbooks-online


【解决方案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 库,它提供了您需要的功能(免责声明——我是作者):

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

具体来说,下载 PDF:

【讨论】:

  • 谢谢。我一直在尝试安装该库,但由于此处的说明已过时,我遇到了困难? consolibyte.com/docs/index.php/…。特别是它询问DSN。对我来说,这意味着 QB 的 windows 版本,但我可能错了。
  • 我在您的论坛上阅读了更多内容。我正在使用生产密钥(可与官方 SDK 一起使用)。是否有配置文件应该是什么样子的工作示例?我不确定数据库在这里扮演什么角色。我已经安装了mysql,这里是真的写数据吗
  • 如果您使用我们的代码,则 OAuth 令牌会写入数据库。据我所知,我们的代码/令牌不能与 Intuit 互操作,因此如果您想使用我们的代码,您必须通过“连接到 QuickBooks”按钮重新连接。 GitHub 上包含的配置文件一个工作示例,前提是您遵循了 GitHub 自述文件中链接的快速入门指南。
  • 谢谢。我知道这离题了,但我仍然无法连接。我已经在你的讨论板上开始了一个关于这个的话题。谢谢
【解决方案2】:

也许这会对你有所帮助:

使用所有参数和键创建字符串,并使用授权键创建数组并在标题部分使用。

$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();

【讨论】:

    猜你喜欢
    • 2019-07-16
    • 1970-01-01
    • 2016-04-24
    • 2013-06-21
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多