8

この質問はこの質問に似ていますが、ひねりがあります(したがって、古い質問に対して受け入れられた回答は、次のシナリオでは無効です)

私はチケットを販売するためのサイトを持っています (PHP/MYSQL)。チケットが 1 つだけ残っているとします。

  • 買い手 A はチケットをカートに入れ、支払いゲートウェイ ページ (つまり、paypal) に移動します。
  • チケットは 5 分間ロックされるため、購入者 B は購入できません。
  • 買い手 A は、PayPal ページを開いたまま 5 分間待機し、何もしません。
  • チケットのロックが解除されたので、購入者 B はチケットをカートに入れてペイパル ページに移動します。
  • 買い手Aがpaypalで支払い手続きを行い成功
  • 買い手Bがpaypalで決済手続き成功

もっと長く待つことはできますが、より一般的なケースではこれで問題が解決するとは思いません。さらに、そうすると、ある種の DoS が行われ、アイテムの在庫が長期間ロックされる可能性があります。

このシナリオを処理する最善の方法は何ですか?

4

4 に答える 4

6

すべての支払いゲートウェイはポストバックを実行して、支払い参照などを通知します。ほとんどの場合、CSC/CVV2 チェック結果などの承認/認証情報もポストバックするため、加盟店は承認するかどうかの最終決定権を持ちます。支払いかどうか。

ポストバックを受信すると、チケットがまだ「ロック」されているかどうかを確認できます。ロックされていない場合は、支払いゲートウェイを介して支払い取り消しを発行し、支払いをキャンセルします。次に、「申し訳ありませんが、タイムアウトを超えました。もう一度お試しください」というメッセージを表示する必要があります。

ゲートウェイが「即時取り消し」スタイルの機能をサポートしていない場合、少なくとも何らかの「無効」機能をサポートし、顧客のカードから実際に資金が引き出されることはなく、オーソリホールドは自動的に解除されます (通常は 2 日後)。 、一部のカードでは時間がかかる場合があります)。タイムアウトする (できれば少ない) 数のトランザクションの場合、これは許容できる場合があります。タイムアウト期間を調整できるように、タイムアウトするトランザクションの数を監視する価値があります。

または、チケットがロックされていない場合 (ゲートウェイがサポートしている場合) は、払い戻しの支払いを送り返します。

于 2009-11-25T13:44:29.167 に答える
2

外部の支払いゲートウェイのエントリ ページを使用できず、実行しようとしていることが実行できない可能性があります。

Paypal およびその他の多くのプロセッサには、直接の Web サービス統合ルートがあります。これは、ページで支払い情報を収集し、それがサーバーに送信され、Web サービスを呼び出してプロセッサーからの応答をすぐに受け取ることを意味します。(これを行う製品を PayPal が何と呼んでいるかは覚えていませんが、以前は PayFlow Pro という名前で、Verisign から購入したものです。)

そのため、カートに入れられたときにチケットをロックしません。ワークフローは次のようになります。

  1. 支払い情報を収集します。
  2. 支払い情報がサーバーに戻されたら、次の手順を実行します。チケットをロックしてみてください - 利用できない場合は失敗を返します b. ロックが成功したら、承認を処理します
  3. 認証が成功すると、チケットは使用可能なプールから削除されます。
  4. 認証に失敗した場合やエラーが発生した場合、チケットはロック解除され、他のユーザーが使用できます。

ロックのタイムアウトに対処する必要はありません。それらは、有効な支払いを確認するのに十分な時間だけロックされます。

PCI の露出を防ぎながら問題を解決することについて質問しませんでした。あなたはおそらく尋ねるので:

独自のページに支払い情報のコレクションを埋め込むことができるプロセッサがあります。サーバーがカード番号を受信しないように、カード番号を置き換える「トークン」を取得できるものもあります。トークンは、サーバー側の Web サービス呼び出しで使用できます。必要なものが手に入り、カード番号の受け取りに関する PCI の問題に対処する必要はありません。

于 2009-12-05T07:05:19.977 に答える
1

5分間のように誰かがカートに入れた場合は、チケットをブロックしないでください。あなたは他の少数の顧客を追い払うことになるかもしれません...

誰かが実際に支払いをして購入しない限り、誰もが自分のカートにチケットを追加できるようにすることをお勧めします。他の人がチェックアウトに進むときは、「ごめんなさい、遅れています...チケットは売り切れました!!!」というメッセージをフラッシュするだけです。チケットはカートから削除する必要があります。

このようにして、チケットが顧客からブロックされることはなく、2人が同じチケットの支払いを行うというシナリオは発生しません。

于 2009-12-02T18:46:51.750 に答える
1

技術的な解決策ではなく、より社会的な解決策はどうですか?長く待つとチケットのロックが解除されることを絶対に明らかにしてみませんか?

于 2009-11-24T22:37:33.187 に答える