RailsアプリでPayPalのIPN(即時支払い通知)と連携するのに、paypalというPluginが用意されてる。
サイトに記載されているとおりにPluginをインストール、
ruby ./script/plugin install svn://vault.jadedpixel.com/paypal/trunk/paypal
しようとしたが、接続できないと起こられる。TortoiseSVNでアクセスしても接続エラーが発生する…。
と困ってたら、GitHubにPayPalプロジェクトを発見。変更されたのか?とりあえず、下記コマンドを実行することでインストールできる。
ruby script/plugin install git://github.com/openhood/paypal.git
※事前にクライアントにGitがインストールされており、gitコマンドが利用可能である必要がある。
これで無事インストール完了。
PayPalのIPNにから受け取った通知の検証リクエストを発行するには、
class PaymentsController < ApplicationController def notify # IPNの検証通知の送付先URLを設定(↓はSandbox) Paypal::Notification.ipn_url = "https://www.sandbox.paypal.com/cgi-bin/webscr" # PayPalへの検証通知オブジェクトを生成 notify = Paypal::Notification.new(request.raw_post) # PayPalへの検証通知をPOST送信(これがtrueなら検証通知自体は成功) if notify.acknowledge # 後は、notify.complete?がtrueであれば支払完了となるのでその際に必要な処理を定義 ... end end end
といった感じになる。
Sandboxを使って定期購読のテストをしてるけど、IPNを利用してPayPalでの定期購読の決済処理を行うとIPNの通知が以下の3段階で来る。
- 購読の登録通知
- 購読料の支払い通知(Pending)
- 購読料の支払い通知(Complete)
ユーザーがPayPalで支払を済ませると購読の登録通知と購読料の支払い通知(Pending)のリクエストが送られてきて、売り手が、PayPalにログインして、該当の支払についてAcceptボタンを押下すると最後の購読料の支払い通知(Complete)が帰ってくるという仕組みみたい。
毎回Accept押さないと行けないの?と思い、PayPalのカスタマーセンターのお姉ちゃんに尋ねてみると、どうも一番最初に取引する際に一度だけAcceptを押す必要があるみたい。1回でも行えば、それ以降は別のユーザーから購読の申し込みがあっても、ユーザーからの申し込みが処理された段階で「購読料の支払い通知(Complete)」になるとのこと。ただ、Sandboxの場合は、テストツールという位置付けなので、毎回Acceptボタンを押さないといけないらしい。
まぁ、実際にちゃんと言われたように動作するかは、Sandboxじゃなくて実環境で試してみないと何とも。