PyXero 库验证异常
PyXero Library Validation Exception
我正在尝试使用 python3 的 pyxero python 库向 xero 添加付款。
我可以添加发票和联系人,但付款总是 returns 验证异常。
这是我要提交的数据:
payments.put([{'Amount': '20.00',
'Date': datetime.date(2016, 5, 25),
'AccountCode': 'abc123',
'Reference': '8831_5213',
'InvoiceID': '09ff0465-d1b0-4fb3-9e2e-3db4e83bb240'}])
xero 响应:
xero.exceptions.XeroBadRequest: ValidationException: A validation exception occurred
请注意:此解决方案成为 pyxero 内部的 hack 以获得我需要的结果。这可能不是最适合您的解决方案。
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.
中的代码
在第 133 行的 basemanager.py 中,更改日期的格式:
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)}
请注意,为了让您能够首先创建付款,发票的 "Status" 必须设置为 "AUTHORISED"。
此外,确保付款的 "Amount" 不大于发票的 "AmountDue" 值。
我正在尝试使用 python3 的 pyxero python 库向 xero 添加付款。 我可以添加发票和联系人,但付款总是 returns 验证异常。 这是我要提交的数据:
payments.put([{'Amount': '20.00',
'Date': datetime.date(2016, 5, 25),
'AccountCode': 'abc123',
'Reference': '8831_5213',
'InvoiceID': '09ff0465-d1b0-4fb3-9e2e-3db4e83bb240'}])
xero 响应:
xero.exceptions.XeroBadRequest: ValidationException: A validation exception occurred
请注意:此解决方案成为 pyxero 内部的 hack 以获得我需要的结果。这可能不是最适合您的解决方案。
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.
中的代码在第 133 行的 basemanager.py 中,更改日期的格式:
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)}
请注意,为了让您能够首先创建付款,发票的 "Status" 必须设置为 "AUTHORISED"。 此外,确保付款的 "Amount" 不大于发票的 "AmountDue" 值。