*大家好
我有一个SMTP客户端以便在付款后发送邮件。问题是,当我使用Paypal时,sendNewOrderNotificationAsync方法找不到电子邮件地址。事实上,当AsOrder方法创建Order对象时,没有保存电子邮件地址。你知道问题出在哪里吗?此外,当我用我自己创建的付款支付时没有问题,所以我不明白……
提前感谢你的帮助。
只有当您使用快递结帐并且在去paypal之前没有填写任何地址时才会发生问题。在重定向到paypal站点之前创建订单,以便在用户从paypal返回后维持订单。在创建订单时拦截器发送电子邮件,但如果没有地址,则无法发送电子邮件。如果你会使用正常的结帐和选择paypal作为支付选项,一切都会很好。对于这种情况的解决方案,我认为最好从贝宝返回后手动发送电子邮件给用户。然后创建地址,并从贝宝返回选项。另一种方法是创建系统作业,定期检查订单并根据创建的日期和订单状态发送电子邮件。
在PaypalExpressSuccess中增加了发送电子邮件的示例
Ch.RunWorkflow("ShoppingCartCheckoutWorkflow", order);
Ch.OrderRepository.UnitOfWork.Commit();
//Send email
var recipientAddress = order.OrderAddresses.FirstOrDefault(oa => oa.OrderAddressId == order.AddressId);
if (recipientAddress != null)
{
IDictionary<string, object> context = new Dictionary<string, object> { { "order", order } };
UserHelper.SendEmail(context, recipientAddress.Email, "order-confirmation");
}
return RedirectToAction("ProcessCheckout", "Checkout",
new {id = order.OrderGroupId});
它现在包含在我们的新版本中。签出此提交https://github.com/VirtoCommerce/vc-community/commit/7c8bc663da2023a3796bee6a42f2a2b36e1dfb22
电子邮件应该作为发货或账单地址的一部分,也就是paypal地址转换为订单地址,然后电子邮件设置为收款人信息。
检查:
OrderClient.FindAddressByName(order, "Billing").Email;