使用 .net SDK 在 Quickbook 中发送带有发票的电子邮件
Send email with invoice in Quickbook with .net SDK
我正在使用 .net 的 SDK V3 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
:
因此,当我在创建发票后打电话发送电子邮件时,出现以下异常:
Object not found: EmailAddress
如果我去我的 Quickbook 网站,我当然有我的客户,那就是他的电子邮件。
那我做错了什么?
试试这个:
//Call to generate invoice
var invoiceAdded = dataService.Add(invoice);
//Send Email
dataService.SendEmail<Invoice>(invoiceAddded, customer.PrimaryEmailAddr.Address);
您传递给该方法的第二个参数是一个特定的电子邮件,它将覆盖发票对象中的默认电子邮件,这应该可以修复此错误。基本上有两个版本的请求可以用来发送发票,有以下几种:
POST /v3/company/<companyID>/invoice/<invoiceId>/send
然后是这个:
POST /v3/company/<companyID>/invoice/<invoiceId>/send?sendTo=<emailAddr>
因此,当您只传递发票时,它会通过获取您的发票对象并确定 ID 是什么来映射到第一个请求,但是由于某些原因,QBO 默认情况下不会填写其中的很多字段,这就是为什么您只传递发票时会出错,因为出于某种原因它依赖于具有 ID 的电子邮件,我猜 QBO 不会为您自动填写,所以我会做的是使用另一个映射到第二个请求的此方法的重载,它在请求中明确设置电子邮件地址,这样无论如何,只要您传递了一个有效的电子邮件地址,并且发票存在,请求就不会失败,否则你依赖于一堆数据被正确填充,这让你容易出现很多错误,QuickBooks API 通常非常非常容易出现错误,并且在你得到它们时并不能真正帮助你,所以在我看来,一般来说,你接触到的错误越少越好。
我正在使用 .net 的 SDK V3 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
:
因此,当我在创建发票后打电话发送电子邮件时,出现以下异常:
Object not found: EmailAddress
如果我去我的 Quickbook 网站,我当然有我的客户,那就是他的电子邮件。
那我做错了什么?
试试这个:
//Call to generate invoice
var invoiceAdded = dataService.Add(invoice);
//Send Email
dataService.SendEmail<Invoice>(invoiceAddded, customer.PrimaryEmailAddr.Address);
您传递给该方法的第二个参数是一个特定的电子邮件,它将覆盖发票对象中的默认电子邮件,这应该可以修复此错误。基本上有两个版本的请求可以用来发送发票,有以下几种:
POST /v3/company/<companyID>/invoice/<invoiceId>/send
然后是这个:
POST /v3/company/<companyID>/invoice/<invoiceId>/send?sendTo=<emailAddr>
因此,当您只传递发票时,它会通过获取您的发票对象并确定 ID 是什么来映射到第一个请求,但是由于某些原因,QBO 默认情况下不会填写其中的很多字段,这就是为什么您只传递发票时会出错,因为出于某种原因它依赖于具有 ID 的电子邮件,我猜 QBO 不会为您自动填写,所以我会做的是使用另一个映射到第二个请求的此方法的重载,它在请求中明确设置电子邮件地址,这样无论如何,只要您传递了一个有效的电子邮件地址,并且发票存在,请求就不会失败,否则你依赖于一堆数据被正确填充,这让你容易出现很多错误,QuickBooks API 通常非常非常容易出现错误,并且在你得到它们时并不能真正帮助你,所以在我看来,一般来说,你接触到的错误越少越好。