Firestore における Stripe Extensions の整理
1. Run Payments with Stripe
これは Stripe の Checkout session を作成したりしつつ、同時に Firestore の customers
コレクション(users
コレクションでも可。構成で指定できる)や products
コレクション配下にドキュメントを作成してくれる拡張機能。
2. Send Invoices using Stripe
これは Firestore の invoices
コレクション配下にドキュメント作成をトリガーに、Stripeを通じて顧客に請求書を発行してくれるもの。
Stripe を使っていれば Stripe が請求書を作成して送信してくれるが、従量課金など課金料をシステム(Firestore)しか知らないような複雑な請求を行うときに使うらしい(ChatGPT調べ)。
注意点
専用 Web SDK
これらは専用の Web SDK を使って Firestore に書き込みする必要がある。
Invoice の Webhook 通知
厄介なのは1の設定で案内されている Stripe 側の Webhook 送信イベントに「Invoce」系が Optional としてあるが、2の拡張機能をインストールしてないと 200 OK でもレスポンスがエラーとなる。
Value for argument "documentPath" is not a valid resource path. Path must be a non-empty string.
余談: RevenueCat について
RevenueCat Extension との併用
RevenueCat の Enable In-App Purchases with RevenueCat 拡張機能を併用している場合、この拡張機能も顧客コレクション配下にドキュメントを作成するので、Stripe と競合しないように Stripe 側では users
配下にドキュメントを作成して、こっちでは customers
配下にするなど使い分けないと後々管理がめんどうそう。
RevenueCat にも Stripe との連携があるが、モバイルアプリとの課金情報やEntitlement(機能の利用資格)を統合して管理することができるものの、当然売上に加算されて RevenueCat の課金量は上がるし、RevenueCat 側の Web billing アプリ(RevenueCat自体が提供する決済サービス)を有効にしないと Stripe の課金情報を取得できなかったりとイマイチ使いにくい。
つまり基軸は Stripe にして、モバイルアプリ側で RevenueCat を経由せずに Stripe のサブスクリプションステータスを取得できるようになったら、RevenueCat からは Stripe 連携を外すという方針がよさそうである。
Webhook 通知の invoice.updated
また RevenueCat の Stripe Webhook 通知(server-to-server notification)を構成して、 Stripeの決済情報取得の時短を図る場合、Stripeから送る Webhook の送信イベントの「invoice.updated」はオプショナルとして記載されてないが、2の「Send Invoices using Stripe」拡張機能をインストールしていないとこれもエラーになる。
テスト環境
さらに、このWebhook通知は Stripe のテスト環境用(RevenueCat側で Sandbox データとして計測される)の Stripe Webhook Secret 設定箇所がない。つまり一度サービスが本番環境にデプロイされれば、以後この Server-to-server notification をテストすることができず、Stripe 側でWebhookを送信しても当然400エラーとなる。
他にも RevenueCat はテスト環境専用の設定がなく、結局 dev, staging に RevenueCat 拡張機能をインストールしてテストできないでいる。
参考
Stripe Event types list
Discussion