0からはじめるプログラマー独立・開業ブログ

【上級編】LaravelでStripeを使ってプラットフォーム型のSubscription決済をする

更新日:

この記事は決済システムの組み込みが可能になるStripeのAPIをPHPのLaravelフレームワークへの実装の仕方についてになります。
単発決済〜サブスクリプション決済、プラットフォーム作成までを全8回に分けて書いていきたいと思います!
今回は7回目の「【上級編】LaravelでStripeを使ってプラットフォーム型のSubscription決済をする」になります。

 

全8回

1,【準備編】LaravelでのStripeの環境を作成する
2,【初級編】LaravelでStripeを使って単発決済を実装する
3,【中級編】LaravelでStripeを使ったSubscription決済をする
4,【準備編】プラットフォーム作成の為にコネクトを使おう
5,【上級編】LaravelでStripeを使ってプラットフォーム型の単発決済をする①
6,【上級編】LaravelでStripeを使ってプラットフォーム型の単発決済をする②※direct charge
7,【上級編】LaravelでStripeを使ってプラットフォーム型のSubscription決済をする
8,【番外編】Laravelでメール確認付きの安全な会員登録に変更しよう

今回は「7,【上級編】LaravelでStripeを使ってプラットフォーム型のSubscription決済をする」になります。
第5回、6回ではプラットフォーム型の単発決済を行いましたが今回はさらに発展版のプラットフォーム型のサブスクリプション決済(定期支払い)の実装を行います!

支払いの流れは下記をご覧ください。

connectしたユーザーを介して定期支払を行った後、Stripeのwebhookを使い毎月や毎週などの定期支払と手数料の支払いを行います。

コネクトは必須となりますのでまだの方は「【準備編】プラットフォーム作成の為にコネクトを使おう」をご参照ください!
https://takkublog.net/stripe04/

それでは実装していきましょう!

webhookを準備をする

webhookというのはあるアクションがあった場合にイベントを発火させる仕組みになります。
今回のプラットフォーム型のサブスクリプション決済で言い換えると
「親ユーザーへの支払い」というアクションがあった場合に「子ユーザーへ親ユーザーから入金する」というwebhookを作成します!

Stripeには管理画面からwebhookを設定する事ができます。
また、webhookが発動した際にjsonデータでどの子ユーザーがコネクトしているかの情報も渡してくれますので、その情報を元に子ユーザーへ送金するプログラムを作成します。

Stripeの管理画面を開き、「開発者→webhook」をクリックしてください。

次に「エンドポイントの追加」をクリックしてください。

呼び出すURL:LaravelインストールのURL/eventget
イベントの選択:「送信タイプを選択」にチェックを入れ、「invoiced.created」にチェックを入れてください。
完了したら「エンドポイントを追加」をクリックして保存してください。

webhookの設定は以上になります。

次にプログラム部分を作成していきましょう!

サブスクリプション決済の準備をする

Routes→web.phpを開き下記を追加してください。

Route::get(‘/connectsubscription’, ‘HomeController@connect_subscription’);
Route::post(‘/subscribe_connect’, ‘HomeController@subscribe_connect’);
Route::post(‘/eventget’, ‘ChargeController@eventget’);

次にapp→Http→Controllers→HomeController.phpを開き下記、functionを追加してください。

今回は作成したプランへは「【中級編】LaravelでStripeを使ったSubscription決済(定期支払い)をする」で作成したプラン記載してください。
別途新しいプランを作成して頂いても問題ありません。
https://takkublog.net/stripe03/

次にapp→Http→Controllers→ChargeController.phpを開き下記、functionを追加してください。

次にapp→Http→Controllers→Middleware

下記に変更する。
protected $except = [
‘eventget’,
];

次にresources→viewsに入りconnectsubscription.blade.phpを作成してください。

それでは決済のテストを行って行きましょう!

「Laravelを設置したURL/connectsubscription」にアクセスしてください。

「このユーザーを通じて定期決済をする」ボタンをクリックしてカード情報を入力、決済を行ってください!
※注意
6/28時点でvisaのテスト番号を使うとエラーが発生しました。
別のテスト番号では問題が出なかった為、今回は下記を利用してください。

カード番号:4000 0000 0000 0077
MM/YY:01 20
cvc:000

決済が完了したらStripeの管理画面を見てみましょう!
まず、billing→定期支払いより親ユーザーへの定期支払の締結を確認します。

次にconnect→送金より指定金額が送金されているかを確認しましょう!

毎月や毎週など設定した定期決済の間は自動で送金が行われ続けます。

※要注意
この決済の流れですが、先に親ユーザーから子ユーザーへ送金をした数秒後に顧客から親ユーザーへの入金が行われます。
ですのでデフォルトの出金設定で金曜日に全額出金してしまいStripeの口座が送金金額に満たない場合は決済が失敗してしまいます。

Stripeを使ったプラットフォーム型のサブスクリプション決済については以上になります。
仕組みさえ分かっていればそれほど難しくもなく、プラットフォームが組めてしまうStripeはすごいですね!

これまでプラットフォーム型のシステムを導入したくても導入できなかった方や企業にとっても素晴らしい武器になると思います!

次回ははいよいよラストになります。
Stripeを使った内容ではありませんが、サブスクリプション決済に必要だった会員登録の仕組みをより、セキュアにものへの作り変えになります。

  • B!