🏷️

Stripeが新しくリリースした料金表の実用性

2022/10/04に公開約3,900字

料金表とは

Stripe では現在プランの表示、登録が可能な料金表と、顧客が自身の支払い管理をするためのカスタマーポータルをノーコードでサイトに埋め込めるようになっています。


このような料金表がノーコードで埋め込める

これにより以下の手順ですぐにサブスク型のスモールビジネスを開始できます。

  1. 商品や値段を作成
  2. 料金表を作成
  3. 顧客にカスタマーポータルのURLを提供

料金表には一般的なUI(機能)をノーコードで有効にできます。

  • 人気のプラン
  • 年額によるお得さの演出
  • プランごとの特徴リスト(AプランとBプランでそれぞれできることの羅列)
  • 無料トライアル

StripeとサービスのDBで商品データを同期させつつ上記のUIを自分で実装するのは結構大変です。またStripe上の価格とUIの価格の間に一時的に差分が生じ、顧客に混乱を生む恐れもあります。

料金表は色、角丸、フォントぐらいはカスタマイズできるのである程度サイトの雰囲気に寄せることもできます。今後スモールスタートしたい個人プロダクトやオンラインサービスではかなり有用な選択になると思います。

現状の課題

とはいえ現状は以下の課題があり、まだ実用的とはいえません。

  • ゲストユーザーを弾くことができない
  • プラン登録ごとにStripe上に新規顧客が作られる
  • 現状のステータスを判断できない

以下詳細です。

ゲストユーザーを弾くことができない

ゲストユーザーを弾くことができないので、非ログインユーザーが閲覧するページの料金セクションに掲載することができません。正確にはできますが、後述する通りかなりアナログな運用になります。

決済は一般的にフルフィルメントと呼ばれる決済後の処理が付随します。課金したユーザーを自動的にDiscordに招待&ロールを付与したり、有料メンバーの権限を付与する、などが決済後処理の代表例です。

フルフィルメントを行うにはどのユーザーが登録したのか? を知る必要があります。料金表は client-reference-id というプロパティでその情報を受け取ることができますが、それが空の場合でも登録できてしまいます。空の場合ログインページに飛ばすといったオプションもないので、ゲストユーザーがLPから登録してしまった場合得体の知れない誰かが課金した状態となり、フルフィルメントができません。

Stripeダッシュボードから新規顧客を目視でチェックし、手動で権限付与等を行う必要があります。またStripeの顧客とプロダクトのユーザーが関連付いてないので解約時や決済がコケた際も同様に手作業で権限削除などを行う必要があります。

プラン登録ごとに新規ユーザーが作られる

料金表にサービスのユーザーIDやStripeの顧客IDを渡したとしても内部的に登録状態が紐づけられることはありません。したがって料金表経由で登録する場合、毎回新規顧客が作られます。最悪なケースとしてはユーザーが気づかずに何度もプラン登録ステップを踏んだ場合、そのステップの数だけStripe上に顧客が作られ、課金が重複して開始されます。

client-reference-id でユーザーIDを渡せる場合、フルフィルメントの過程でアプリ側で重複登録を判定できるのでただちにStripe API経由で課金をキャンセルする対応は可能ですが、おそらくユーザーには課金スタートメールが重複して飛ぶこととなり精神衛生上(およびリスク的に)よろしくないです。

現状のステータスを判断できない

前述の課題は料金表が顧客IDを解釈しないことが根本的な原因になっています。client-reference-idにStripeの顧客IDを渡しても単なる文字列としてフルフィルメント時に返却されるだけです。

そのため、既に課金中のユーザーが料金表を表示した際に以下のような対応ができません。

  • 加入中のプランにラベルをつけたり登録ボタンを非活性にする(あるいは解約ボタンにする)
  • 前後のプランのボタンラベルをダウングレード、アップグレードといった相対的な表記にする

したがって前述したように、毎回新規顧客として新たな課金がはじまってしまいます。プラン変更、解約に関してはそもそもカスタマーポータルの領域なので加入中のユーザーはアプリのUIレベルで表示を切り替え、カスタマーポータルへのリンクを表示することで一応対応は可能ですが、その場合最初に述べたようにLPや料金ページに情報として掲載することはできません。

どのようなシーンで使えるのか

以下のシーンでは料金表を使っても良いと思います。

顧客が極端に少ない

そもそも想定するユーザーが極めて少ない少人数制のオンラインレッスンなどではアナログ管理でも十分対応が追いつくので料金表をLPにおいて、ダッシュボード経由で顧客管理ができると思います。(そもそも極端に少ない場合毎月銀行振込してもらうことでStripe手数料を回避できますが)

万が一ユーザーが重複登録してしまった場合ダッシュボードからポチッと返金できます。

フルフィルメントが必要ない場合

この場合LPに野ざらしにしても問題ありませんが登録後必要な対応がすべて手作業である点に注意してください。

ログイン中のユーザーにのみ料金表を表示する

この場合フルフィルメントを確実に行えます。が、重複課金の課題は未解決なのでフルフィルメントかマニュアル運転で弾く必要があります。

サンプルプロダクト

以上を踏まえ、カスタマーポータルと(現状穴だらけの)料金表を利用した簡易的なサブスク立ち上げサービスをサンプルで作ってみました。Stripeノーコードスタックのショーケースとしてご参照ください。

https://subskun.vercel.app/

管理画面から簡易的な宣伝用LPを立ち上げることができ、カスタマーポータルURLと料金表ID、Stripe公開キーを設定することでノーコードでLPのローンチと料金表の表示と課金、顧客自身による支払い管理ができるようにしてあります。

課金周りをStripeに丸投げすることで(Tailwind UIのおかげもあり)24時間ほどの稼働でサブスク立ち上げサービスができてしまいました。下手なスクラッチよりStripeに丸投げした方が安心感があるので、料金表の課題が解決すれば上記のようなプロダクトを本格的かつクイックにリリースできると思います。

未来予想

すでにSNSで集客チャネルがある方が上記のようなサイトビルダーを使って料金表とカスタマーポータルURLを埋め込んだLPを作ってサクッとサブスクビジネスをはじめるケースがわりと増えると思います。Mentaやサロンプラットフォームは手数料が痛いので自分で集客できる人にとってはStripeやPayPalが有力な選択肢になると思います。

料金表の課題が解決すればZapierなどと連携して「登録後Discordでロール自動付与」などの運用自動化も可能になると思います。

参考

料金表を使わない場合 Payment Links という選択肢もありますが、同様にフルフィルメントには難があるようです。

Payment Linksを利用した場合、同じメールアドレスでも、申し込みの度に新しいCustomerデータがStripeに作成されます。

https://qiita.com/hideokamoto/items/ad672c3d7141c6e1430a?utm_campaign=post_article&utm_medium=twitter&utm_source=twitter_share

脚注
  1. 顧客IDをiframenに渡すのはセキュリティ的に無理というアンサーもあるのでどのような対応になるかは未知数 ↩︎

Discussion

ログインするとコメントできます