我正在使用通过gradle下载的最新Xero Java客户端api:
compile group: 'com.xero', name: 'xero-java-sdk', version: '1.0.9'
compile group: 'com.xero', name: 'xero-accounting-api-schema', version: '0.1.2'
我正在尝试使用以下代码创建发票:
Contact xeroContact = xeroClient.getContact(xeroContactId);
xeroInvoice.setContact(xeroContact);
xeroInvoice.setType(InvoiceType.ACCREC);
xeroInvoice.setStatus(InvoiceStatus.AUTHORISED);
xeroInvoice.setCurrencyCode(CurrencyCode.AUD);
xeroInvoice.setBrandingThemeID(invoicingConfig.xeroBrandingThemeId);
xeroInvoice.setSentToContact(true);
xeroInvoice.setLineAmountTypes(LineAmountType.INCLUSIVE);
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(Date.from(Instant.ofEpochSecond(timestamp)));
xeroInvoice.setDate(calendar);
xeroInvoice.setDueDate(calendar);
ArrayOfLineItem lineItems = new ArrayOfLineItem();
LineItem lineItem = new LineItem();
lineItem.setAccountCode(invoicingConfig.xeroAccountCode);
lineItem.setQuantity(BigDecimal.ONE);
lineItem.setDescription(chargeDescription);
lineItem.setUnitAmount(chargeAmount);
lineItems.getLineItem().add(lineItem);
xeroInvoice.setLineItems(lineItems);
xeroInvoice.setAmountPaid(chargeAmount);
return xeroClient.createInvoices(Arrays.asList(xeroInvoice)).get(0);
和参数:
xeroContactId: "f283d2c5-24a8-4e78-9b66-44c5d391a089"
timestamp: 1534133124
chargeDescription: "Dedicated Bronze Num"
chargeAmount: 55.00
(正在从我们的数据库中读取xeroContactId)
在我们的生产服务器上,对于那些参数,我一直在找回:
com.xero.api.XeroClient - com.xero.api.XeroApiException: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid URL</h2>
<hr><p>HTTP Error 400. The request URL is invalid.</p>
</BODY></HTML>
这似乎不是有效的Xero api错误响应。
答案 0 :(得分:0)
我以为我要发送的是:
xeroContactId: "f283d2c5-24a8-4e78-9b66-44c5d391a089"
但是我的参数值实际上是:“ \ nf283d2c5-24a8-4e78-9b66-44c5d391a089”
产生的转义网址,当我访问它时会导致上面显示的错误。
换行是在我们的数据库中输入手动更改时由错字引入的。
只有当其他GET请求使用我们数据库中的相同联系人ID时,我才偶然发现了这一点。我从来没有找到一种简便的方法来调试POST命中的URL。