クレジットカードで寄付できるようPAY.JPを実装する part.2

結構、PAY.JPの実装で訪問される方が多いようなのでもうちょっと詳しく書いておこうと思います。

まず、私が求めていたこと

  • 入力した任意の金額で寄付できる
  • 数種類の月額・年額の会費、定期課金
  • お名前・住所・メールアドレス等の情報取得

くらいでしょうか。

多分みなさん、チェックアウトをウェブページに貼り付けるとかはつまづかないと思うので、PHPで書いたコードを参考までにのせておきます。
時間にゆとりができたらもう少し詳しく追記しようと思います。

<?php
add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
function theme_enqueue_styles() {
  wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
  wp_enqueue_style( 'child-style', get_stylesheet_directory_uri() . '/style.css', array('parent-style')
);
}
/**
 * @param MW_WP_Form_Data $Data
 */
function my_mwform_after_send( $Data ) {
// ご寄付フォームの決済処理
require_once 'init.php';
 
//◆支払い以外のアクセスは弾く
if (!isset($_POST['payjp-token'])) {
    echo "クレジットカード情報が未入力です";
    exit;
}
 
//失敗時のメッセージ
$err            = '';
//送られてきた、顧客のカード情報を使って作成されたトークン
$token          = $_POST['payjp-token'];
//ご寄付金額
$amount = $_POST['donation'];
//名前
$description = $_POST['your-name'];
//メールアドレス
$email = $_POST['your-email'];
//秘密鍵
$secret = 'sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxx';
//通貨(通常は日本円を表す'jpy'を指定する)
$currency = 'jpy';
//定期課金プラン
$kaiin = $_POST['member'];
switch ($kaiin){
case 'A. 賛助会員(年額3000円)':
$plan = 'pln_xxxxxxxxxxxxxxxxxxxxxxxxxxxx'; //年額3,000円
break;
case 'B. 賛助会員(年額6000円)':
$plan = 'pln_xxxxxxxxxxxxxxxxxxxxxxxxxxxx';	//年額6,000円
break;
case 'C. 正会員(年額10000円)':
$plan = 'pln_xxxxxxxxxxxxxxxxxxxxxxxxxxxx';	//年額10,000円
break;
case 'D. 法人会員(年額30000円)':
$plan = 'pln_xxxxxxxxxxxxxxxxxxxxxxxxxxxx';	//年額30,000円
break;
case 'E. 特別支援会員(月額5000円)':
$plan = 'pln_xxxxxxxxxxxxxxxxxxxxxxxxxxxx';	//月額5,000円
break;
case 'F. 特別支援会員(月額10000円)':
$plan = 'pln_xxxxxxxxxxxxxxxxxxxxxxxxxxxx';	//月額10,000円
break;
case 'G. 特別支援会員(月額30000円)':
$plan = 'pln_xxxxxxxxxxxxxxxxxxxxxxxxxxxx';	//月額30,000円
break;
}

try {
//◆新しい顧客の作成
\Payjp\Payjp::setApiKey($secret);
$customer = \Payjp\Customer::create(array(
		"card" => $token,
        "description" => $description,
        "email" => $email
        ));
if ( $Data->get_form_key() === 'mw-wp-form-1473' ) {
//◆新しい定期課金の作成 入会申し込みの場合
\Payjp\Payjp::setApiKey($secret);
$result = \Payjp\Subscription::create(array(
		"customer" => $customer["id"],
		"plan" => $plan
));
} else {
//◆新しい課金の作成 ご寄付の場合
\Payjp\Payjp::setApiKey($secret);
$result = \Payjp\Charge::create(array(
        "customer" => $customer["id"],
        "amount" => $amount,
        "currency" => $currency
        ));
}

    if (isset($result['error'])) {
        throw new Exception();
    }
} catch (Exception $e) {
    // カードが拒否された場合
    $err = $result['error']['message'];
    echo $err;
    exit;
}

if ( $Data->get_form_key() === 'mw-wp-form-1473' ) {
header('Location: https://hiroshimahouse.com/member-thanks/');
exit();
} else {
header('Location: https://hiroshimahouse.com/donation-thanks/');
exit();
}
}
add_action( 'mwform_after_send_mw-wp-form-1433', 'my_mwform_after_send' );
add_action( 'mwform_after_send_mw-wp-form-1463', 'my_mwform_after_send' );
add_action( 'mwform_after_send_mw-wp-form-1473', 'my_mwform_after_send' );
?>

ここここからのフォームの続きです。

メールフォームのプラグインはMW WP Formを使ってます。
アクションフックが用意されているようだったので、function.phpに上記のように書いてます。上部のcss系の記述は関係ありません。

先日改めてググってみると、PAY.JPも定期課金できるプラグインとかありますね!それ使えばPHPとか書かなくてもいけそうです。