2016-05-31 62 views
0

我正在嘗試使用python3的pyxero python庫向xero添加付款。 我可以添加發票和聯繫人,但付款總是返回驗證異常。 這裏是我提交的數據:PyXero庫驗證異常

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

請注意:該解決方案成爲內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」值。