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


関連記事

js

GoogleAppsScriptを使ってmBaaSの定期実行処理を実装する

1 はじめに1.1 簡単な状況説明1.2 定期実行を行う方法2 実装2.1 実装の流れ2.2 JavaScriptの実装2.3 スクリプトをアップロードする2.4 Google Apps Script ...

laravel logo

LaravelのHttp Facade

1 はじめに2 基本定な使い方2.1 get2.2 post3 タイムアウト4 リトライ5 マルチパートリクエスト6 エラー処理7 さいごに8 おすすめ書籍 はじめに 現在関わっている案件でHttpク ...

laravel logo

LaravelでHTTP通信

1 はじめに2 インストール3 基本的な使い方3.1 GETでリクエストを投げる3.2 リクエストヘッダーを指定3.3 クエリパラメータを指定3.4 timeout時間を指定3.5 POSTでリクエス ...

rails

Active Strageを使用してユーザーのアバターを登録、表示する

1 はじめに1.1 環境2 セットアップ2.1 前準備2.2 マイグレーションファイル作成2.3 設定ファイル3 実際に使って見る3.1 モデル3.2 コントローラー3.3 ビュー4 個人的メモ4.1 ...

rails

Railsでの非同期処理とDelayed Job

1 はじめに2 Active Job2.1 Active Jobの役割2.2 ジョブを作成する2.3 ジョブをキューに登録する2.4 コールバック2.5 例外3 Delayed Job3.1 設定3. ...

フォロー

blog-page_side_responsive

2021年5月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

アプリ情報

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