Stripe サブスクを実装した
わかること
Stripeサブスクを実装する上で一番大切なこと
TL;DR
自分たちのサービスが、何をいくらで売っているか理解する
それをStripeの SubscriptionモデルとPriceモデルで、
適切に設計することが一番大切
今回やったこと
ビジネス側から以下の表を渡されて
これ作ってと言われたので作った
項目\チームのプラン | トライアル | スタンダード |
---|---|---|
月額費用 | 0円 | 3000円/ユーザー |
容量追加(10GB) | 購入不可 | 500円 |
チームが複数のユーザーを持っていて
ユーザーがチーム上にファイルをアップロード、ダウンロードできるシステムと思って差し支えない
サブスクリプションの料金にもいろいろある
- icloudの追加ストレージ
- amazon primeの年会費
- Docomoなどキャリアのパケット、通話料金
大きく次の2つに分けることができる
- 期間で料金が固定
- 期間によって料金が変動
1は amazon prime の年会費やnetfilxの月の料金など単純
どれだけサービスを使おうと固定料金
2が意外と性質が違うものが多いと今回気づいた
例を挙げる
icloudの追加ストレージはアップグレードすると料金が変わり、日割りで請求される
amazonで炭酸水を定期便で購入していたら、注文個数によって料金が変わる
電話番号で通話をしたら、通話時間に比例して料金が変わる
これらは
- アップグレード、ダウングレード
- 日割り
- 注文個数
- 使用量の計測
という要素によって金額が変動している
私の1回目の設計
項目\チームのプラン | トライアル | スタンダード |
---|---|---|
月額費用 | 0円 | 3000円/ユーザー |
容量追加(10GB) | 購入不可 | 500円 |
月額費用を使用量の計測
容量追加を注文個数
として設計した
月額費用については
期間の終わりにユーザーを削除して
期間が始まったらユーザーを復活させる
という操作で請求額が減ることがないのが条件だった
そこで期間中にアクティブなユーザー数の最大値を計測して 料金を計算しようとした
容量追加は、期間中に必要な一瞬だけ増やして、
アップロードし、他の人がダウンロードしたら
アップロードしたものを削除して容量を減らす
という操作で請求額をちょろまかすことのないようにする必要があった
これに関しては、注文個数の変動 + 日割りで設計した
個数を1つ増やしたらその日から期間の終了までの日割り分が請求額に追加される。
個数を1つ減らしたら次の期間の請求額から1つ分料金が減るという設計
気付きと設計のブラッシュアップ
1回目の設計時点で月額費用の設計の
そこで期間中にアクティブなユーザー数の最大値を計測して 料金を計算しようとした
に怪しさをうっすら感じていた。
そして1週間くらい経ってふと気づいた
月額費用の方も容量追加と同じだった
月額費用という日本語につられてしまったが
要はユーザーの利用権利を1つ買えば使える人が1人増えるということだった
ので正しくは
月額費用ではなく 1ユーザーのアカウントを3000円で追加できる という日本語だった。
これで容量追加と月額費用の実装がほとんど一致してすっきりした
Stripeでのモデル
Subscription - SubscriptionItem(n個) - Price(3000円) - Product(1ユーザーのアカウント) | |-- SubscriptionItem(n個) - Price(500円) - Product(追加容量5G)