サブスクリプション決済の重要性
SaaS・動画配信・音楽配信・電子書籍・フィットネスなど、多くのビジネスモデルが「サブスクリプション(定期課金)」を採用しています。毎月安定した収益が見込めるため、ビジネスの予測可能性が高まります。一方、一回決済に比べて実装の複雑度が上がるため、信頼性の高いAPIを正しく使いこなすことが重要です。
サブスクリプション実装の主要コンセプト
製品(Product)と価格(Price)
Stripeではまずサービス内容を「Product」として登録し、そのProductに対して「Price」(金額・課金頻度・通貨)を設定します。1つのProductに複数のPrice(月払い・年払い・ライトプラン・プロプラン等)を紐づけられます。
顧客(Customer)
サブスクリプションを管理するためにユーザーをStripeの「Customer」オブジェクトとして作成します。Customerにはメールアドレスやデフォルトの支払い方法、税務情報などを保存します。自社のユーザーIDとStripeのCustomer IDをデータベースで関連付けて管理します。
支払い方法の保存(SetupIntent)
サブスクリプションでは、将来の課金のためにカード情報を事前に保存します。SetupIntentを使うことで、実際の決済は行わずにカード情報を安全に保存できます。3Dセキュア認証もこのタイミングで実施します。
Stripeでのサブスクリプション実装手順
- Stripeダッシュボードで Product と Price を作成(または API で作成)
- ユーザー登録時に Stripe Customer を作成し、自社DBに Customer ID を保存
- SetupIntent でカード情報を保存(3Dセキュア対応)
- サブスクリプション作成:stripe.subscriptions.create()を呼び出し
- Webhook でサブスクリプションの状態変更を受け取る
- invoice.paid イベントで課金成功を確認してアクセス権を付与
- invoice.payment_failed イベントで課金失敗時の処理を実施
プラン変更(アップグレード・ダウングレード)
ユーザーがプランを変更した場合、stripe.subscriptions.update()でPrice IDを変更します。プロレーション(日割り計算)の扱いはproration_behaviorパラメーターで設定します。
create_prorations:日割り計算を行い、即時請求または次回請求に反映(デフォルト)always_invoice:プロレーション分を即時請求書発行none:プロレーションなし(次の更新日から新しい料金を適用)
解約(キャンセル)の実装
サブスクリプションの解約には2つのタイミングがあります。
- 即時解約:stripe.subscriptions.cancel()で即座にサブスクリプションを終了。未使用分の返金はAPIまたはダッシュボードから手動対応
- 期間終了時解約:cancel_at_period_end: trueで、現在の課金期間終了時に自動解約。ユーザーは期間中は引き続きサービスを利用できる
多くのSaaSでは解約の意思を表明したユーザーに「期間終了まで利用継続」を提示するUXが採用されています。解約前にリテンション施策(特別割引・解約理由ヒアリング)を挟むことも効果的です。
Webhook で管理すべきサブスクリプションイベント
| イベント | 説明 | 処理内容 |
|---|---|---|
| customer.subscription.created | サブスクリプション作成 | ウェルカムメール送信 |
| invoice.paid | 課金成功 | アクセス権付与・領収書送付 |
| invoice.payment_failed | 課金失敗 | ユーザー通知・アクセス制限 |
| customer.subscription.updated | プラン変更 | アクセス権の更新 |
| customer.subscription.deleted | 解約完了 | アクセス権停止・解約完了メール |
顧客ポータルの活用
Stripeの顧客ポータルを使えば、ユーザー自身でカード情報の更新・プランの変更・解約ができる自己管理画面を数行のコードで実装できます。これにより、サポート対応コストを大幅に削減できます。
まとめ
サブスクリプション決済はビジネスに安定収益をもたらす強力なモデルです。Stripeのサブスクリプション機能は、プラン管理・プロレーション・トライアル・顧客ポータルまで一通りのユースケースをカバーしており、SaaSやコンテンツサービスの基盤として強くお勧めできます。Webhookを適切に実装して課金状態とアクセス権を同期させることが、安定した運用の鍵です。