Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
後付けで 従量課金プランの 提供を開始した話 / 20210609-jp_stripes
Search
Hidetaka Okamoto
June 09, 2021
Technology
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
後付けで 従量課金プランの 提供を開始した話 / 20210609-jp_stripes
JP_Stripes Online
Hidetaka Okamoto
June 09, 2021
More Decks by Hidetaka Okamoto
See All by Hidetaka Okamoto
OpenAI APIで API Changelogを要約してみた話 / chatgpt-osaka-1
hideokamoto
0
730
コミュニティ運営から 中の人に変わって感じたこと
hideokamoto
0
160
Developerが Developer Advocateになった話 / dev-rel-meetup-tokyo-71
hideokamoto
0
400
Jamstack開発者のための App Runner入門
hideokamoto
1
560
WordPressでの webサイト制作2022 / ngk2022s
hideokamoto
0
500
JavaScript(TypeScript)で メディアサイトを インフラから構築する方法 / jsconf-jp-2021
hideokamoto
2
4.5k
AWS上でStripeを利用したアプリをより安全にデプロイする方法 /jaws-pankration-2021
hideokamoto
1
260
Shifter Headlessと Headless WordPressの紹介
hideokamoto
0
2.3k
Stripe & Next.js + AWS Amplify で会員 + 定期課金機能 / JP_Stripes20210903
hideokamoto
7
3.3k
Other Decks in Technology
See All in Technology
QA4AI 2026-Oct 生成AI時代の品質保証
tokuty
1
850
パスキーの自動テストはどこまでいけるのか
teamlab
PRO
0
170
無理せず続ける、子育てエンジニアの学び
codmoninc
PRO
0
820
⾮構造化データを価値に変える AI エージェント基盤とその組織
ivry_presentationmaterials
0
190
AI × アーキテクト 第1・2章|生成AIの課題とアーキテクトの素養
daidaidai
0
140
触りたくないデータに、どう触るか AI時代のRBACアクセスガバナンス
ivry_presentationmaterials
0
250
AI駆動で「他アプリの音を加工できる」アプリを作った
satomasahiro2005
0
130
「Docker Desktop不要の時代」は 来たのか?
ueponx
0
750
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
450
二歩目のフロントエンド・ウェブアクセシビリティ
camiha
2
530
アウトプット初心者、半年間のふりかえり
4o1sobblue
0
420
WasmをRustにする
sansantech
PRO
0
250
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Abbi's Birthday
coloredviolet
4
10k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
43k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
600
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
560
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
Fireside Chat
paigeccino
43
4.1k
Marketing to machines
jonoalderson
1
5.9k
Transcript
ޙ͚Ͱ ैྔ՝ۚϓϥϯͷ ఏڙΛ։࢝ͨ͠ JP_Stripes Online Hidetaka Okamoto #JP_Stripes
TL;DR • StripeͰैྔ՝ۚϓϥϯͷఏڙͱͯ؆୯ • / ྉۚͷొͱɺSubscriptionͷ࡞ɺ͋ͱ༻ྔͷొ • ෳͷIntervalʢظؒʣΛఏڙ͢Δ߹ɺैྔ՝ۚͷճऩ࣌ظʹҙ •
Stripe BillingͷྉۚλΠϓ͕෯͍ͷͰɺϏδωεاըʹ͍͔ͦ͏ #JP_Stripes
Agenda • ैྔ՝ۚͰͷΦϓγϣϯαʔϏεͷఏڙ։࢝ • ैྔ՝ۚϓϥϯΛఏڙ͢ΔͨΊʹͬͨ͜ͱ • Ϗδωε্ͷஅͰSubscriptionମܥΛม͑ͨ • ʢؾ͔ͮ͵ؒʹʣStripe Billingͷྉۚମܥ͕૿͑ͯͨ
#JP_Stripes
Agenda • ैྔ՝ۚͰͷΦϓγϣϯαʔϏεͷఏڙ։࢝ • ैྔ՝ۚϓϥϯΛఏڙ͢ΔͨΊʹͬͨ͜ͱ • Ϗδωε্ͷஅͰSubscriptionମܥΛม͑ͨ • ʢؾ͔ͮ͵ؒʹʣStripe Billingͷྉۚମܥ͕૿͑ͯͨ
#JP_Stripes
CDNసૹྔͷ ैྔ՝ۚΦϓγϣϯఏڙ։࢝ #JP_Stripes https://www.getshifter.io/ja/cdn-pay-as- you-go-option-is-available/
#JP_Stripes • ֹ݄Ͱͷٻ • 1GB͋ͨΓ0.18 USD • UIͰʮΦϯɾΦϑʯͷΈ
ͳͥैྔ՝ۚʁ • σʔλసૹྔແݶʹ૿͑ΔՄೳੑ͕͋Δ • ࠷্Ґϓϥϯͷར༻Ͱա͢ΔϢʔβʔ͕ొ • ͜Ε·ͰʮXGB = $YʯͷΑ͏ͳݸผܾࡁΛ݄ຖʹ͍ͬͯͨ •
ʮͲΕ͚ͩফඅ͢Δ͔ʯͷ༧ଌ͕Ϣʔβʔʹඞཁ • ʮ͔͑ͯΒܖʯͰαΠτμϯ͕Ұ࣌తͰൃੜ͢Δ • ʮ͚ͬͨͩٻʯͷΦϓγϣϯͰɺ ༧ଌͷखؒͱμϯϦεΫΛճආ #JP_Stripes
શ෦ैྔ՝ۚʹ͠ͳ͍ͷʁ • Shifterᴈ໌ظɺैྔ՝ۚͩͬͨ • Stripe Billing͕ैྔ՝ۚରԠલͷྗٕ࣮ • ʮͲΕ͚ͩٻ͞ΕΔ͔Θ͔Βͳ͍ʯ͕ʮબΕͳ͍ཧ༝ʯʹ • ʮ݄16υϧɺແྉϓϥϯ͋Γʯͷํ͕ΘΔࢢʹ͍ͨ
• ैྔ՝ۚ => ύοέʔδՁ֨ => ύοέʔδ + ैྔ՝ۚ #JP_Stripes
Agenda • ैྔ՝ۚͰͷΦϓγϣϯαʔϏεͷఏڙ։࢝ • ैྔ՝ۚϓϥϯΛఏڙ͢ΔͨΊʹͬͨ͜ͱ • Ϗδωε্ͷஅͰSubscriptionମܥΛม͑ͨ • ʢؾ͔ͮ͵ؒʹʣStripe Billingͷྉۚମܥ͕૿͑ͯͨ
#JP_Stripes
#JP_Stripes • plan(price)Ͱొ • 1୯Ґ = 1GBʹઃఆ • ૯ܭʮ࠷େʯΛར༻
Subscriptionͷૢ࡞ී௨ͷPriceͱશ͘ಉ͡ const subscription = await stripe.subscriptions.create({ customer: 'cus_XXXXX', items: [
{price: 'price_XXXXXXXX'}, ], }); const subscription = await stripe.subscriptions.update(‘sub_xxxx’, { items: [ {price: 'price_XXXXXXXX'}, ], }); #JP_Stripes
ैྔ՝ۚ Subscription create/update ͚ͩͰ1ԁٻͰ͖ͳ͍ #JP_Stripes
createUsageRecordͰʮͬͨྔʯΛొ͢Δ const usageRecord = await stripe.subscriptionItems .createUsageRecord( ‘si_XXXXX', { quantity:
100, timestamp: 1571252444, action: ‘set’ } ); #JP_Stripes
setͩͱ૯ྔɺincrementͩͱՃࢉͰॲཧ͞ΕΔ const usageRecord = await stripe.subscriptionItems .createUsageRecord( ‘si_XXXXX', { quantity:
100, timestamp: 1571252444, action: ‘set’ } ); #JP_Stripes
༻ྔͷूܭํ๏ 1. Amazon EventBridgeͰAWS StepFunctionsΛݺͼग़͢Πϕϯτ࡞ 2. ରͷpriceΛؚΉSubscriptionΛશऔಘ 3. subscriptionຖʹฒྻͰूܭॲཧΛ࣮ࢪ 4.
ूܭ݁ՌΛAWS DynamoDBʹอଘ 5. StripeͷUsageRecords APIʹར༻ྔΛొ #JP_Stripes
Price IDΛ͑ʮରsubscriptionʯ͚ͩҾ͚Δ const subscriptions = await stripe.subscriptions .list({ price: ‘price_xxx’
}); #JP_Stripes
100݅͑ΔͷͰɺ࣮ࡍʹ࠶ؼతͳ࣮ʹ async listSubscriptionRecuecive(priceId, items = [], startingAfter) { const {data:
subscriptions} = await stripe.subscriptions .list({ starting_after: startingAfter, price: priceId, }) const mergedSubscriptions = [...items, ...subscriptions] if (subscriptions.length < 1) { return mergedSubscriptions } const lastSubscriptionId = subscriptions[subscriptions.length - 1].id return listSubscriptionRecuecive(planId, mergedSubscriptions, lastSubscriptionId) } #JP_Stripes
༻ྔGBͰϢʔβʔʹදࣔ • ʮϕʔεϓϥϯͷ༻ྔΛ͍͑ͯΔ࣌ʯ͚ͩٻ͞ΕΔੑ࣭ • ʮԿGB͍ͬͯΔ͔ʯ͕Φϓγϣϯͷٻൃੜલ͔ΒॏཁʹͳΔ • ୯Ձมߋෳྉۚͷఏڙ༧ఆͳ͍ͨΊɺ subscriptionItems.listUsageRecordSummaries͍ͬͯͳ͍ • DynamoDBʹهͨ͠༻ྔGBΛදࣔ͠ɺ
ඞཁͳΒ$0.18/GBΛϑϩϯτͰܭࢉ #JP_Stripes
Agenda • ैྔ՝ۚͰͷΦϓγϣϯαʔϏεͷఏڙ։࢝ • ैྔ՝ۚϓϥϯΛఏڙ͢ΔͨΊʹͬͨ͜ͱ • Ϗδωε্ͷஅͰSubscriptionମܥΛม͑ͨ • ʢؾ͔ͮ͵ؒʹʣStripe Billingͷྉۚମܥ͕૿͑ͯͨ
#JP_Stripes
ैྔ՝ۚΦϓγϣϯɺ ϗεςΟϯάͷSubscriptionͱ ผʹSubscriptionΛ࡞ #JP_Stripes
ैྔ՝ۚͩΖ͏͕Stripe BillingͰͷѻ͍ಉ͡ const subscription = await stripe.subscriptions.create({ customer: 'cus_XXXXX', items:
[ {price: 'price_XXXXXXXX'}, ], }); const subscription = await stripe.subscriptions.update(‘sub_xxxx’, { items: [ {price: 'price_XXXXXXXX'}, ], }); #JP_Stripes
ͨͩ͠ɺ Intervalʢظؒʣͱ Currencyʢ௨՟ʣ ౷Ұ͠ͳ͍ͱμϝ #JP_Stripes
FYI: ଟ௨՟Subscription͔͢͠Δͱɾɾɾʁ https://stripe.com/docs/invoicing/additional-features/multiple-currencies
ෳͷInterval͕ొ͢ΔͨΊɺ༷ͱͯ͠ಠཱ • ຊདྷͳΒɺ1 Subscriptionʹ·ͱΊͨํָ͕ • ֹ݄ͨͩ͠ <-> ֹͷΓସ͕͑͘͠ͳΔ • ֹͷैྔ՝ۚΦϓγϣϯग़ͨ͘͠ͳ͔ͬͨ
• ಠཱͨ͠Subscriptionʹ͢Δ͜ͱͰɺInterval ( Currency )ڝ߹Λճආ • DynamoDBʹattributeΛ1͚ͭͨͩ͠Ͱղܾ #JP_Stripes
ٻλΠϛϯάΛἧ͑ΔͨΊͷ billing_cycle_anchor await stripe.subscriptions.create({ customer: customerId, items: [{ price: priceId,
}], billing_cycle_anchor: moment().add(1, ‘month’) .startOf('month').unix() }) #JP_Stripes
ࠓఏڙ͍ͯ͠ΔSubscriptionʹ ैྔ՝ۚΛՃ͢Δʹ • Currency / Interval͕1ͭͳΒͦͷ··subscriptionʹՃָ͕ • ෳ͋Δ߹ɺʮैྔ՝ۚͰग़͢currency / intervalʯΛܾΊΑ͏
• ରԠͨ͠PriceΛશͯἧ͑ͳ͍ͳΒɺಠཱͨ͠Subscription͕ແ • ٻλΠϛϯάಉ͡λΠϛϯάʹἧ͓͑ͯ͘ͷ͕ • ɾɾɾͱ͍͏͜ͱ͕͋ΔͷͰɺbilling_cycle_anchor͓ͬͯ͜͏ #JP_Stripes
Agenda • ैྔ՝ۚͰͷΦϓγϣϯαʔϏεͷఏڙ։࢝ • ैྔ՝ۚϓϥϯΛఏڙ͢ΔͨΊʹͬͨ͜ͱ • Ϗδωε্ͷஅͰSubscriptionମܥΛม͑ͨ • ʢؾ͔ͮ͵ؒʹʣStripe Billingͷྉۚମܥ͕૿͑
ͯͨ #JP_Stripes
ஈ֊తͳՁ֨ઃఆ
ྔϕʔεͷՁ֨ઃఆ
ύοέʔδ୯Ґͷྉۚମܥ 10Ϣχοτ·Ͱ$10 #JP_Stripes
࡞ΕΔྉۚମܥͷ छྨ͕૿͍͑ͯΔ ↓ ఏڙͰ͖ΔϏδωεͷछྨ͕ ૿ͤΔΑ͏ʹͳΔ
ϝʔϧͰߋ৽ใΛ ͬ͟ͱݟͰ͖Δ Developer Digest #JP_Stripes
https://stripe.dev/
StripeΛཧղ͢Δ StripeΛ͍͜ͳ͢ ↓ ఏҊɾ࣮Ͱ͖Δ ΦϯϥΠϯϏδωεͷ෯͕͕Δ
[એ] 6/26 WordCamp Japan 2021ͰWP with SaaS https://japan.wordcamp.org/2021/session/autumn02/
Thanks! • StripeͰैྔ՝ۚϓϥϯͷఏڙͱͯ؆୯ • / ྉۚͷొͱɺSubscriptionͷ࡞ɺ͋ͱ༻ྔͷొ • ෳͷIntervalʢظؒʣΛఏڙ͢Δ߹ɺैྔ՝ۚͷճऩ࣌ظʹҙ •
Stripe BillingͷྉۚλΠϓ͕෯͍ͷͰɺϏδωεاըʹ͍͔ͦ͏ #JP_Stripes