2016-08-28 1 views
0

私はEコマースのウェブサイトをUCommerceでビルドしています。チェックアウト処理中、ユーザは支払いのために支払いポータルにリダイレクトされます。UCommerceチェックアウト中にユーザーが新しいアイテムを追加しないようにする

ユーザーが支払いポータルにいる間に、ユーザーがバスケットに新しいアイテムを追加しないようにします。現在の解決策は、バスケットをセッションに保存してから、ユーザーを支払いポータルにリダイレクトすることです。ご入金後のセッションでは1でバスケットを上書きするにはどうすればよい

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

これは、支払い前にバスケットを元の状態に戻すためです。私はバスケットをバック元に戻す方法はありませんので、

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

お支払い総額が検証されたときに、支払いポータルからユーザーが戻る、あなたが得るので、バスケット合計が支払額よりも大きい場合はエラーとなり、バスケットは注文に変換されません。 – lasseeskildsen

+0

こんにちは@ lasseeskildsen、私はチェックアウトパイプラインでValidatePaymentsMadeAgainstOrderTotalを知っています。しかし、私はユーザーが決済ポータルで支払い後にエラーを起こさせたくありません。ユーザーのカードは既に借方記入されているので、プロセスが複雑になります。私は購入注文を元の状態に戻し、有料アイテムのみチェックアウトすることをお勧めします。 – Romeo

+0

これは完璧な意味合いがあります。おそらく、新しい注文ステータス(「お支払い待ち」)を追加して、ユーザーが支払いポータルにリダイレクトされたときのステータスに変更することができますか?ユーザーが支払いポータルでバスケットに物を追加すると、新しいバスケットが作成されます。状況が「バスケット」であることを要求するチェックアウトパイプラインのいずれかにanyhingがある場合のみ、 – 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

私は異なり、これを取り扱わ:

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

しかし、私はorder.Save()でエラーを取得しています:

は、私はこれを試してみました元の状態に戻します。

私は、支払いが進行中のときにユーザーがバスケットに商品を追加するのをブロックすることを決めました。

セッションを作成しましたセッション["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." 
      }); 
      } 
     } 
    ..... 
} 

私はこれが役立ちます。

関連する問題