如何使用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页。
任何帮助或指点都是很棒的。
发布于 2016-02-05 00:26:57
您只需要创建一个payment对象并将其与发票相关联。它成功地为我的QBO v3设置工作。
您将在"LinkedTxn“区域中链接发票,因此在本例中,我的InvoiceId为1282。我的ProccessPayment是假的,因为我们正在手动处理付款和登录QBO。
Payment p = new Payment
{
PaymentRefNum = "73453",
PaymentTypeSpecified = true,
PaymentType = PaymentTypeEnum.CreditCard,
UnappliedAmt = 0,
UnappliedAmtSpecified = true,
TotalAmt = amount,
TotalAmtSpecified = true,
ProcessPayment = false,
ProcessPaymentSpecified = true,
TxnDateSpecified = true,
TxnDate = charge.Created,
CurrencyRef = new ReferenceType { name = "US Dollar", Value = "USD" },
Line = new Line[] { new Line
{
Amount = amount,
AmountSpecified = true,
DetailType = LineDetailTypeEnum.PaymentLineDetail,
DetailTypeSpecified = true,
LinkedTxn = new LinkedTxn[] { new LinkedTxn { TxnId = "1282", TxnType = "Invoice" } } }
},
CustomerRef = new ReferenceType { Value = "123" }
};发布于 2015-10-01 06:24:29
值得一试的是,这件事给我带来了同样的问题。最后,它不喜欢不指定行项目,即使指定了稀疏更新。我发现了sdk工程师的引用,他说只需接受最初保存的发票,修改并将其传递给api。最终至少解决了我的问题。
https://stackoverflow.com/questions/28732437
复制相似问题