JP_Stripes Deep Dive Vol.12
コア機能開発に集中するためのStripe Checkout活用法JP_Stripes Deep Dive Vol.12@hidetaka_devUpdated Jan 2023
View Slide
SaaSの力 で「やるべきこと」に集中できる環境を作ろう2
1. なぜStripe Checkoutなのか2. Checkoutをより便利に使いこなす3. Elementsとの使い分けやマイグレーションAgenda3JP_Stripes Deep Dive Vol.12
Hidetaka Okamoto(岡本秀高)Developer Advocate @ Stripe💬 @hidetaka_dev✉ [email protected]JP_Stripes宮崎👋 Hello!
JP_Stripes Deep Dive Vol.12State of Checkout● APAC5カ国● Stripeを利用するEC● 各国上位100サイトを対象
1. なぜStripe Checkoutなのか2. Checkoutをより便利に使いこなす3. Elementsとの使い分けやマイグレーションAgenda6JP_Stripes Deep Dive Vol.12
7なぜStripe Checkoutなのかリダイレクト or 埋め込み
8
const session = await stripe.checkout.sessions.create({mode: 'subscription',line_items: [{price: 'price_xxxx',quantity: 1}],success_url: 'https://example.com',cancel_url: 'https://example.com'})return res.status(200).json({url: session.url})なぜStripe Checkoutなのか数行のコードでURLを発行
line_items: [{price_data: {unit_amount: 1000,currency: 'jpy',product_data: {name: 'XX様専用プラン'}},quantity: 1}],なぜStripe Checkoutなのかアドホックな料金・商品設定
1. 日本・諸外国の法改正や規制対応2. 決済フォームのローカライズや最適化3. 売上を増やすための追加施策Checkoutで削減できる運用コスト11なぜStripe Checkoutなのか
12なぜStripe Checkoutなのか2022年施行の特商法改正への対応
1. 日本・諸外国の法改正や規制対応2. 決済フォームのローカライズや最適化3. 売上を増やすための追加施策Checkoutで削減できる運用コスト13なぜStripe Checkoutなのか
なぜStripe Checkoutなのか複数通貨での価格設定
なぜStripe CheckoutなのかIPアドレスや住所に基づく決済手段の表示
1. 日本・諸外国の法改正や規制対応2. 決済フォームのローカライズや最適化3. 売上を増やすための追加施策Checkoutで削減できる運用コスト16なぜStripe Checkoutなのか
なぜStripe Checkoutなのかクロスセルアップセル
なぜStripe Checkoutなのかカード情報を登録せずにトライアルを開始
なぜStripe Checkoutなのかカート内の商品数を変更
1. 決済の完了(カード):checkout.session.completed2. 決済の完了(コンビニ決済等非同期型):checkout.session.async_payment_succeeded3. 決済の失敗(コンビニ決済など非同期型):checkout.session.async_payment_failed4. セッションの有効期限切れ:checkout.session.expired注文・決済情報はWebhookで受け取る20なぜStripe Checkoutなのか
なぜStripe CheckoutなのかZapierなどでノーコードに
決済周りの開発だけでなく改善のためのリソースもCheckoutで効率化22
1. なぜStripe Checkoutなのか2. Checkoutをより便利に使いこなす3. Elementsとの使い分けやマイグレーションAgenda23JP_Stripes Deep Dive Vol.12
Stripeをより便利に使いこなす請求・顧客情報マイページ
Stripeをより便利に使いこなすノーコードに対応
const session = await stripe.checkout.sessions.create({mode: 'payment',+ invoice_creation: {+ enabled: true,+ },…Stripeをより便利に使いこなす一回切りの決済で請求書・領収書を発(有料)
Stripeをより便利に使いこなすAWSとのシステム連携
Stripe & Stripe Checkoutで決済に関わるワークフロー を手軽に実装28
1. なぜStripe Checkoutなのか2. Checkoutをより便利に使いこなす3. Elementsとの使い分けやマイグレーションAgenda29JP_Stripes Deep Dive Vol.12
const elements = stripe.elements({ {theme: 'stripe',}, clientSecret });const paymentElement = elements.create("payment", {layout: "tabs",});paymentElement.mount("#payment-element"); Elementsとの使い分け埋め込み型決済フォーム
Elementsとの使い分けデザインのカスタマイズappearance: {theme: 'none',variables: {colorPrimary: '#2b8501'fontFamily: 'Osaka',borderRadius: '4px',spacingGridColumn: '50px'},rules: {'.Tab': {border: '1px solid #E0E6EB',boxShadow: '0px 1px 1px rgba(0, 0, 0, 0.03), 0px 3px6px rgba(18, 42, 66, 0.02)',},'.Tab:hover': {color: 'var(--colorText)',},
Elementsとの使い分けカスタマイズされたSubscription
33Elementsへのマイグレーション Elementとの使い分け
1. Payment Intent / Subscriptionデータを作成2. カートの情報をDBに保存し、決済と紐付け3. Stripe.jsでフォームを描画4. Stripe.jsで決済確定処理5. Webhookで決済完了・失敗時のWFを実行Elementsへのマイグレーション34JP_Stripes Deep Dive Vol.12
1. 「カートの中身」を外部DBで保存2. Webhookイベントの種類が一部変わる3. Customer Portalを使うには、Invoicingが必要マイグレーション時の注意点35JP_Stripes Deep Dive Vol.12
簡単ではないが、不可能でもない36
● リンク型で、すぐに始める● リダイレクト型で、低工数・コストに組み込む● 埋め込み型で、デザイン・ブランドに馴染む組み込みを行う規模や予算・リソースに応じた決済機能開発37SaaSという「巨人の肩」を乗りこなす
SaaSの力 でECの「やるべきこと」に集中できる環境を作ろう38