1

*大家好

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

预先感谢您的帮助。

4

2 回答 2

2

仅当您使用快速结帐并且在前往贝宝之前未填写任何地址时才会出现此问题。订单在重定向到贝宝网站之前创建,以便在用户从贝宝返回后进行维护。在订单创建拦截器发送电子邮件时,如果没有地址,则无法发送电子邮件。如果您使用普通结帐并选择贝宝作为付款选项,一切都会好起来的。作为这种情况的解决方案,我认为最好在从贝宝返回后手动向用户发送电子邮件。然后从贝宝返回的选项中创建并获取地址。另一种方法是创建系统作业,定期检查订单并根据创建日期和订单状态发送电子邮件。

在 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

于 2014-08-05T08:49:20.297 回答
0

该电子邮件应作为送货或账单地址的一部分提供,即我转换为订单地址的贝宝地址,然后将电子邮件设置为收款人信息。

检查:

OrderClient.FindAddressByName(order, "Billing").Email;
于 2014-08-04T17:49:28.813 回答