2016-08-28 29 views
0

我有一個電子商務網站與UCommerce構建。在結帳過程中,用戶將被重定向到支付入口。UCommerce阻止用戶在結帳時添加新項目

我想阻止用戶在購物籃中添加新項目,而用戶在付款門戶中。我目前的解決方案是在將用戶重定向到付款門戶之前將籃子保存到會話

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 
+0

的支付總額進行確認時,從支付門戶網站的用戶的回報,讓您得到如果籃子總數大於支付的金額,則籃框不會轉換爲定單。 – lasseeskildsen

+0

嗨@lasseeskildsen,我知道在結帳pipeline.But ValidatePaymentsMadeAgainstOrderTotal但我不希望用戶在支付門戶付款後出現錯誤。由於用戶的卡已經被扣除,這將使該過程複雜化。我更願意將採購訂單恢復到其原始狀態,以便只檢出付款項目。 – Romeo

+0

這很有道理。也許您可以添加新的訂單狀態(「等待付款」),並將用戶重定向到付款門戶時的狀態更改爲?如果用戶在付款門戶處添加東西到籃子,那麼會創建一個新籃子?唯一的問題是,如果任何結賬流水線中存在任何需要狀態爲「購物籃」 – lasseeskildsen

回答

2

我只是想補充一點,你的Session [「orderInProcess」]是uCommerce中的反模式。你可能遇到討厭的異常,因爲你通過可能會導致Session處理異常的請求來堅持NHibernate實體。它也可能會導致您遇到的初始異常,因爲您實際上正在傳遞NHibernate的sesssion狀態。

每次檢索籃子時只需使用TransactionLibrary.GetBasket(!TransactionLibrary.HasBasket()).PurchaseOrder;。 NHibernate將負責爲您緩存訂單。

然後你可以使用命令屬性來拯救你所處的狀態。

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

問候 莫滕

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." 
      }); 
      } 
     } 
    ..... 
} 

我希望這有助於。

相關問題