BackEnd

Stripe Connectを使って複合プランの継続課金を実装

投稿日:2021年5月31日 更新日:

はじめに

今回の記事は、Stripe Connectを使ってCheckoutを利用した継続課金を実装の続きとなります。

前回に引き続き、継続課金の実装について紹介していきます。今回は、実際のサービスでの利用を意識して、複数の継続課金を併用した場合について見ていきます。

想定する継続課金

企業向けの架空のファイルアップロードサービスを例にした継続課金になります。はじめに、ユーザ企業はプラン(定額)を契約し、その後、サービスを利用するユーザ数分のID(従量課金)を購入します。

プランは3種類あり、金額に応じて一人あたりのアップロード可能数が増加します。

  • プランA 1,000円/月 1GB/人まで
  • プランB 2,000円/月 5GB/人まで
  • プランC 3,000円/月 無制限

ID数の方は、一人あたり一律100円かかります。例えば、プランAを選択し、30人のユーザが利用する場合、毎月の費用は4,000円になります。

想定するシチュエーション

今回の記事では、以下のようなシチュエーションを想定しています。

  • プランAとID数を30契約
  • ID数をさらに20購入
  • プランAからプランBにアップグレード
  • ID数を10解約
  • プランBからプランAにダウングレード

継続課金商品の作成

プランの継続課金商品の作成

Stripeの管理画面の商品からプランとID数の継続課金商品を作成します。

プランの継続課金商品は、料金体系モデルで標準の料金体系を選択し、料金設定を行います。

 

更に料金を2つ追加すると、以下のようになります。

ID数の継続課金商品の作成

次にID数の継続課金商品を作成します。

ID数の継続課金商品は、数量ベースの料金体系を選択します。

この設定では、一人あたり毎月一律100円かかります。

実装

前回の記事では、継続課金商品の契約はCheckout画面で行いましたが、今回は請求タイミングを月末に固定したいので、コード上から契約を行います。

プランAとID数を30契約する

Subscription::create() メソッドで継続課金商品を契約します。このメソッドでは、以下のように一度に複数の継続課金商品を契約することができます。

billing_cycle_anchor で指定した日付に次回の請求が行われます。また、当月の請求は日割り計算となります。

ID数をさらに20購入

継続課金商品の契約個数を更新する前に、追加の月額を計算することができます。

$invoice の内容を抜粋すると以下の通りです。

proration_behavioralways_invoice を指定すると、変更にかかる金額が即時決済されます。 total の金額が追加の決済金額です。

その後、実際にID数を50に変更する処理がこちらです。 Subscription::update() メソッドで、IDの数量を変更しています。

このように、追加分が即時決済されます。

プランAからプランBにアップグレード

プランの変更もID数の変更と同様に Subscription::update() メソッドで行います。

こちらも、ID数を変更する場合と同様に、プランを変更する前に追加の金額を表示する必要があるでしょう。

ID数を10解約

プランのダウングレードやID数を減らす場合、日割り計算はせず、次月の請求から変更が反映されるものとします。ID数を増やす場合と殆ど変わりませんが、 Subscription::update() メソッドのパラメータの proration_behaviornone で指定します( proration_date は不要)。

この場合の Invoce::upcoming() メソッドのレスポンスは以下のとおりです。

total の値は、次回の請求金額になります。

ちなみに、ID数を減らした後、次の請求より前にID数を増やす場合、日割り金額は減らした後のID数をもとに計算されます。

プランBからプランAにダウングレード

最後に、プランBからプランAにダウングレードする場合です。こちらもID数を減らす場合とほとんど変わりません。

さいごに

前回に引き続き、継続課金について、複数の継続課金を併用し、途中で内容を変更する方法を紹介しました。

おすすめ書籍

PHPフレームワーク Laravel Webアプリケーション開発 バージョン8.x対応 PHP本格入門[上] ~プログラミングとオブジェクト指向の基礎からデータベース連携まで

blog-page_footer_336




blog-page_footer_336




-BackEnd
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

PHPerだけどKotlinを勉強したって良いよね その2〜コンストラクタ編〜

1 はじめに2 コンストラクタ2.1 プライマリコンストラクタ2.2 セカンダリコンストラクタ2.3 ニックネームのみを入力した人2.4 ニックネームと email を入力した人2.5 Faceboo ...

rails

RailsでERBからJavaScriptにhashを渡す方法

1 はじめに2 カスタムデータ属性とは3 実装例3.1 コントローラの実装3.2 ビューの実装3.3 実行結果4 さいごに はじめに 以前、選択したプルダウンメニューに応じて別のプルダウンメニューの内 ...

laravel logo

LaravelのArtisanコマンドを自作する

1 はじめに2 コマンドの作成方法3 コマンドの実装3.1 文字列出力3.2 引数3.3 オプション3.4 入力を使用した対話型3.4.1 ask()メソッド3.4.2 secret()メソッド3.4 ...

rails

RailsでAjax処理で画面を更新する

1 はじめに2 View(遷移元)の設定3 Controllerの実装4 View(遷移先)の実装5 参考6 さいごに はじめに RailsでAjax処理で画面を更新する方法を簡単に紹介します。 Vi ...

rails

Rails5.2+Pumaのデプロイ設定

1 はじめに1.1 環境2 Pumaとは?2.1 Unicornとの比較2.2 Pumaのスレッド3 Pumaの使い方4 デプロイ設定4.1 Gemを追加4.2 Capfileの設定4.3 deplo ...

フォロー

blog-page_side_responsive

2021年5月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。