Intuit提供these instructions用于上传附件(可以与一个或多个交易相关联的Attachable objects)。
我相信我正在使用python的请求模块(通过rauth's OAuth1Session module - 请参阅下文,了解我如何创建会话对象)来生成这些要求。这是导致请求的代码:
print request_type
print url
print headers
print request_body
r = session.request(request_type, url, header_auth,
self.company_id, headers = headers,
data = request_body, **req_kwargs)
result = r.json()
print json.dumps(result, indent=4)
以及这些东西的输出:
POST
https://quickbooks.api.intuit.com/v3/company/0123456789/upload
{'Accept': 'application/json'}
Content-Disposition: form-data; name="Invoice 003"; filename="Invoice 003.pdf"
Content-Type: application/pdf
<@INCLUDE */MyDir/Invoice 003.pdf*@>
{
"Fault": {
"type": "SystemFault",
"Error": [
{
"Message": "An application error has occurred while processing your request",
"code": "10000",
"Detail": "System Failure Error: Cannot consume content type"
}
]
},
"time": "[timestamp]"
}
我已确认(通过QBO Web UI上传附件,然后通过API查询Attachable对象),application / pdf包含在可接受的文件类型列表中。
在sigmavirus24的建议中,我尝试从标题中删除Content-Type行,但我得到了相同的结果。
以下是我创建会话对象的方式(对于您在Intuit的API资源管理器中看到的每种类型的其他QBO v3 API请求,它都能正常工作):
from rauth import OAuth1Session
def create_session(self):
if self.consumer_secret and self.consumer_key and self.access_token_secret and self.access_token:
session = OAuth1Session(self.consumer_key,
self.consumer_secret,
self.access_token,
self.access_token_secret,
)
self.session = session
else:
raise Exception("Need four creds for Quickbooks.create_session.")
return self.session
我在这里可能会缺少什么?
编辑:目前的探索领域是here;我刚刚直接形成了你看到的标题(其中有&#34; INCLUDE&#34;字符串)。也许我应该用rauth附上文件......
答案 0 :(得分:0)
如果无法查看您正在使用的代码,我会在黑暗中拍摄并告诉您删除设置自己的Content-Type
。你可能不希望这样。看起来你想要multipart/form-data
,如果你停止战斗,请求会自行设置。
看起来你错过了QuickBooks期望的界限(基于你链接的内容)。
---------------------------acebdf13572468
Content-Disposition: form-data; name="file_content_01"; filename="IMG_0771.jpg"
Content-Type: image/jpeg
<@INCLUDE *Y:\Documents\IMG_0771.jpg*@>
---------------------------acebdf13572468--
上面的第一行和最后一行似乎是你所缺少的。