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


関連記事

laravel logo

DeployerでLaravelをデプロイ! 初期設定〜レシピのカスタマイズまで

1 はじめに2 Deployerの導入2.1 前提条件2.2 インストール3 デプロイの設定3.1 デプロイスクリプト3.2 サーバサイドの設定3.3 デプロイコマンド3.4 Deployerのディレ ...

laravel logo

Laravel SailでDocker環境構築

1 はじめに2 Laravel Sailの基本2.1 Dockerの構成2.2 コンテナの起動・停止2.3 sailで使用できるコマンド3 Laravel Sailの設定3.1 ポートフォワードの設定 ...

rails

Shrineをモデルに関連付けないで使用してハマったこと

1 はじめに2 アップロード時にリサイズする3 アップロード時のバリデーション4 アップロード時に古いファイルを削除する5 さいごに はじめに ShrineはRailsでのアップロードを簡単に行えるよ ...

laravel logo

Laravelの認可機能Gateを使ってみた

1 はじめに2 やる事3 Gate3.1 登録3.2 利用4 Policy5 ミドルウェアでの使用6 さいごに7 おすすめ書籍 はじめに Laravelには認可機能を簡単に実装出来るGateという機能 ...

麻雀で自分が何を切るか学習させる

1 はじめに2 プロジェクト名を決めてみる3 何切る問題で考慮される要素3.1 手牌3.2 ドラ3.3 考慮していない要素(本当は入れたい)4 学習の方法5 さいごに はじめに 前回執筆しました、配牌 ...

フォロー

blog-page_side_responsive

2021年5月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

アプリ情報

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