【问题标题】:PyXero Library Validation ExceptionPyXero 库验证异常
【发布时间】:2016-05-31 03:29:10
【问题描述】:

我正在尝试使用 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

【问题讨论】:

    标签: python xero-api


    【解决方案1】:

    请注意:这个解决方案变成了 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 中的代码。

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

    请注意,为了让您能够首先创建付款,发票的“状态”必须设置为“授权”。 此外,请确保 Payment 的“Amount”不大于 Invoice 的“AmountDue”值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      • 2011-01-18
      • 2022-01-09
      相关资源
      最近更新 更多