サイトのAPI図鑑B版
掲載情報が正確でない可能性があります。
決済・フィンテックAPI

サブスクリプション決済APIの実装ガイド【Stripe・GMO・国内サービス対応】

定期課金(サブスクリプション)をAPIで実装する方法を解説。Stripeの課金サイクル・プラン管理・解約・プロレーション(日割り)の実装方法を中心に紹介します。

#サブスクリプション#定期課金#Stripe#SaaS

サブスクリプション決済の重要性

SaaS・動画配信・音楽配信・電子書籍・フィットネスなど、多くのビジネスモデルが「サブスクリプション(定期課金)」を採用しています。毎月安定した収益が見込めるため、ビジネスの予測可能性が高まります。一方、一回決済に比べて実装の複雑度が上がるため、信頼性の高いAPIを正しく使いこなすことが重要です。

サブスクリプション実装の主要コンセプト

製品(Product)と価格(Price)

Stripeではまずサービス内容を「Product」として登録し、そのProductに対して「Price」(金額・課金頻度・通貨)を設定します。1つのProductに複数のPrice(月払い・年払い・ライトプラン・プロプラン等)を紐づけられます。

顧客(Customer)

サブスクリプションを管理するためにユーザーをStripeの「Customer」オブジェクトとして作成します。Customerにはメールアドレスやデフォルトの支払い方法、税務情報などを保存します。自社のユーザーIDとStripeのCustomer IDをデータベースで関連付けて管理します。

支払い方法の保存(SetupIntent)

サブスクリプションでは、将来の課金のためにカード情報を事前に保存します。SetupIntentを使うことで、実際の決済は行わずにカード情報を安全に保存できます。3Dセキュア認証もこのタイミングで実施します。

Stripeでのサブスクリプション実装手順

  1. Stripeダッシュボードで Product と Price を作成(または API で作成)
  2. ユーザー登録時に Stripe Customer を作成し、自社DBに Customer ID を保存
  3. SetupIntent でカード情報を保存(3Dセキュア対応)
  4. サブスクリプション作成:stripe.subscriptions.create()を呼び出し
  5. Webhook でサブスクリプションの状態変更を受け取る
  6. invoice.paid イベントで課金成功を確認してアクセス権を付与
  7. 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を適切に実装して課金状態とアクセス権を同期させることが、安定した運用の鍵です。

よくある質問

Q.サブスクリプションの日割り計算(プロレーション)とは何ですか?

月の途中でプランを変更した場合に、残り日数に応じて料金を日割り計算する仕組みです。例えば月額1,000円のプランを月途中でアップグレードした場合、残り期間分を日割りで計算して差額を請求します。Stripeでは自動でプロレーションを計算します。

Q.サブスクリプションのトライアル期間はどうやって実装しますか?

Stripeではサブスクリプション作成時にtrial_period_daysパラメーターを指定するだけで、指定日数間のトライアル期間を設定できます。トライアル期間中は課金されず、期間終了後に自動的に有料プランに移行します。

Q.決済失敗時(カード切れ等)はどのように対応すればよいですか?

Stripeの場合、決済失敗時は自動リトライ(スマートリトライ)が行われます。複数回失敗するとWebhookでinvoice.payment_failedイベントが発行されます。このWebhookを受け取ってユーザーへのメール通知・アクセス制限などの処理を実装します。Stripeの顧客ポータルを使えばユーザー自身でカード情報を更新できます。

関連記事