PaypalでのIPNとPDT


99

PayPalの即時支払い通知(IPN)と支払いデータ転送(PDT)のどちらかを選択するのに問題があります。

基本的に、ユーザーは私のサイトで1回限りの製品を購入し、PayPalで支払い、私のサイトに戻ります。IPNのしくみは理解していますが、PDTを使用すると、購入が成功した後、データがそこに返されてから(別のリスナーが必要になるのではなく)、より簡単にさまざまなアクションをトリガーできる可能性があります。 。

ただし、PayPalのPDTのドキュメントには次のような不可解な行が含まれています。...しかし、このトピックについてこれ以上何も見つけることができません。

  1. クレジットカードはPDTで使用するためのものではありませんか?文章以上のものをお願いします。

  2. それは、ユーザーが支払うためにPayPalアカウントを持っている/作成する必要があることを意味しますか?

  3. ユーザーがPayPalアカウントまたはクレジットカードで直接支払うことを許可する場合、IPNを実装する必要があるということですか。

これを経験した人は誰か親切に光を当てることができますか?


私はこれを本当によく説明しているウェブページを見つけました。[PayPalのPDTとIPNは:どのように動作しますか?] [1] [1]:webmasters.stackexchange.com/questions/21634/...
Ananizeスコット・

質問2に関して、お客様にPayPalアカウントの作成/作成を強制しないようにPayPal Account Optional設定My selling preferences > Website preferencesできる設定があります。クレジット/デビットカードで支払います。
kaiyaq 14

回答:


112

PDTとIPNのAPIは似ています。主な違いは、通知を受け取るタイミングです。そのため、両方を実装することをお勧めします。

  • PDTを使用すると、即座に通知を受け取り、必要な追加処理を実行して、ユーザーに確認ページを表示できます。
  • IPNを使用すると、ユーザーのコンピューターがPDTを送信する前に爆発しても、支払いが受領されたことが通知されます。

両方を実装して、両方の長所を最大限に活用してください。ただし、1つしか実行していない場合は、IPNが信頼できるものです。

1つの問題点:両方を実装すると、支払いが2回処理される可能性があります。それが起こらないように注意してください。私が書いたアプリケーションは、PDTとIPNをほぼ同じように処理し(バックエンド部分は同じ)、そのコードがデータベース内のWebユーザーごとのロックを取得するため、同じユーザーがまったく同じ支払いを複数回送信しようとすると、一度しか処理できません。処理されると、そのプロセスの結果は、それを処理する後続の試行で再利用されます。

編集 もう1つ、IPNにはPDTよりも多くの情報が含まれています。チャージバック通知など、IPNから受信できるさまざまなメッセージがたくさんあるため、実際に実装する必要があります。


PayPalのPDTシステムは、PayPalペイメントスタンダードを使用するマーチャントサイトに注文確認を送信し、マーチャントサイトがこの情報を認証できるようにします。そのようなサイトは、このデータをローカルで「注文確認」ページに表示できます。

PDTを使用する場合

IPNは、上記と同じ機能を提供します。それでは、IPNの代わりにPDTを選択する必要があるのはいつですか?

PDTを使用すると、顧客が支払いを完了するとすぐにサイトに通知されます。ただし、IPNでは、顧客が支払いを完了してから、サイトがこのイベントの通知を受け取るまでの間に重大な遅れがあります。

したがって、サイトに支払いの即時通知が必要な機能が含まれている場合は、PDTを使用してください。

たとえば、デジタルミュージックストアを考えてみます。PDTを使用すると、PDTが注文確認をすぐに送信するため、このストアでは顧客が購入をすぐにダウンロードできます。IPNでは、このような即時注文処理は不可能です。

IPNの利点

PDTには大きな弱点があります。注文確認は1回だけ送信されます。その結果、PDTが確認を送信するとき、サイトは稼働している必要があります。それ以外の場合は、メッセージを受信することはありません。

対照的に、IPNでは、サイトが受領を確認するまでIPNが確認を再送信するため、注文確認の配信は実質的に保証されます。このため、PayPalはPDTではなくIPNを実装することをお勧めします。

IPNのもう1つの利点は、PDTが注文確認のみを送信する一方で、さまざまなタイプの通知を送信することです。したがって、IPNを使用すると、サイトは、たとえば、チャージバック通知や注文確認を受け取ることができます。注:サイトに支払いをすぐに通知する必要がある場合は、IPNとPDTの両方を実装できます。ただし、それを行うと、サイトは販売ごとに2つの注文確認を受け取ります。その結果、指定された確認メッセージの1つのコピーに対してのみアクション(たとえば、製品の発送)を実行するように注意する必要があります。

ドキュメントはこちら


2
ありがとう、なるほど。したがって、基本的に、データベースの更新をIPNにリンクし(常に処理されるため)、ユーザー確認をPDTのみにリンクします(たとえば、保留中のページでIPNによって支払いが処理されたかどうかを確認するなど)....?
トム

1
+1はIPNとPDTの両方を実装するためのものです。
マークレッドマン

3
@Tom:私の実装は次のとおりです。PDTまたはIPNのいずれかが受信されたら、パラメーターを読み取り、支払いの処理を試みます。プロセッサA)は、(そのユーザーの)他の同時処理をブロックし、B)既に処理されているかどうかを確認します。処理が完了したら、IPNで終了し、PDTで確認ページや受領ページなどをユーザーに表示します。PDT側とIPN側の両方が反対側がダウンしている場合は正常に機能しますが、両方を使用することで信頼性が向上します。かなり高い割合のユーザーがIPNに到達する前にクリックスルーしません。
Shiny and New安宇

8
この回答はOPの#1、#2、または#3の質問には回答しませんが、受け入れられますか?
Clint Pachl 2013年

2
IPNが回答するまで最大4日かかります...
最悪

1

Re 1. PDTは、ウェブペイメントの自動返品機能で使用するためのものです。Auto Returnは、売り手にお金を支払った後にPDTサイトにリダイレクトします。残念ながら、PayPalアカウントオプションと一緒にその機能を使用することはできません-クレジットカード決済を有効にするために使用されます。PayPalからのメモは次のとおりです。「自動返送をオンにしていて、PayPalアカウントオプションを新しいユーザーに対して有効にすることを選択した場合、新しいユーザーは自動的にWebサイトに戻されず、戻るオプションが与えられます。」 。ユーザーは、サイトに戻るか(PDTステップ)、またはPayPalサイトに留まるオプションがあります。まとめると、クレジットカードで支払う場合、ユーザーが「ストアに戻る」リンクをクリックしない場合は、PDTステップをスキップできます。

再2。どの支払いオプションを許可するかは、あなた次第です。PayPalアカウントなしでの支払いを許可する場合は、アカウントオプションを有効にできます。PayPalアカウントを持つユーザーのみを許可する場合は、その機能を無効にします。より多くのオプションがあるかもしれません。

Re 3.あなたのケースでは、購入が成功した後にアクションをトリガーする必要があります。推奨される方法は、IPNを実装することです。PDTはすべてのケースで機能するわけではなく、メッセージの配信を保証するものではありません。ここに、そのトピックPDTとIPNをカバーするドキュメントへのリンクがあります。


0

これは古い質問ですが、私の簡単な答えは-PDTとIPNの両方を使用しないのはなぜですか?彼らは、カード取引のためにうまく働きます。

PDTはWebサイトに即時のトランザクションステータスを提供でき、そこで支払いの成功または失敗のステータスをすばやく確認し、ユーザーに適切なメッセージを提供できます。

その間、バックグラウンドでIPNからの完全な検証を待つことができます。受け取ったら、これを使用してDBをさらに更新し、注文を処理できます。

あなたは私が非常に明確で有用であることがわかったこのステップバイステップのガイドに従うことができます-そしてそれは2018でもまだ有効です。

https://www.codexworld.com/paypal-standard-payment-gateway-integration-php/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.