如何使用C#中的QuickBooks Online API v3将付款应用于现有发票?
我尝试过以下代码:
private void UpdateInvoice(Payment payment)
{
Invoice oldInvoice = cmbInvoices.SelectedItem as Invoice;
if (oldInvoice == null) return;
Invoice invoiceToUpdate = new Invoice();
invoiceToUpdate.Id = oldInvoice.Id;
invoiceToUpdate.SyncToken = oldInvoice.SyncToken;
invoiceToUpdate.Deposit = payment.TotalAmt;
invoiceToUpdate.DepositSpecified = true;
invoiceToUpdate.sparse = true;
invoiceToUpdate.sparseSpecified = true;
invoiceToUpdate.PaymentType = PaymentTypeEnum.CreditCard;
invoiceToUpdate.PaymentTypeSpecified = true;
invoiceToUpdate.PaymentMethodRef = payment.PaymentMethodRef;
invoiceToUpdate.PaymentRefNum = payment.PaymentRefNum;
invoiceToUpdate.CustomerRef = oldInvoice.CustomerRef;
QBO.DataService.Update(invoiceToUpdate);
}
并且因此错误而失败:
{"ValidationException was thrown."}
我在这里明显遗漏了一些东西,或者我一定是做错了什么。错误信息是无用的,希望Intuit能够清理它。
我对Intuit为他们的QuickBooks Online API v3提出的错误文档感到非常沮丧,并希望他们能够开始清理并使其有用。此外,请在您访问时删除那些死亡的404页面。
任何帮助或指示都会很棒。
答案 0 :(得分:1)
您只需创建一个付款对象并将其与发票相关联即可。它适用于我的QBO v3设置。
您正在" LinkedTxn"中链接发票。区域,所以我的InvoiceId在这个例子中将是1282。我的ProccessPayment是错误的,因为我们手动处理付款并登录QBO。
try {
writeFile("http://myserver.com/notes.txt", "testing massage");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 1 :(得分:0)
对于它值得尝试的东西,这件事给我带来了同样的问题。结束它不喜欢不指定行项目,即使在指定稀疏更新时也是如此。我找到了一位sdk工程师的参考资料,说只要拿最初保存的发票,修改并将其传递给api。结束至少照顾我的问题。