PyXero库验证异常

时间:2016-05-31 03:29:10

标签: python xero-api

我正在尝试使用python3的pyxero python库向xero添加付款。 我可以添加发票和联系人,但付款总是会返回验证例外。 以下是我提交的数据:

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

1 个答案:

答案 0 :(得分:1)

请注意:此解决方案成为pyxero内部的一个黑客,以获得我需要的结果。这对您来说可能不是最佳解决方案。

pyxero为" payments.put"生成的XML与" PUT Payments"不匹配xero文档中的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最初是在返回时间。这应该只是一个Date值 - 文档规定了格式。

然后,再次在第257行的 basemanager.py 中,更改以下内容:

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)}

请注意,为了让您能够首先创建付款,发票&#34;状态&#34;必须设置为&#34; AUTHORIZED&#34;。 此外,请确保付款&#34;金额&#34;不超过Invoice&#34; AmountDue&#34;值。