UCommerce阻止用户在结账时添加新商品

时间:2016-08-28 13:31:29

标签: umbraco umbraco-ucommerce

我有一个使用UCommerce构建的电子商务网站。在结账过程中,用户将被重定向到支付门户以进行支付。

我想阻止用户在用户位于付款门户网站时在购物篮中添加新商品。我目前的解决方案是在将用户重定向到付款门户之前将购物篮保存到会话

Session["checkoutOrder"] = TransactionLibrary.GetBasket(!TransactionLibrary.HasBasket()).PurchaseOrder;

如何在会话结束后使用会话中的一个覆盖当前购物篮?这是为了在购买前将购物篮恢复到原始状态。

我试过了:

[HttpPost]
public ActionResult ExecutePayment()
{
var order = Session["checkoutOrder"] as PurchaseOrder;
order.Save();
...
}

但是我在订单上遇到错误.Save():

Batch update returned unexpected row count from update; actual row count: 0; expected: 1

2 个答案:

答案 0 :(得分:2)

我只是添加了这个,你的会话[" orderInProcess"]是uCommerce中的反模式。当您通过可能/将导致会话处置异常的请求持久化NHibernate实体时,您可能会遇到令人讨厌的异常。它可能也会导致您经历的初始异常,因为您实际上正在通过NHibernate的sesssion状态。

每次取回购物篮时,只需使用TransactionLibrary.GetBasket(!TransactionLibrary.HasBasket()).PurchaseOrder;即可。 NHibernate将负责为您缓存订单。

然后您可以使用订单属性来保存您所处的状态。

var basket = TransactionLibrary.GetBasket(!TransactionLibrary.HasBasket()).PurchaseOrder;
basket["CheckoutInProcess"] = "True";

祝你好运 的Morten

答案 1 :(得分:0)

我处理的方式不同,因为我无法将篮子恢复到原来的状态。

我决定阻止用户在付款过程中在购物篮中添加商品。

我在将用户重定向到支付网关之前创建了一个会话 Session [“orderInProcess”] = true

现在,每当用户尝试在购物篮中添加新商品时,我会先检查他当前的订单是否正在处理中。像这样:

[HttpPost]
public ActionResult AddToBasket(string sku, string quantity, string variant = null)
{

     if (Session["orderInProcess"] != null)
     {
         if (bool.Parse(Session["orderInProcess"].ToString()))
         {
             return Json(new
             {
                  Success = false,
                  ErrorMessage = "Order is currently in process."
             });
          }
      }
   .....
}

我希望这会有所帮助。