UCommerce 阻止用户在结帐时添加新项目

UCommerce Prevent Users from adding new items during checkout

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

我想阻止用户在使用支付门户时在购物车中添加新商品。我当前的解决方案是在将用户重定向到支付门户之前将购物篮保存到 Session

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

付款后如何用Session中的购物车覆盖当前购物车?这是将购物车恢复到付款前的状态

我试过这个:

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

但我在 order.Save():

上遇到错误
Batch update returned unexpected row count from update; actual row count: 0; expected: 1

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

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

我在将用户重定向到支付网关之前创建了一个会话 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."
             });
          }
      }
   .....
}

希望对您有所帮助。

我还要补充一点,您的 Session["orderInProcess"] 是 uCommerce 中的反模式。当您通过 can/will 导致会话处理异常的请求持久化 NHibernate 实体时,您可能 运行 陷入讨厌的异常。它也可能导致您在实际绕过 NHibernate 的会话状态时遇到的初始异常。

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

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

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

此致 莫腾