[Cakephp]PaypalエクスプレスチェックアウトAPIを使う

だいぶ前にエクスプレスチェックアウトの記事を書きましたが、今回はcakephp2.5.5でPaypalプラグインを使います。

Paypal Plugin for CakePHP 2.x

プラグインをダウンロードして、「/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で使いましょう。

参考:PayPal APIについて調べてみた|社員ブログ|株式会社Qript

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)