Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

EightでStripeのトライアル機能を導入した話

日が暮れるのが早くなり、各所でイルミネーションが始まり一年の終わりを感じる今日この頃、みなさんどうお過ごしでしょうか?
どうも技術本部Eight Engineering Unit Product Devグループの平石です。今日はEightで展開している中小企業向け名刺管理サービス「Eight Team」にて無料トライアル機能を開発した話をしようと思います。

なお、本記事は Sansan Advent Calendar 2024, JP_Stripes Advent Calendar 2024 6日目の記事です。

背景

Eight Teamでは決済システムにStripeを導入しています。
導入の背景については以前こちらの記事にて執筆しておりますので、ご興味あればご覧ください。

buildersbox.corp-sansan.com

Eight Teamではサービスを利用する際にはクレジットカード情報を入力、もしくは銀行振込を選択してStripe側で請求が走るとともにサービスを開始していました。一方で、Eight Teamを本導入の前に試してみたいという顧客のニーズに対応した機構が存在していないため、利用状況を事前に想定したい顧客のニーズに応えられていませんでした。そこで無料トライアル機能を開発したいというプロジェクトが走り始めました。

Stripeトライアル機能の導入

docs.stripe.com

StripeではTrialの機能が実装されており、Subscription*1作成時にこれに沿う形で実装しました。

Stripe::Subscription.create({
  customer: 'cus_****',
  items: [{price: 'price_****'}],
  trial_end: 14.days.since.to_i,
  trial_settings: {
    end_behavior: { missing_payment_method: 'cancel' },
  }
})

trial_endを指定すると、その期間中はStripe上で指定した商品の課金が発生せず、有効なSubscriptionを作成できます。またtrial_settings.end_behavior.missing_payment_methodでトライアル日までに支払い方法が設定されなかった場合のSubscriptionの挙動を指定できます。
今回はトライアル終了時に支払い方法が設定されていない場合は解約処理を走らせるという機能仕様にしたためcancelを指定しています。トライアル終了から契約まで猶予期間を設けたい場合はpauseを選択するとトライアル終了後もSubscriptionを削除せず、支払い方法が設定されるまで停止できます。またmissing_payment_methodcreate_invoiceを指定するとトライアルが終了と同時に請求書を作成し本契約に自動的に進められます。

Stripeトライアルにおける注意点

トライアル終了リマインド通知の実装

トライアルを提供する場合は、無料であるかどうかにかかわらず、カードネットワークの要件に準拠する必要があります。これには、無料トライアルを提供する場合や、最初の数カ月間は割引料金で顧客に請求し、その後自動的に通常レートを請求する場合などが含まれます。Stripeのトライアル機能を使用する際は、 次のようにStripeダッシュボードでメッセージの設定を有効にして、要件を満たすようにすることができます。
https://docs.stripe.com/billing/subscriptions/trials?locale=ja-JP#compliance

と記載があるようにトライアル機能を提供する場合はカードネットワークの要件により、トライアルが終了する前に何らかの方法で顧客に通知する必要があります。Stripeのデフォルト機能で自動的に1週間前にメールを送る機能があり、これを使えば要件を満たせますが、カスタマイズできる箇所がメール内ボタンのリンク先のみとなっています。プロダクト側でメールなどの通知をしたい場合はcustomer.subscription.trial_will_endというイベントがトライアル終了3日前に発火するようになっているので、このイベントをhookに通知処理等を実装する必要があります。

Subscriptionのmissing_payment_methodによっては支払い方法を銀行振込に設定できない

Eight Teamでは支払い方法として銀行振込を選択できるのですが、トライアル開始時にmissing_payment_methodcancelまたはpausedになっているとSubscriptionは銀行振込を支払い方法に設定できません。トライアルから地続きで契約開始したい、かつ支払い方法として銀行振込を設定したいという場合にはSubscriptionのmissing_payment_methodcreate_invoiceに更新しながら支払い方法を銀行振り込みに設定する必要があります

Stripe::Subscription.update(
  stripe_subscription_object_id,
  {
    collection_method: 'send_invoice',
    payment_settings: {
      payment_method_types: %w[customer_balance card],
    },
    trial_settings: {
      end_behavior: { missing_payment_method: 'create_invoice' },
    }
  },
)

まとめ

この記事では、Eight Teamによるトライアル機能開発におけるStripeのトライアル機能の導入・実装方法・注意点を紹介しました。
Stripeのトライアル機能は比較的容易に活用でき、プロダクトにトライアル機能を導入する際には特に大きな障壁もなく、またトライアルから本契約に進む際にもクレジットカード決済のみであればとても容易に実装できます。リマインドメールをカスタマイズしたい場合や銀行振込を支払い方法に設定する場合もプロダクト側で解決できるようになっています。

最後に、Eightでは一緒に働いてくださるエンジニアを募集中です。
ぜひお気軽にご連絡、お待ちしております!
media.sansan-engineering.com

© Sansan, Inc.