我在QBO v3 API(IPP)附件上传python请求时做错了什么?

时间:2014-06-30 14:37:41

标签: python-requests quickbooks intuit-partner-platform quickbooks-online

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附上文件......

1 个答案:

答案 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--

上面的第一行和最后一行似乎是你所缺少的。