3

アプリケーションとペイパル間の取引を処理するためのベスト プラクティスは何ですか。

検討:

  • 私はアリスです。ボブに送金したいです
  • 私の DB を見ると、Bob には $200 があり、私は彼に $150 を送金したいと考えています。
  • トランザクションが送信されたら、50 ドルが含まれるようにボブのアカウントを更新したいと考えています。

これで、PayPal API に従って、Pay を送信して成功を受け取ることができます。ただし、たとえば Pay の送信は成功したが、ネットワークの問題により応答を受信できなかった場合はどうなりますか。エラーが発生したと仮定して再試行すると、技術的には 150 ドルではなく 300 ドルをボブに送金しますか?

アカウントを保持するローカル データベースとリモート PayPal API の間のトランザクションをどのように処理できますか?

4

5 に答える 5

6

私は最近、クライアントのために完成させようとしていた ASP.NET MVC プロジェクトで、まさにこの懸念を抱いていました。

次の 2 つのことを学びました。

  • Paypal とデータベースの間の通信は信頼できません (まあ、これを実際に学習したわけではありませんが、完全に強化されました)。

  • Paypal をトランザクション タイプとして使用している非常に多くの Web サイトで、トランザクションが完了してから商品の発送/配達が完了するまでに処理期間がある可能性があると記載されている理由がわかりました。


この状況に対処する方法は、企業が個人小切手を処理する方法と似ています。

  • 個人の小切手は通貨のように見えますが (通常はそうです)、多くの企業は、支払いを受け入れる前に、銀行に資金が利用可能であることを何らかの形で確認してもらいたいと考えています。
  • マシンが資金が利用可能であると言う場合、ビジネスはそれを信頼し、トランザクションを完了します. ただし、マシンは通常、「資金が利用できないか、何か問題が発生した」ことを意味するエラーメッセージを表示する可能性があり、ビジネスは次の決定を下す必要があります。
    • 私たちは顧客を信頼し、小切手を受け取り、製品を配達し、後で小切手を銀行に入金するときに最善を尽くすことができます.
    • または、小切手が決済され、小切手が入金され、資金が実際に口座に入金されるのを待ち、(成功した場合) ビジネスが資金を受け取った後に製品を配送するまでに時間がかかることを顧客に伝えることができます。

これは、今日の多くのビジネスの運営方法では非効率に思えますが、実際に発生するものです。実際、これが多くの企業が個人小切手の受け入れを避ける理由であり、他の支払い方法と比較して信頼性が低い.

これは Paypal 支払いの処理とどのように関連していますか?

  • Paypal での支払いは通貨のように見えますが (通常はそうです)、多くの企業は、支払いを受け入れる前に資金が利用可能であることを Paypal から確認する必要があるため、Paypal PDT、IPN、またはその他の方法を使用してトランザクション適切に処理されました。
  • Paypal が検証要求の 1 つに適切に応答した場合、企業はそれを信頼して取引を完了することができます。 ただし、Web サイトが何らかのエラーをスローする場合があります (つまり、Paypal が の IPN 応答で応答しNOTVALIDたり、Paypal から応答をまったく得られなかったりするなど)。ビジネスには次の決定があります。
    • ビジネスは顧客を信頼し、顧客が Paypal で支払いを行ったことを受け入れることができます
    • または、Paypal の支払いには 72 時間の処理期間がある可能性があることをチェックアウト時に顧客に伝えることができます。

これはあなたのビジネスを運営する最良の方法とは思えないかもしれませんが、不完全なインターネットに対処しなければならない方法です.

次のような Paypal 支払いフローを設定します。

  1. ユーザー A は、Paypal を使用して別のユーザー B に 100 ドルを送金したい
  2. UserA は「チェックアウト フィールド」に値を入力し、トランザクションを確認するために Paypal に送信されます。
  3. UserA は Paypal からあなたの Web サイトに送り返され、あなたの Web サイトは、Paypal がサイトに投稿した詳細を使用して IPN チェックを実行します (この場合、IPN を選択しました。Paypal が他の支払いゲートウェイではなく、エクスプレス チェックアウトを使用しているかのように)提供しています)。
  4. IPN が の場合、VALID期待どおりにトランザクションを処理します。
  5. IPN が でない場合はVALID、処理に遅延が生じる可能性があることを顧客に伝え、Paypal トランザクションの問題が発生した可能性があるという通知をアプリケーションから送信してもらいます (参照 ID を含めて、どの問題かすぐにわかるようにすることをお勧めします)。この通知が参照しているトランザクション)、およびトランザクションをpending対照として、completeまたは同様のものとしてマークします。
  6. これらの通知を処理するサイトの管理者は、トランザクションを手動で調査し (または、ウェブサイトに Paypal を再度確認させる - 詳細については Paypal API のドキュメントを参照してください)、手動でトランザクションをcompleteまたはとしてマークしfailedます。
  7. 取引の状況を関係者に通知します。

お金が送金されたことを確認するために追加の手順が必要になるのは面倒ですが、前述のように、不完全なシステムを使用しており、金融取引の成功/失敗を非常に確実にしたいと考えています.

このプロセスの追加のボーナスは、誰かが Paypal 支払いシステムを改ざんしているときに通知がある可能性が高いことです。これにより、将来的に悪意のある者に対処するための準備が整います.

于 2012-07-21T20:31:14.987 に答える
1

このリンクを参照してください。PayPal のオーソリゼーション & キャプチャ方法が適していることを願っています。応答を失いたくないため、金額の転送を誤算したくないため、PayPal は、PayPal が注文ステータスを確認するために参照できる相関 ID を提供します。注文 ID を PayPal API に渡す方がよいでしょう。

https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/howto_admin_authcapture

http://www.scribd.com/doc/6303345/40/CorrelationID-for-Reporting-Problems-to-PayPal

幸運を!

于 2012-07-23T10:45:09.270 に答える
0

アリスから 150 ドルを引き落とし、トランザクションが「保留中の確認」であることを反映し、定期的に PayPal をポーリングして DB を同期します。これは、ネットワークまたは PayPal がいつ利用可能になるか、トランザクションを投稿、取り消し、または調整することを制御できないためです。PayPal がトランザクションを処理したら、DB のステータスを「保留中」から「完了」に変更できます。ところで、これが銀行口座とクレジット カードの処理方法です。DB に複式簿記法を適用できます。(こちらのQ&Aをご覧ください)

于 2012-07-22T02:35:16.137 に答える
0

これは 2 フェーズ コミットと呼ばれます。PayPal が同じトランザクションに参加しない限り、問題が発生します。

于 2012-07-21T06:56:48.333 に答える
-1

私が見たところ、トランザクションが完了していることを確認する必要があります。それ以外の場合は何もしないでください。
PayPal API にお金を入金しても、PAYPAL API からの応答がない場合は、DB でトランザクションをロールバックする必要があります。

于 2012-07-20T12:19:27.600 に答える