Paypal「PDT」「IPN」を使った決済とバックエンドの統合(1)

  • 2007年6月 7日 22:39
  • paypal

前回のエントリー「Pyapalを使った「今すぐ購入」ボタンの作り方 」の続きです。今回、および次回ではPaypalの決済を終えた後に、Paypalからコールバックされる情報を元に、バックエンドとの統合方法、およびマルチバイトを扱う際の注意ポイントを解説していきます。

Paypalからコールバックされる仕掛けはPDT(支払いデータ転送)、およびIPN(即時支払い通知)の2種類があります。これらは一見似ているもので、実際コールバックされる内容はほぼ同じだったりするのですが、実はまったく違う仕掛けなものなので、どちらか一方だけを考慮してもダメで、両方のコールバックともに考慮すべきものです。これらの違いは次の通りです。

PDT

PDT の主要機能は、買い手が支払い完了時に自Paypalのサイトから自サイトに自動的にリダイレクトされた時に、支払い取引の詳細を表示することです。つまり、Paypalと自サイトの処理は同期型です。(ここがポイント!)なので、PDTによってコールバックされる情報を元にバックエンドと統合を行うことが可能になります。このフローを図で表すとこんな感じになります。

PDTの仕組み

ところが、実はPDTではバックエンドと統合を行うには不完全となります。・・・と、いうのも、あくまでコールバックされるタイミングは、決済終了後の自サイトに戻る瞬間。なので、もし決済が終了しても、自サイトに戻る前にブラウザを閉じられてしまうと、コールバックされずにバックエンドのDB処理が完結できず、ユーザは決済を終了したのにDB上では未決済、という状況になってしまいます。また、払戻し、支払い取り消しなど必ずしも全取引の通知を受け取るとは限らないのも、PDTの特徴なのです。

では、どうすればいいのでしょうか??・・・と、いうことで、このPDTの欠点を補うために、Paypalはもう1つのコールバック方法としてIPNという方法を持っています。

IPN

IPNは、PDTと(ほぼ)同じデータがPaypalから自サイトにPOSTされますが、そのタイミングは支払いが終了したとき、また支払い状態が「Pending」の場合において決済されたとき、失敗したとき、拒否されたときにも別の通知を受け取ることになります。つまり、コールバックされるタイミングはWebのフローとは非同期に行われます。(これがPDTと違う大きなポイント!)これを図にするとこんな感じ。PDTとは独立してWebフローとは非同期に自サイトへPOSTされてきます。

IPN

まとめると、PDTとIPNはこんな感じでバックエンドとの統合ができます。

  • PDTはWebフローと同期してコールバックされる
  • なので、「決済は完了しました!」な画面を出力するのはPDTのコールバック時に表示
  • PDTでは決済が完了しても、その後にブラウザが閉じられる可能性がある
  • そのためにDBなどバックエンドと統合する際は、IPNでPaypalからコールされた際に、その情報を元にしてDBの処理を行う

全部を強引にまとめるとこんな感じ。

PDT, IPN

また、これらの情報は「注文管理インテグレーションガイド(PDF)」がよくまとまっているので、併せて読まれるといいと思います。

さて、今回はPDT、IPNの紹介をしましたので、次のエントリーでは実際にPDTとIPNのコードを書き、その注意点について述べてみようと思います。

関連広告

Trackbacks:0

TrackBack URL for this entry
http://blog.katsuma.tv/mt-tb.cgi/66
Listed below are links to weblogs that reference
Paypal「PDT」「IPN」を使った決済とバックエンドの統合(1) from blog.katsuma.tv

Home > paypal > Paypal「PDT」「IPN」を使った決済とバックエンドの統合(1)

Search
Feeds

Return to page top