使用QBO V3 API,我正在尝试查询名称中包含撇号的客户,但我无法弄清楚如何正确引用该名称。
我使用了API Explorer,当我输入这样的查询时:
select * from customer where displayname like '%O\'Halloran'
然后API Explorer工作,并说request-uri确实是:
https://qb.sbfinance.intuit.com/v3/company/1002341430/query?query=select * from customer where displayname like '%25O%5C'Halloran'
在我的查询中注意几件事:
然后在API中注意API Explorer给我回复:它保留单引号包装器字符串,但不会转义值内的单引号。
如果我转身并使用API Explorer正在使用的完全请求URI - 它不起作用。我得到一个查询过滤器异常。很明显,API Explorer向我展示的不是真正的查询。
由于没有记录这一点,我只是试图对咒语进行反向工程,但我无法确定。我看过PHP SDK,但它没有在那里解决,他们认为呼叫者(像我们一样)会知道自己该做什么。
答案 0 :(得分:3)
您需要使用\
转义它,然后对您发送的实际URL请求进行URL编码。
您要点击的实际网址(对于LIKE '%Keith O'Malley%'
的客户查询应该是这样的:
https://quickbooks.api.intuit.com/v3/company/730176505/query?query=SELECT+%2A+FROM+Customer+WHERE+FullyQualifiedName+LIKE+%27%25Keith+O%5C%27Mally%25%27+
完整的HTTP请求如下所示:
GET https://quickbooks.api.intuit.com/v3/company/730176505/query?query=SELECT+%2A+FROM+Customer+WHERE+FullyQualifiedName+LIKE+%27%25Keith+O%5C%27Mally%25%27+ HTTP/1.1
Content-Type: text/plain
Authorization: OAuth realm="", oauth_signature_method="HMAC-SHA1", oauth_signature="C9mzgdURjATMEymtAySNe%2BYBW7Q%3D", oauth_nonce="3XDdP", oauth_timestamp="1394038522", oauth_token="lvprdgeo8rx8r1Ul10Bf474KjHEjcLFSVYttLJjcR2pFtIiD", oauth_consumer_key="qyprdlGJ4gWv4sMW0syilH2o4KirQe", oauth_version="1.0"
如果你没有承诺使用无法正常逃避的Intuit DevKit,那么有一个开源的QuickBooks PHP DevKit可以正确处理这些事情:
以下是您正在寻找的具体示例:
除了一堆其他工作示例:
答案 1 :(得分:1)
请使用转义字符(\)作为单引号(我认为您已经在PHP代码中执行此操作)。 PHP中应该有一些libs(或函数)执行此url编码。
您也可以参考此标准网址编码指南。 http://www.w3schools.com/tags/ref_urlencode.asp
Devkit处理大多数这些编码。 https://developer.intuit.com/docs/0025_quickbooksapi/0055_devkits
由于
答案 2 :(得分:0)
我只使用URL编码替换单引号char就成功了:%27
如下所示:query = SELECT%20Id%2CDisplayName%2CSyncToken%20FROM%20Customer%20WHERE%20Id%3E%270%27%20MAXRESULTS%201000
仅供参考,我也注意到API控制台和API资源管理器是宽容的(几乎是故障!)并且会接受比实际调用更广泛的语法变化。
答案 3 :(得分:0)
如果您使用PHP或Ruby API创建调用,那么您应该同时转义\ character和'您创建的字符串中的字符
例如使用Quickbooks Ruby API
find_by("CompanyName", "Bill\\\'s Windsurf Shop")
生成正确的查询以搜索Bill's Windsurg Shop