だいぶ前にエクスプレスチェックアウトの記事を書きましたが、今回はcakephp2.5.5でPaypalプラグインを使います。
プラグインをダウンロードして、「/Plugins/Paypal」として設置します。
bootstrap.php
CakePlugin::load('Paypal'); define('PAYPAL_SANDBOX', true); // sandboxの場合は、true define('PAYPAL_USERNAME', 'Paypalユーザー名'); define('PAYPAL_PASSWORD', 'パスワード'); define('PAYPAL_SIGNATURE', 'シグネーチャー');
エクスプレスチェックアウトを使うController、またはAppContorollerで
App::uses('Paypal', 'Paypal.Lib');
public function beforeFilter(){ $this->Paypal = new Paypal( array( 'sandboxMode' => PAYPAL_SANDBOX, 'nvpUsername' => PAYPAL_USERNAME, 'nvpPassword' => PAYPAL_PASSWORD, 'nvpSignature' => PAYPAL_SIGNATURE ) ); }
Paypalに送るリクエストデータ(※エラー処理を省いて書いています。)
$data = array( 'description' => 'Paypalに表示する説明文', 'currency' => 'JPY', 'return' => 'Paypal決済完了時のURL', 'cancel' => 'paypal決済キャンセル時のURL', 'items' => array( // 商品内容(複数可) 0 => array( 'name' => '商品名', 'description' => '説明文', 'tax' => '消費税', 'shipping' => '送料', 'subtotal' => '小計', ), ) ); if ($express_checkout_url = $this->Paypal->setExpressCheckout($data)) { // Paypalにジャンプする $this->redirect($express_checkout_url); }
決済がOKであれば指定したURLにリダイレクトされます。
// 決済OK時 if ($getDetail = $this->Paypal->getExpressCheckoutDetails($this->params['url']['token'])) { if ($getDetail['PAYMENTREQUESTINFO_0_ERRORCODE'] != '0') { // ErrorCodeが0以外の時は、Paypal決済エラー // エラー処理が入る } if ($doPayment = $this->Paypal->doExpressCheckoutPayment($data, $this->params['url']['token'], $getDetail['PAYERID'])) { // 決済番号 $transactionid = $doPayment['PAYMENTINFO_0_TRANSACTIONID']; } }
setExpressCheckoutに決済データを添付してリクエストを送り、決済OKであれば、tokenが返ってくるので、getExpressCheckoutDetailsで内容を取得し、doExpressCheckoutPaymentにトークンと決済データなどを添付して、整合性チェック(言葉が違うかな?)をして決済番号を取得します。
MACを使っていますが、Paypal SandboxのWebサイトと相性が悪いみたいです。
sandboxサイトはWINで使いましょう。
日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)