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つのコピーに対してのみアクション(たとえば、製品の発送)を実行するように注意する必要があります。
ドキュメントはこちら