QuickBooks Online 使用过滤器查询每次都返回 401

标签 quickbooks intuit-partner-platform quickbooks-online

我已经成功地使用 POST 和 Content-Type application/xml 创建对象

我还成功地使用 Content-Type application/x-www-form-urlencoded 和一个空白请求正文进行查询,该请求正文根据我指定的 URI 返回所有对象类型。

我也可以在请求正文中使用类似 PageNum=1&ResultsPerPage=1 之类的内容,并且我已经弄清楚如何将其合并到签名中,以便获得有效响应。

但是,无论我如何格式化它,当我尝试使用过滤器时,除了 401 响应之外,我什么也得不到(一些基本的东西,比如 Filter=FAMILYNAME :EQUALS: Doe)。我已经阅读了关于如何使用 [RFC3986] 百分比编码转义所有参数名称和值的 OAuth Core 1.0 Revision A 规范。但是我觉得我错过了一个步骤或格式不正确。我在 Intuit 的论坛上搜索有关正确格式的信息时看到了不一致的信息。

对此的任何帮助将不胜感激。我已经为此苦苦挣扎了一个星期。

尝试使用过滤器时得到的响应是:
HTTP 状态 401 - message=OAuth 身份验证异常;错误代码=003200;状态码=401

- - 更新 - -

当我尝试将过滤器与新 IPP 开发人员工具 - IPP API Explorer 一起使用时,我看到了同样的错误。我正在使用 IDS V2 QBO API Explorer。我可以使用该工具来检索所有帖子,并且响应显示了我的所有客户,但是当我尝试使用过滤器时,我得到:
服务器错误
401 - 未经授权:由于凭据无效,访问被拒绝。
您无权使用您提供的凭据查看此目录或页面。

有任何想法吗?如果我从 API Explorer 工具中得到同样的错误,这让我认为问题完全是另一回事。

----最终更新----

我终于在过滤器方面取得了成功,我相信我已经弄清楚我的问题是什么。我总是怀疑我能够使用“PageNum=1&ResultsPerPage=1”这样的分页查询来工作,但无法获得“Filter=FAMILYNAME :EQUALS: Doe”之类的查询。我怀疑过滤器格式中的空白有问题。之前让我无法追踪的原因是我无法让过滤器在 IDS V2 QBO API Explorer 中工作。这让我怀疑还有其他事情发生。我决定完全忽略 API Explorer,专注于为什么我可以让它以一种方式工作,而不能以另一种方式工作。

我相信我的问题归结为签名中过滤器值的不正确编码。这解释了我收到的 401 无效签名错误。

标准化后,“Filter=Name :EQUALS: Doe”变为“Filter=Name%20%3AEQUALS%20%3ADoe”。

应该给出“Filter%3DName%2520%253AEQUALS%2520%253ADoe”的百分比编码。

本质上,您必须对空格和冒号进行“双重”编码,而不是对等号进行“双重”编码。我尝试了许多进行编码的排列,但相信我的错误是我不是“双重”编码,或者当我进行双重编码时,我包含了“=”符号。无论哪种方式都会破坏您的签名。感谢大家的投入。

最佳答案

我相信我的问题归结为签名中过滤器值的不正确编码。这解释了我收到的 401 无效签名错误。

我使用在线工具引导我完成正确签署 Oauth 请求的步骤。在执行这些步骤时,我意识到我的问题在于规范化请求参数然后对它们进行百分比编码的步骤。我在标准化步骤中包含了过滤器的“=”,这会破坏您的签名。我使用的工具可以在以下位置找到:

http://hueniverse.com/2008/10/beginners-guide-to-oauth-part-iv-signing-requests/

感谢大家的投入。

关于QuickBooks Online 使用过滤器查询每次都返回 401,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14695065/

相关文章:

Quickbooks API 和检测已删除的项目

intuit-partner-platform - 我需要处理 OpenId 吗?

java - 如何在不使用 OAuth 的情况下使用 QuickBooks Online 进行简单例份验证?

google-app-engine - 如何在 Google Go 中为 QuickBooks API 调用正确添加 OAuth header

javascript - 无法为 SOAP Node.js 制定响应对象

quickbooks - QBXML 创建 InvoiceLine 按需添加项目

quickbooks - 销售订单中的多个订单在 qbxml 中添加请求

jquery - Intuit IPP 在 IE 中摧毁 jQuery

karate - 在 Karate 中如何将浮点值舍入为整数

php - 如何使用 Keith Palmer 的 QBO 框架设置自定义字段的值?