No.1203 PayPalとの連携
PayPalとの連携
出典: Wiki | CodeIgniter Users Group in Japan
世の中には数多くあるクレジットカード決済システムがありますが、PayPalには以下の様なメリットがあります。
- 決済用のライブラリ周りが充実、APIもある
- 日本語、英語はもちろん他の言語にも対応
- 毎月の維持費なし、手数料も他の決済サービスに比べて安いらしい
- アカウント作成の際の審査がほとんどなし
- 数銭単位の決済も使えるマイクロペイメントにも対応
ここではCodeIgniter用にまとめたPayPalのライブラリの実装の仕方を紹介します。 このライブラリにはPayPalのIPNとPDTという決済機能を使った実装を紹介します。 まず最初にIPNを使ったものを紹介して、後ほどPDTの方も追記します。
PayPalのIPNとPDTについての詳細はグーグルさんに聞いて見てください。
目次[非表示] |
PayPal IPNとの連携
1. PayPalデベロッパーアカウントを作る
テスト中に本物のクレジットカードやPayPalのアカウントを使うと、余計な支払いが発生してしまうので、PayPalのテストにはデベロッパーアカウントを所得しsandboxでテストを行います。
このURLからアカウントを所得し、ログイン後以下のリンクから支払いを受け取るSellerと支払いを行うBuyerのアカウントを1つずつ作成します。
https://developer.paypal.com/cgi-bin/devscr?cmd=_create-account-session
パスワードはPayPalが勝手に決めますが、覚え易いものに変更する事をお勧めします。
2. PayPalパッケージの解凍とファイルの配置
http://paypal.betal.jp/ci_paypal.zip
このURLからzipファイルをダウンロードします。
ファイルを解凍するとPayPal決済の機能を実装するファイルがCodeIgniterのディレクトリ構成(controllers, views, models, config)の中に展開されます。これらのファイルをCodeIgniterの各ディレクトリに置いてください。このライブラリは CodeIgniterのバージョンは1.7を使って作りましたが、特に変なことはしていないので、他のバージョンでも動くはずです。
またsqlディレクトリに入っているschema.sqlはpaypal決済を保存しておくテーブルの入ったMySQL用のスキーマファ イルです。このschema.sqlをMySQLにロードしてテーブルを用意してください。またdatabase.phpへのデータベースの設定もお忘れ なく。
config/constants.phpはCodeIgniterに既に存在するファイルなので、以下の行を加えてもらうだけでも構いません。
//paypal define('PAYPAL_IPN', 'ipn'); define('PAYPAL_PDT', 'pdt');
注意!!
PayPal IPNはインターネット上で見えるサーバーに対してリクエストを飛ばす必要があるので、インターネット上にあるサーバーを使うようにしてください。
4. パラメーターを修正
- views/paypal_view.php内の15行目、39行目
PayPalデベロッパーアカウントのSellerアカウントのアカウント名(メールアドレス)に修正します。
moksah_1248273171_biz@gmail.com の様に_bizで終わっている物がSellerのメールアドレスになります。
3. PayPalページのロード
ファイルを配置するとpaypalコントローラ以下にpaypal支払い用のボタンのあるページをロードしてみます。
にある様にボタンが表示されればokです。
4. IPNリクエストの確認のための準備
IPNの詳細の説明はグーグルさんに任せるとして、IPNを使った支払い完了までのフローは以下の様になります。
a. 顧客がPayPalで支払いを行う
b. PayPalがあなたのサーバーに対し支払い情報を含んだリクエストを飛ばす
c. あなたのサーバーで受けたリクエストをPayPalに戻す
d. PayPalが戻ってきたデータをチェックして、正しいかどうかを判断し、結果をあなたのサーバーに戻す
e. データが認証された場合支払いが正常に完了する
b. で飛んでくるPayPalからのリクエストを確認するためサーバー内のシェルから以下のコマンドを発行します
tail -f /var/log/apache2/access.log
当然access.logの位置は各サーバーの設定に合わせてください。
5. PayPalで支払い
/paypal コントローラをロードして、ページ内にある「2000円購入」ボタンをクリックしてPayPalにリクエストが飛ばされるのを確認します。
To access the PayPal Sandbox, please log in to PayPal Developer Central.
と表示される場合はリンクをクリックしてPayPalデベロッパーアカウントにログインします。
PayPalのアカウントを使って支払いを進める様に促されるので、先ほど作ったBuyerアカウントを使ってPayPalにログインします。
amano_1222333444_per@codeigniter.jp の様に_perで終わっている物がBuyerのメールアドレスになります。
ログイン後注文の詳細の画面と共に「Pay Now」ボタンが表示されるので、「Pay Now」ボタンをクリックして支払いを終了します。
注意!! この際の支払い画面は英語で出てきますが、デベロッパー環境は英語しか用意されていないようです。この後の8.の設定で本番環境に変更後は支払い画面も日本語で表示されます。
6. IPNリクエストの確認
支払い後数秒後にIPNリクエストがPayPalから飛んできます。リクエストが以下の様にaccess.logの中に出てくればPayPalがきちんとIPNを送ってくれたと確認できます。
111.222.222.111 - - [13/Nov/2008:16:25:19 +0900] "POST /paypal_ipn HTTP/1.0" 200 - "-" "-"
7. DBにデータが保存されているかどうかの確認
支払いが認証されると/paypal_ipnコントローラがDB内のpaypal_paymentテーブルに対して書き込みを行います。
+----+--------+---------------+-------------------+------+---------------------+ | id | amount | currency_code | txn_id | type | ctime | +----+--------+---------------+-------------------+------+---------------------+ | 1 | 2000 | JPY | 1VT55951UL1165239 | ipn | 2008-11-23 14:40:00 |
この様な列がDBに入っていれば成功です。認証に失敗した場合は何も書き込みは行われません。
8. 本番環境に設定を変更
デベロッパー環境で動作確認後本番環境に設定を変更します。事前に本番環境用のPayPalのビジネスアカウントを作成しておいてください。
- controllers/paypal_ipn.php内の48行目
- views/paypal_view.php内の12行目、36行目
これらの行をコメントアウトして、上にあるsandboxの付いているデベロッパー環境の部分をコメントアウトします。
- views/paypal_view.php内の15行目、39行目
Sellerアカウントのアカウント名(メールアドレス)を本番のものに変更
これで一般のPayPalアカウントやクレジットカードでの支払いが受けれるようになります。