【发布时间】:2013-02-04 20:30:08
【问题描述】:
我已成功使用 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 - 消息 = 验证 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”的百分比编码。
本质上,您必须对空格和冒号进行“双重”编码,但不能对等号进行编码。我尝试了许多编码排列,但相信我的错误是我不是“双重”编码,或者当我是双重编码时,我包含了“=”符号。无论哪种方式都会破坏您的签名。感谢大家的意见。
【问题讨论】:
-
看起来很傻,但你试过用 %20 替换空格吗?
-
我正在使用一个函数为我进行 RFC3986 编码,但我也尝试了手动编码和其他一些编码方法,但无济于事。感谢您的意见。
-
感谢您创建自己的 OAuth 签名...我去过那里的生活这让我抓狂
标签: quickbooks intuit-partner-platform quickbooks-online