プラグインでcakephpシステムを拡張
Paypal IPN Plugin
Cakephpにはプラグインを導入することでシステムを拡張することができる。プラグインを利用すると簡単にシステムを拡張できる場合もあるが、実際にはプラグイン開発者の意図やプラグイン内で利用されているcakephpコアコンポーネントに対する理解が必要な場合がある。
本エントリーでは、Cakephpにプラグインを導入する方法について書いてみたい。その例として、
Paypal IPN Cakephp plugin
https://github.com/webtechnick/CakePHP-Paypal-IPN-Plugin
を選択した。理由は、個人的に利用したプラグインの中で高機能で有用性があると思っているためである。Paypal IPN Cakephp pluginで得られる機能をあげてみる。
・paypalボタン(フォームボタン)のhtml生成
・sandbox(テスト環境)と本番環境の切り替え
・即時支払い通知(IPN)の受け取り
などがある。
プラグインの導入
ダウンロードと読み込み
Paypal IPN Cakephp pluginは、高機能であるがプラグインの導入の仕方についてはほかのプラグインと変わらず簡単に導入することができる。
プラグインをダウンロードして、
app\Plugin
に
app\Plugin\PaypalIpn
としてコピーする。次に、
app\Config\bootstrap.php
に以下を追記してプラグインを読み込む。
CakePlugin::load('PaypalIpn');
データベースの展開
プラグイン用のデータベーステーブルを設定する必要があり、以下のコマンドで簡単に設定できる。
cake schema create --plugin PaypalIpn
cakeというコマンドファイルは、以下のディレクトリに存在する。
app\Console
windowsの場合はコマンドプロンプトで以下のように実行してみる。
C:\xampp\htdocs\vhost\cakephp2.4.2\app\Console>cake schema create –plugin PaypalIpn
Error: Plugin PaypalIpn could not be found.
#0 C:\xampp\htdocs\vhost\cakephp2.4.2\lib\Cake\Console\Shell.php(417): CakePlugin::load(‘PaypalIpn’)
#1 C:\xampp\htdocs\vhost\cakephp2.4.2\lib\Cake\Console\ShellDispatcher.php(209): Shell->runCommand(‘create’, Array)
#2 C:\xampp\htdocs\vhost\cakephp2.4.2\lib\Cake\Console\ShellDispatcher.php(68): ShellDispatcher->dispatch()
#3 C:\xampp\htdocs\vhost\cakephp2.4.2\app\Console\cake.php(37): ShellDispatcher::run(Array)
#4 {main}
すると上のようにエラーになるので、以下のように修正して実行するとうまくいく
C:\xampp\htdocs\vhost\cakephp2.4.2\app>Console\cake schema create --plugin PaypalIpn
下の2つのテーブルをデータベースから削除しても良いかという質問と新規に作成しても良いかという2つの質問がプロンプト上でされるので
- instant_payment_notifications
- paypal_items
今回は両方ともyesでenterし新規にテーブルを作成した。
ルーティングの設定
app\Config\routes.php
に以下を追記する。
/* Paypal IPN plugin */ Router::connect('/paypal_ipn/process', array('plugin' => 'paypal_ipn', 'controller' => 'instant_payment_notifications', 'action' => 'process')); /* Optional Route, but nice for administration */ Router::connect('/paypal_ipn/:action/*', array('admin' => 'true', 'plugin' => 'paypal_ipn', 'controller' => 'instant_payment_notifications', 'action' => 'index')); /* End Paypal IPN plugin */
以下のパスは、
/paypal_ipn/process
即時支払通知(ipn)の受け取りパスになり必須の設定。もう一つのルーティング設定は、オプションで管理画面のパス設定になっている。こちら側はオプションであって必須の設定ではない。