使用.net SDK在Quickbook中发送包含发票的电子邮件

时间:2016-08-25 03:51:10

标签: c# asp.net .net quickbooks quickbooks-online

我正在使用SDK V3 for .net IppDotNetSdkForQuickBooksApiV3并在创建后尝试发送带有发票的电子邮件(我觉得奇怪的是Quickbook没有这样做我创建发票后自动,所以也许我做错了什么。

所以这就是它:

//Get customer
var customerQueryService = new QueryService<Customer>(context);            
var customer = customerQueryService.ExecuteIdsQuery("query to get customer");
/*I fill the invoice with data  
..      
..
..*/
//Call to generate invoice
var invoiceAdded = dataService.Add(invoice);
//Email to send
invoiceAdded.BillEmail = customer.PrimaryEmailAddr;
invoiceAdded.EmailStatus = EmailStatusEnum.NeedToSend;
invoiceAdded.EInvoiceStatusSpecified = true;
//Send Email
dataService.SendEmail(invoiceAdded);

这是我遇到麻烦的地方,首先我注意到来自customer.PrimaryEmailAddr的对象没有id

enter image description here

因此,当我在创建发票后打电话发送电子邮件时,我会收到以下异常:

Object not found: EmailAddress

enter image description here

如果我去我的Quickbook网站,我当然有我的客户,这是他的电子邮件。

那么我做错了什么?

2 个答案:

答案 0 :(得分:2)

试试这个:

?spread

答案 1 :(得分:1)

您传递给该方法的第二个参数是一个特定的电子邮件,它将覆盖发票对象中的默认电子邮件,这应修复此错误。基本上有两个版本的请求可用于发送发票,其中包括以下内容:

POST /v3/company/<companyID>/invoice/<invoiceId>/send

然后是这个:

POST /v3/company/<companyID>/invoice/<invoiceId>/send?sendTo=<emailAddr>

因此,当您只传递发票时,它会通过获取您的发票对象并确定ID是什么来映射到第一个请求,然而很多这些字段由于某种原因而无法由QBO默认填写,这就是为什么你只是通过发票收到错误的原因,因为出于某种原因,它依赖于那个有ID的电子邮件,我猜QBO没有为你自动填写,所以我要做的就是使用此方法的另一个重载映射到第二个请求,该请求明确地设置请求中的电子邮件地址,无论如何,只要您传递了有效的电子邮件地址,并且发票存在,请求就可以&#39;失败,否则你依赖于大量数据被正确填充,这会让你容易受到很多错误的影响,QuickBooks API一般非常非常容易出错,并不能真正帮助你解决问题当你得到它们时,所以一般来说你暴露自己的错误越少,我认为越好。