请注意:该解决方案成为内pyxero一个黑客得到我需要的结果。这可能不是您的最佳解决方案。
pyxero为“payments.put”生成的XML与xero文档中找到的“PUT Payments”XML结构不匹配。
我首先更改了字典的结构,以便basemanager.py中生成的XML与文档类似。
data = {
'Invoice': {'InvoiceID': "09ff0465-d1b0-4fb3-9e2e-3db4e83bb240"},
'Account': {"AccountID": "58F8AD72-1F2E-AFA2-416C-8F660DDD661B"},
'Date': datetime.datetime.now(),
'Amount': 30.00,
}
xero.payments.put(data)
的错误仍然坚持了,所以我不得不开始改变pyxero的basemanager.py内部代码。
在basemanager.py第133行,更改日期的格式:
val = sub_data.strftime('%Y-%m-%dT%H:%M:%S')
到:
val = sub_data.strftime('%Y-%m-%d')
pyxero最初返回时间。这应该只是一个日期值 - 文档规定了格式。
然后,再次在basemanager.py,第257行,更改以下:
body = {'xml': self._prepare_data_for_save(data)}
到:
if self.name == "Payments":
body = {'xml': "<Payments>%s</Payments>" % self._prepare_data_for_save(data)}
else:
body = {'xml': self._prepare_data_for_save(data)}
请注意,为了您能够创建首先付款,发票的“状态”必须设置为“已授权”。 此外,请确保付款的“金额”不大于发票的“AmountDue”值。