首先 - 我的问题:
访问 Quickbooks API 时,v3(本周末被 Intuit 强加给我)我正在尝试访问日记条目(但以下问题在任何其他查询中仍然存在)并且我正在尝试使用规定的查询? query=SELECT * FROM JournalEntry(什么?)。
https://qb.sbfinance.intuit.com/v3/company/<id>/query?query=SELECT * FROM JournalEntry
我得到结果:
{"Fault":{"Error":[{"Message":"message=Exception authenticating OAuth; errorCode=003200; statusCode=401","code":"3200"}],"type":"AUTHENTICATION"},"requestId":"6f5e5f14af7d4867ad0d8f639ade7d04","time":"2013-11-12T16:10:44.724Z"}
是的,它告诉我身份验证存在错误。但是,当我访问一个不包含这种荒谬查询语法的 URL 时,一切正常:
https://qb.sbfinance.intuit.com/v3/company/<id>/journalentry/<id>
我在访问 v2 API 时遇到了类似的错误,这对我来说是错误的格式,但我看不出我的查询有什么问题。
而且因为我用于生成身份验证令牌等的代码对于两种类型的请求都是相同的,我怀疑问题出在我的身份验证方式上。类似地,“异常”告诉我,API 没有识别出一些问题。可能是错误的 URL 格式。
我尝试用“+”和“%20”替换查询 URL 空格,这会返回相同的错误。
我正在使用 python 和 rauth。该代码适用于 v2(但在周末已被弃用,没有警告,现在不再记录)。
作为奖励,因为显然这是 Intuit 与客户沟通的主要方式:我很震惊 Intuit 不再在他们的网站上提供私人支持票,并且他们依靠像 SO 这样的社区环境来提供支持。他们至少能做的就是提供自己的支持。特别是如果我们为使用 API 付费。这绝对令人震惊。
最重要的是,API 返回不一致的响应(相同的请求将返回错误或有效结果,具体取决于......根本没有变化)。我通过他们的支持票报告了一个错误,他们已经适当地忽略了。
哦,文档说要使用
https://quickbooks.api.intuit.com/v3/v3/company/companyID/query?query=selectStmt
而 API Explorer 使用:
https://qb.sbfinance.intuit.com/v3/company/<id>/query?query=SELECT * FROM JournalEntry
有人知道我应该实际使用哪一个吗?
编辑
对于失败的响应,我的请求标头是:
{
'Content-Length': u'62',
'Accept-Encoding': 'gzip,
deflate,
compress',
'accept': 'application/json',
'User-Agent': 'python-requests/1.2.3CPython/2.7.5Darwin/13.0.0',
'Content-Type': 'application/x-www-form-urlencoded',
'authorization': 'OAuthrealm="<companyId>",
oauth_nonce="3ad98c5f71bc9f102cc31ac9815cb6d08994454e",
oauth_timestamp="1384280420",
oauth_consumer_key="<consumerKey>",
oauth_signature_method="HMAC-SHA1",
oauth_version="1.0",
oauth_token="<oauthToken>",
oauth_signature="<oauthSignature"'
}
我的网址是:
https://quickbooks.api.intuit.com/v3/company/<id>/query?query=SELECT+*+FROM+JournalEntry&
我的响应标题是:
{'content-length': '227', 'server': 'Apache/2.2.22 (Unix)', 'connection': 'close', 'date': 'Tue, 12 Nov 2013 18:20:20 GMT', 'content-type': 'application/json;charset=ISO-8859-1', 'www-authenticate': 'OAuth oauth_problem="signature_invalid"'}
我的签名哈希函数是正确的。它是Rauth使用的标准函数,适用于更标准的 API 调用(其中没有空格或 SQL 选择查询)。