Stripeではじめての決済
by
acomagu
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
Stripe で はじめての決済 191008 #JP_Stripes in 会津 株式会社デザイニウム 伊藤勇希 @acomagu ● なぜ Stripe を採用したの? ● サポートの充実度 ● Stripe + Auth0 でデータベースレスア プリケーション ● 多重決済の防止 - Agenda -
Slide 2
Slide 2 text
自己紹介 - 伊藤勇希 @acomagu (あこまぐ) - 会津大学 学部4年 - 最近の趣味: 音ゲー / VTuber - 最近好きな技術: Go / TypeScript / Linux
Slide 3
Slide 3 text
実装期間
Slide 4
Slide 4 text
実装期間
Slide 5
Slide 5 text
調査(1日)で何をしたか ほしい物 - 既存のアプリに支払いを組み込みたい - Payment Request API を使ってみたい 結果 - Payment Request API の PG(PSP) として Stripe を採用
Slide 6
Slide 6 text
なぜ Stripe なのか? - 日本の会社だとどうやら GMOPG が多い模様 - とりあえずデファクトに乗っておくのが小規模アプリの基本...?
Slide 7
Slide 7 text
なぜ Stripe なのか? - 日本の会社だとどうやら GMOPG が多い模様 - とりあえずデファクトに乗っておくのが小規模アプリの基本...? でも: Stripe で特に困らなそう - Developer Friendly - 小規模ビジネスにコスト面で優しい
Slide 8
Slide 8 text
なぜ Stripe なのか? - 日本の会社だとどうやら GMOPG が多い模様 - とりあえずデファクトに乗っておくのが小規模アプリの基本...? でも: Stripe で特に困らなそう - Developer Friendly - 小規模ビジネスにコスト面で優しい じゃあ: なぜ GMOPG が使われてる? - 2018 年まで JCB が使えなかったからでは...?
Slide 9
Slide 9 text
なぜ Stripe なのか? - 日本の会社だとどうやら GMOPG が多い模様 - とりあえずデファクトに乗っておくのが小規模アプリの基本...? でも: Stripe で特に困らなそう - Developer Friendly - 小規模ビジネスにコスト面で優しい じゃあ: なぜ GMOPG が使われてる? - 2018 年まで JCB が使えなかったからでは...? →採用
Slide 10
Slide 10 text
No content
Slide 11
Slide 11 text
https://stripe-payments-demo.appspot.com/
Slide 12
Slide 12 text
プロトタイプで何をしたか とりあえず動くものは数時間でできた! あとの6日間なにしてたの...?
Slide 13
Slide 13 text
プロトタイプで何をしたか とりあえず動くものは数時間でできた! あとの6日間なにしてたの...? - iPhone X(iOS 13) のみで Apple Pay ができ ないという問題が発覚 - サポートに連絡 - まずチャットで連絡→すぐ返信あり - よくわからないというのでメールで再送 - 「公式のデモページが iPhone X で動か ない」
Slide 14
Slide 14 text
結果... 「v2 のリファレンスサイトが動かない場合はこちらで調査できます」とのこと → v2 のライブラリを使うと問題なく動くことが発覚 → (とりあえず) v2 と v3 のライブラリを併用することに決定 プロトタイプで何をしたか
Slide 15
Slide 15 text
結果... 「v2 のリファレンスサイトが動かない場合はこちらで調査できます」とのこと → v2 のライブラリを使うと問題なく動くことが発覚 → (とりあえず) v2 と v3 のライブラリを併用することに決定 その他: - メールサポートは英語でも日本語でもいいらしい - IRC の人は「英語のほうが早く帰ってくると思うよ」と言ってたが自分たちの場合は あまり変わりなかった プロトタイプで何をしたか
Slide 16
Slide 16 text
No content
Slide 17
Slide 17 text
アプリケーション実装のとき何をしたか - Stripe Elements(v3) と Apple Pay Button(v2) のインターフェースを統一 - 既存の Vue アプリケーションに組み込み - Wrapper Components という考え方に従う - サーバーの書き換え
Slide 18
Slide 18 text
要件をもういちど - バスチケット(定期券)管理アプリケーション - ユーザーはチケットを購入することができる - 購入したチケットは有効期限がある - 有効期限内のチケットには「使用する」のボタンが表示され、押してバスの運転手に 見せることで何度でも使うことができる
Slide 19
Slide 19 text
サーバーの書き換え - AWS Lambda + API Gateway - Authorizer で Auth0 のユーザーを認証(JWT) - AWS CDK でリソース管理 - TypeScript - Stripe SDK の型が定義されていて良い - テストを書く - Stripe 公式の REST Mock は使用せず、独自にモックを用意
Slide 20
Slide 20 text
DB? 今回は「データベースを利用しない」ことを設計の段階で決定 理由: 自分たちのデータベースと Stripe のログの一貫性を保つのがとても大変なため (分散トランザクション... 結果整合性... うっ頭が) Stripe ならこういう設計が可能そう... と予想しやってみた
Slide 21
Slide 21 text
データベースを用意しないチケット管理 App チケットを購入: Metadata に Auth0 のユーザーIDを入れて決済(Create Charge)する チケットが利用期間内か?: 該当のユーザーの決済履歴(Charges)を取得し、有効期限を逆算して期限内かどうか を返す
Slide 22
Slide 22 text
データベースを用意しないチケット管理 App チケットを購入: Metadata に Auth0 のユーザーIDを入れて決済(Create Charge)する => 83 LOC チケットが利用期間内か?: 該当のユーザーの決済履歴(Charges)を取得し、有効期限を逆算して期限内かどうか を返す => 101 LOC
Slide 23
Slide 23 text
できた!! (旧デザイン)
Slide 24
Slide 24 text
今後やっていきたいこと
Slide 25
Slide 25 text
Customer の利用 - 現在決済履歴を取得するとき、ユーザーID でクエリすることが出来ない - Stripe の「ユーザーモデル」である Customer を利用することで、「誰が決 済したのか」というのを Stripe 上で明確にすることができ、決済履歴のクエ リも可能になる
Slide 26
Slide 26 text
多重決済防止 - 「ボタンを押せなくする」だけじゃ不十分...! - レスポンスが失敗したら...? - Idempotency Key を利用したべき等性の確保が 必須 Strype では: Payment Intents を利用した統合的な Idempotency Key の利用 Request Retry…? Response
Slide 27
Slide 27 text
Payment Intents…?
Slide 28
Slide 28 text
↓ここで Idempotency Key を作成 フロントに渡しておく Payment Intents…?
Slide 29
Slide 29 text
↓ここで Idempotency Key を作成 フロントに渡しておく Payment Intents…?
Slide 30
Slide 30 text
Stripeのいいところ: 便利な機能がたくさんあるので 段階的にシステム化していける (リリース初期は運用でカバーしていくこともできる)
Slide 31
Slide 31 text
まとめ - Stripe はプロトタイプがまじで速攻でできる - いろいろとスタートアップに優しい - 手数料安い - 開発者に優しい - 段階的にいい感じにできる(運用でカバーからシステムでカバーへ) - チャットサポート便利! - データベース使わなくても意外と...? - Payment Intents でべき等な API へ
Slide 32
Slide 32 text
❤ Stripe ❤ ありがとうございました!