2024-12-22
先日Stripeでサブスクリプションを実装する機会がありました。 今回はStripeのサブスクリプションを実装した時に調べたことをまとめようと思います。
要件は以下のものでした。
費用の引きおとすタイミングが翌日の1日にしたいという要件があったため、Stripe CheckoutというStripeが作った支払いフォームを使うことができませんでした。 そのため、Stripeの決済フォームはStripe Elementsを使用しました。
フロントエンド
バックエンド
Stripeでは、Stripeの処理をする前に顧客セッションを作成する必要があります。 顧客セッションを作成することで、Stripeのライフサイクルを管理することができます。
顧客セッションを作成する方法は2つあります。
今回は支払いフォームを入力したらそのまま支払いをするということではなく、支払いフォームを入力したら初期費用と、サブスクリプションを作成するという流れにしたかったため、SetupIntentsを使用しました。
Stripe Elementsを使って、クレジットカード情報を入力するフォームを作成します。 Stripe Elementsを使うことで、クレジットカード情報を入力するフォームを簡単に作成することができます。
フォームを入力したら、初期費用、サブスクリプションを作成するエンドポイントを作成します。
初期費用は、以下のように請求書作成のAPIを使って作成します。
auto_advance
: trueにすることで、automatically_finalizes_at
で指定した日になると自動的に請求書を確定することができます。
デフォルトだとfalseで、請求書を自動で確定することができないため、注意が必要です。collection_method
: charge_automatically
とすることで、請求日に請求書を自動で支払うことができます。
ただ、自動で支払うためにはAユーザーのデフォルトのクレジットカード情報を登録しておく必要があります。サブスクリプションは、以下のようにサブスクリプションを作成するAPIを使って作成します。
billing_cycle_anchor
: サブスクリプションの開始日を指定することができます。proration_behavior
: サブスクリプションの料金を更新した時に、差額をどうするかを指定することができます。
今回はnone
にすると、差額を請求しません。これでStripeを使って初期費用、サブスクリプションを実装することができました。