3

私はオンライン小売店を開発してきました。

php で書かれており、paypal と IPN を使用して支払いを処理します。

独自のショッピング カートを作成しました。ユーザーがチェックアウトしたい場合、ボタンの周りに標準のカートアップロード機能がラップされているチェックアウトボタンをクリックすると、ユーザーはペイパルに移動して支払いを完了します。その後、Paypal から IPN が送信され、支払いが通知されます。

私の質問は、どの時点で注文を保存する必要があり、いつ在庫レベルを下げる必要があるのですか?

私が現在持っている標準的なプロセスフローは次のとおりです。

  1. ユーザーがカートにアイテムを追加します。

    • アイテムが売り切れになった場合、または追加された数量が利用可能な数量を超えた場合、カートはこれを反映するように更新されます。
    • ただし、カートに在庫を追加しても在庫レベルは下がりません。
  2. ユーザーがチェックアウトをクリックします。

    • カートはデータベースの注文レコードにロードされ、在庫レベルが減少します。
    • ユーザーはペイパルに移動して支払いを完了します。
  3. (a) ユーザーが支払いを完了する。

    (b) ユーザーがウェブサイトに戻るか、別の場所に移動するか、ブラウザを閉じることによって支払いを完了しない。

  4. (オプション) ユーザーが Web サイトに戻るをクリックします。

    • ユーザーに「ありがとう、注文完了」の完了ページが表示されます。
    • いずれにしてもペイパルは IPN を送信するため、注文テーブルに関しては何も処理されません。
  5. PaypalがIPNを送信
    • 取引ステータスで注文を更新する

ご覧のとおり、このプロセスにはいくつかの問題があります。顧客が支払いを完了せずにペイパルのページを離れた場合、私は「ぶら下がっている」注文を持ち、在庫レベルも減少するため、この在庫は他の顧客が利用できなくなります! これに対する解決策は、データベースを時々手動で「クリーン」にすることです。

代替案?

  • オプション I) 「完了したトランザクション」の IPN が受信されるまで注文をデータベースに保存せず、セッションに保存されたカート情報を使用して注文を作成し、在庫レベルを下げます。ただし、セッションは期限切れになる可能性があり、支払いによってはペイパルの支払いに数日かかる場合があります。

  • オプション II) 注文をそのまま保管しますが、完了したトランザクション IPN を受け取るまで在庫レベルを下げません。これにはまだ未解決の注文の問題がありますが、少なくとも、クリーンアップ時に在庫を再度追加する必要はありません。注文を削除するだけです。ただし、これに関するもう 1 つの問題は、複数の人が同時に注文した場合、それらの注文に在庫を超える数量が含まれることです。システムが完了した IPNS を受け取り、在庫レベルをマイナスの数量に減らすと、これは非常に混乱する可能性があります。

私は何らかの助けを求めてインターネット上のあらゆる場所を見てきましたが、どこにも言及されていません! 誰もが IPN の処理方法にスキップします。どうして他の人がこの問題を抱えていなかったのか理解できませんか?!

助けてください!

4

2 に答える 2

2

あなたは、航空会社の予約システムが長年にわたって抱えているのと同じ問題に取り組んでいます。同じソリューションを使用します。

1.ユーザーがチェックアウトをクリックすると(Paypalにリダイレクトされている間)

reduce inventory count
place a timestamp in the database along with a state that this order is temporary

2a。IPNを受け取ったら、つまり請求が成功したことを確認します

change state of the order to permanent

2b。一時的な注文を追跡するために数分ごとに実行されるcronジョブがあります。一時的な注文が許可された時間よりも長い時間からのものである場合、たとえば20分:

remove the temporary order from database
undo the change in inventory count
于 2012-03-04T07:53:35.303 に答える
1

マーチャントと開発者の両方として、IPN が保留中 (eCheck など) であっても、IPN で在庫在庫を調整することを好みます。通常、2 人の顧客が同時にチェックアウトして最後の在庫を確認する可能性は低くなります。十分なボリュームがあり、在庫レベルが低い場合(なぜそうするのですか?)、セッション タイムアウトの間、アイテムをロックするためにカート内で何かをしたい場合があります。

注文がキャンセルまたは返品された場合、注文処理コードが在庫を在庫に戻すことを確認してください。

于 2011-10-01T23:10:31.740 に答える