SummerEye part14 -Firebase Stripe連携-
決済手段としてStripeを導入します。
Firebaseでユーザ管理をしているので、こちらに決済のステータスを保存します。
実装する機能は以下の通り。(それぞれ別途記事にまとめたのでリンクを貼っておきます)
- Firebase Authenticationと連携してユーザ登録、ログイン、ログアウト
- Firebase Cloud FirestoreにFirebaseのID、StripeのID、決済のステータスを保持
- Stripeで決済(定期購読)
- 6ファイル以上のリネームを行う場合は以下を判定
- ログインしている
- Firebase上の決済ステータスがTrue
実際のアプリ上での動きは、以下の通り(Firebase、StripeのIDをそれぞれfb_id、st_idと表記)
①登録
- Firebase Authenticationにemail、passwordでユーザ作成(fb_idを取得)
- Stripeにemailで顧客アカウント作成(st_idを取得)
- Firebase Cloud Firestoreのuserにfb_id、st_id、status(決済の状態)を追加
②ログイン
- Firebase Authenticationにemail, passwordでログイン(fb_idを取得)
- Firebase Cloud Firestoreのuserからfb_idで検索(st_id、statusを取得)
③決済(要ログイン)
- Stripeのフォームにemail、card情報を入力して決済
- Firebase Cloud Firestoreのuserのstatusを変更
目次
Stripe 定期支払い実装
アプリの設計的に月額課金が望ましかったので定期支払いプランを作成しました。
Firebase Cloud Firestoreの実装
こちらにまとめました。
Firebase Authentication、Firebase Cloud Firestore、Stripeの連携
①登録
Firebase AuthenticationとStripeのIDがFirebase Cloud Firestoreに格納されています。
②ログイン
ちょっとエラーが出たので解決しました。
firebase.initialize_app()
メソッドは一回だけ実行すればよかったので、関数の外に出しました。
③決済
まずStripe側の作業としてカード情報を追加し、サブスクリプションを作成。
次にFirebase Cloud Firestoreのドキュメントを更新(planをfreeからbasicに変更)します。
このとき、セッションに保存したfb_idを使えばドキュメントを検索できるので、これを更新対象にすれば良いと思っていたのですが、実際には違いました。
なので、セッションにドキュメントのIDも扱うように変更し、更新の際はこのIDからDocumentReferenceオブジェクトを取得し、updateメソッドを実行するようにしました。
おまけ
これで登録から決済のフローが実装できました。
細かいところの調整は残りますが、一仕事やり終えた感があります。
今回Firebase Realtime Databaseではなくてベータ版のFirebase Cloud Firestoreを使ってみました。
今年の10月くらいにリリースされたばかりで情報も少なく大変でしたが、逆に公式のリファレンスをしっかり読み解くことになったので理解が進みました。いい勉強になりました。
NoSQLを使いこなせるほど使い込んではいないですが、雰囲気RDBとの違いがわかりました。
今後、NoSQLの強みを理解することで今後の選択の幅が広がりました。
次回
あとはデザインこちょこちょすればリリースできそう。