2020.03.16

Stripeを利用してWordPressにクレジット決済機能を作ってみよう⑤【機能補足】

こんにちは、webエンジニアのゾノ( @ozonosho )です。

さて、昨日のブログに続いて今回もStripeを利用してWordPressにクレジット決済機能を実装する方法をご紹介いたします。

これまで4回に渡って「Stripeの概要」「Stripeの導入方法」「単発決済の実装方法」「定期決済の実装方法」を紹介してきましたが、連載もいよいよ今回でラスト!

ラストは、実際の利用場面で使える機能補足をご紹介します。

◆目次
1.決済完了通知メールを送信する方法
2.一律で毎月同じ日にちに定期決済させる方法
3.決済と会員期限と連動させたり、ユーザー用がマイページから自分で定期決済を開始・停止させたりすることもできるよ

決済完了通知メールを送信する方法

決済完了時に「決済ユーザー」「管理者」それぞれに通知メールを送信する方法をご紹介します。

メール通知自体は決済処理後にPHPで追加してあげれば良いだけなので実装は簡単です。

ここでは単発決済のブログで紹介した下記の実装コードにたいして、決済完了通知メールを送信するための処理を追加してみます。

▽単発決済用のコード

<?php

require_once(dirname(__FILE__) . '/stripe/init.php');

\Stripe\Stripe::setApiKey("シークレットキー");

$token = $_POST['stripeToken'];
$email = $_POST['stripeEmail'];
$amount = $_POST['item_amount'];
$description = $_POST['item_description'];
$currency = 'jpy';

//決済処理
try {
  $charge = \Stripe\Charge::create(array(
    "amount" => $amount,
    "currency" => $currency,
    "source" => $token,
    "description" => $description,
  ));
}catch (\Stripe\Error\Card $e) {
  die('決済が完了しませんでした');
}

//サンキューページへリダイレクト
$thanks_url = 'サンキューページのURL';
header('Location: ' . $thanks_url);
exit;

?>

通知メールを送信するためのコードは、決済処理が完了したあとに追加しましょう。

▽単発決済後にメール通知をおこなうコード

<?php

require_once(dirname(__FILE__) . '/stripe/init.php');

\Stripe\Stripe::setApiKey("シークレットキー");

$token = $_POST['stripeToken'];
$email = $_POST['stripeEmail'];
$amount = $_POST['item_amount'];
$description = $_POST['item_description'];
$currency = 'jpy';

//決済処理
try {
  $charge = \Stripe\Charge::create(array(
    "amount" => $amount,
    "currency" => $currency,
    "source" => $token,
    "description" => $description,
  ));
}catch (\Stripe\Error\Card $e) {
  die('決済が完了しませんでした');
}

/*
	決済通知メール
*/
mb_language("Japanese");
mb_internal_encoding("UTF-8");

//ユーザー宛のメール
$title = "メール件名";
$content = "メール本文";
$from_name = "送信元名義";
$from_addr = "送信元アドレス";
$from_name_enc = mb_encode_mimeheader($from_name, "ISO-2022-JP");
$from = $from_name_enc . "<" . $from_addr . ">";
$to = $email;
$header = "From: " . $from . "\n";
$header = $header . "Reply-To: " . $from;
if(mb_send_mail($to, $title, $content, $header, "-f" .$from_addr)) {
} else {
};

//管理者宛のメール
$title = "メール件名";
$content = "メール本文";
$from_name = "送信元名義";
$from_addr = "送信元アドレス";
$from_name_enc = mb_encode_mimeheader($from_name, "ISO-2022-JP");
$from = $from_name_enc . "<" . $from_addr . ">";
$to = "送信先(管理者)アドレス";
$header = "From: " . $from . "\n";
$header = $header . "Reply-To: " . $from;
if(mb_send_mail($to, $title, $content, $header, "-f" .$from_addr)){
} else {
};

//サンキューページへリダイレクト
$thanks_url = 'サンキューページのURL';
header('Location: ' . $thanks_url);
exit;

?>

メールの内容や送信情報などは自由に変更してご利用ください。

下記のクレジット情報でテスト決済させることができるのでぜひお試しください。

カード番号:4242 4242 4242 4242
MM/YY:11/30(※現在以降の月であれば何でもOK)
CVC:111(※3桁の数字であれば何でもOK)

テスト決済してみると、入力アドレス宛に当サイトからの通知メールが届くのを確認できると思います。

一律で毎月同じ日にちに定期決済させる方法

ユーザーがいつ定期決済に登録したとしても、一律で同じ日にちに定期決済をスタートさせる方法をご紹介いたします。

ここでは定期決済のブログで紹介した下記の実装コードに元に、一律で翌25日から定期決済をスタートさせるための処理を追加してみます。

▽定期決済用のコード

<?php

require_once(dirname(__FILE__) . '/stripe/init.php');

\Stripe\Stripe::setApiKey("シークレットキー");

$token = $_POST['stripeToken'];
$email = $_POST['stripeEmail'];
$plan = $_POST['item_plan'];

//決済処理
try {
	$customer = \Stripe\Customer::create([
	    'email' => $_POST['stripeEmail'],
	    'source'  => $_POST['stripeToken'],
	]);
	$subscription = \Stripe\Subscription::create([
	    'customer' => $customer->id,
	    'items' => [['plan' => $plan]],
	]);
}catch (Exception $e) {
	die('決済が完了しませんでした');
}

//サンキューページへリダイレクト
$thanks_url = 'サンキューページのURL';
header('Location: ' . $thanks_url);
exit;

?>

Stripeには「①トライアル期間(=無料お試し期間)」「②請求サイクル」という概念があり、この2つを利用することでどのタイミングで決済登録されても定期決済の発生日を揃えることができます。

実際に定期決済の発生日を「翌25日」に揃える処理を加えたコードを見てみましょう。

▽翌25日から定期決済をスタートさせるコード

<?php

require_once(dirname(__FILE__) . '/stripe/init.php');

\Stripe\Stripe::setApiKey("シークレットキー");

$token = $_POST['stripeToken'];
$email = $_POST['stripeEmail'];
$plan = $_POST['item_plan'];

//翌25日を取得
date_default_timezone_set('Asia/Tokyo');
$year = date("Y");
$month = date("n");
$day = date("j");
if($day > 25) {
	$month = $month + 1;
}
$day = 25;
if($month > 12) {
	$year = $year + 1;
	$month = 1;
}
$strDate = $year . "-" . $month . "-" . $day;

//決済処理
try {
	$customer = \Stripe\Customer::create([
	    'email' => $_POST['stripeEmail'],
	    'source'  => $_POST['stripeToken'],
	]);
	$subscription = \Stripe\Subscription::create([
	    'customer' => $customer->id,
	    'trial_end' => strtotime($strDate), //トライアル期間終了日
	    'billing_cycle_anchor' => strtotime($strDate), //請求サイクル開始日
	    'items' => [['plan' => $plan]],
	]);
}catch (Exception $e) {
	die('決済が完了しませんでした');
}

//サンキューページへリダイレクト
$thanks_url = 'サンキューページのURL';
header('Location: ' . $thanks_url);
exit;

?>

こんな形で、「trial_end(トライアル期間終了日)」「billing_cycle_anchor(請求サイクル開始日)」を設定してあげることで一律決済日での定期決済を作成することができます。

その他、さまざまな実装が可能です!

StripeとWordPressをうまく組み合わせればさまざまな実装が可能です。

たとえばこんな機能を実装できます
  • ユーザー用のマイページを作成して、ユーザーが自分のマイページから都度払いや定期決済を自由に登録・解除できる機能
  • ユーザーに会員期限を持たせて、Stripeの支払いと連動してユーザーの会員期限を延長させる機能
  • 毎月決まった日時にWordPress側からStripe側にユーザーの直前決済ステータスを取得しにいき、決済に失敗したユーザーがいたら管理者宛に通知メールを送る機能
  • 条件に応じて自動的にユーザーの決済プランが切り替わる機能
  • etc…

上記の機能例を見ていただくと、StripeとWordPressを組み合わせればかなり柔軟な決済システムを導入できることが伝わると思います。

このあたりまでいくとブログで汎用的なコードをご紹介するのは難しいですが、制作・カスタマイズのご依頼であればいつでも受付しておりますので、気軽に『お問い合わせページ』よりご連絡いただけますと幸いです。

おわりに

以上、全5回に渡ってStripeを利用してWordPressに定期決済機能を実装する方法をご紹介させていただきました。

この連載ブログは、しばらくしたら1つの記事にまとめてしまおうと考えています。

そのときには今回掲載しきれなかったStripeの「返金方法」や「支払い履歴のエクスポート方法」なんかも掲載する予定なので、興味ある方は是非またサイトを訪れていただけると嬉しいです(*´`)

当サイトではWordPressのカスタマイズ依頼を請け負っています。実現したい機能・要望がある方はぜひ下記ページよりご相談ください。

あなたのサイトに理想の機能を実装!WordPressカスタマイズサービス

本サービスはあなたのWordPressサイトに理想の機能を実装するサービスとなります。 どのような機能・要望でも実現可能です! Wo......

→この記事を読む