付款后发送电子邮件

时间:2014-08-04 17:05:48

标签: virtocommerce

*大家好

我有一个SMTP客户端,以便在付款后发送邮件。问题是,当我使用Paypal时,方法sendNewOrderNotificationAsync无法找到电子邮件地址。事实上,当AsOrder方法创建Order对象时,没有保存的电子邮件地址。你知道问题出在哪里吗?此外,当我用自己创建的付款付款时没有问题,所以我不明白......

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

只有在使用快速结账并且在转到PayPal之前没有填写任何地址时才会出现问题。订单是在重定向到paypal网站之前创建的,因此可以在用户从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

答案 1 :(得分:0)

该电子邮件应作为运费或帐单地址的一部分提供,即我转换为订单地址的paypal地址,然后将电子邮件设置为收款人信息。

检查:

OrderClient.FindAddressByName(order, "Billing").Email;