2009-08-31 8 views
10

私は現在PHP/MySQLで電子商取引サイトを構築中です。最近、私はショッピングカートの統合に取り組んできました。顧客は潜在的な買い手が在庫を確保できるようにしたいので、私は在庫管理システムを作成しました。ショッピングカートは次のように機能します。ショッピングカートと在庫管理

  • クライアントは のカートに商品を追加します。
  • 数量は、 から入手可能です。
  • 他の誰も予約 を購入することはできません。
  • クライアント が注文を処理するまで在庫は予約済みです。在庫は がデータベースから削除されます。
  • クライアントがカートを放棄した場合、在庫は予備のままです。
  • 別のクライアントがアイテムを購入したいが、利用可能な在庫のみが別のクライアントによって予約されている場合、クライアントは20分間使用されていなければ予約済みの在庫を盗むことができます。

私の質問は、このようなシナリオのベストプラクティスは何ですか?私はこれを正しくしていますか?主なことは、顧客が持っていない在庫を売却したくないということです。

私は機能を改善する方法やこれを達成するために他の人が何をしているのかについて議論したいと思っています。

答えて

14

代替方法は、ショッピングカートに入れたときに在庫を予約しないことがあります。アイテムが利用できなくなった場合は、ページがリロードされるたびにチェックを行い、「購入したいアイテムは売り切れました。すぐに利用可能になります」などのメッセージを表示します。そして、あなたはショッピングカートから製品を取り出します。

支払い操作を開始する直前にショッピングカートのコンテンツを予約しておき、支払いの成功/失敗に応じて在庫を削除するか、予約を削除する必要があります。あなたは1回のコード実行でより良い結果を得ます。その結果、予約はできるだけ短くなります。

ProcessOrder() 
{ 
    bool reserved = ReserveShoppingCartContents(); 
    if (reserved) 
    { 
     bool paymentStatus = ProcessPayment(); 
     if (paymentStatus) 
      RemoveShoppingCartContentsFromStock(); 
     else 
      ReleaseShoppingCartReserve(); 
    } 
    else 
    { 
     RefreshShoppingCartContents(); // Remove positions or adjust quantities 
     MessageBox ("Could not reserve your shopping cart contents. Please check out your selection"); 
    } 
} 

予約金額を減らすと、実際に商品が販売される可能性が高くなります。競合の可能性を最小限に抑えます。顧客Aがショッピングカートから始まり、アイテムが予約され、顧客Bが来て、アイテムが在庫になくなっていると判断した場合、CustomerAは価格を気に入らず、操作をキャンセルします。あなたは2人の潜在的な顧客を持っていましたが、どちらにも売れませ

+0

アドバイスをいただきありがとうございます。私は機能を再加工するつもりです。私はそれがこれを行うことについて行くための最善の方法ではなかったことを知っていた。コンチェルトチケットなどのユニークな商品を販売していない限り、フリーズストックはおそらく良い考えではありません。 – jgallant

+0

はい、ソース管理とデータベーストランザクションの場合と同様に、そうしなければならない正当な理由がない限り、デフォルトのオプティミスティックロックになります。 – Jerph

3

チェックアウトの処理中にページがリロードされるたびに在庫が確認され、カートのページにリダイレクトされ、処理中にアイテムが売り切れた場合はエラーメッセージが表示されます。 注文は確定次第、在庫が減少します 注文がキャンセルされた場合も在庫を復元します。

関連する問題