Upgrade to Pro — share decks privately, control downloads, hide ads and more …

定期料金と従量課金を組み合わせたサブ スクリプション型サービスを作る/jp-stripe-02

定期料金と従量課金を組み合わせたサブ スクリプション型サービスを作る/jp-stripe-02

2ee9db3a5b6c492acf66ec14c8a5d8dc?s=128

Serverless Operations

June 09, 2021
Tweet

More Decks by Serverless Operations

Other Decks in Technology

Transcript

  1. Serverless Operations / Sonu Kim ఆظྉۚͱैྔ՝ۚΛ૊Έ߹Θͤͨαϒ εΫϦϓγϣϯܕαʔϏεΛ࡞Δ

  2. ϓϩϑΟʔϧ ۚɹઋ༏Kim Sonu ʮ૝͍Λ͙͢ʹܗʹͰ͖Δʯ͜ͱͰ ɹαʔόʔϨεʹίϛοτ͍ͯ͠Δ ϑϩϯτΤϯυʗόοΫΤϯυΛ໰Θͣɺ ָ͘͠αʔϏεΛ࡞Δͷ͕ੜ͖͕͍

  3. αʔόʔϨεͰ Ϋϥ΢υͷՁ஋Λ࠷େݶʹ Serverless Operations ͸͜Ε·ͰάϩʔόϧͷୈҰઢͰ ഓ͖ͬͯͨΫϥ΢υٕज़ʢ"84ʵΞϚκϯ΢ΣϒαʔϏεʣͷ ๛෋ͳ࣮੷ͱ஌ݟΛ׆͔͠ɺ͓٬͞·ͷαʔόʔϨε ʹؔ͢Δ͞·͟·ͳ՝୊Λղܾ͠·͢ɻ ձࣾ঺հ serverless.co.jp

  4. ຊ೔ͷςʔϚ ఆظྉۚͱैྔ՝ۚΛ૊Έ߹ΘͤͨྉۚମܥΛ4USJQFΛ࢖ͬ ࣮ͯݱ͢Δํ๏Λ۩ମతʹ঺հ "84ͰͷαʔόʔϨεͳγεςϜߏ੒ͷύλʔϯΛ঺հ

  5. ࣮ݱ͍ͨ͜͠ͱͷ֓ཁʢαϒεΫϦϓγϣϯʴैྔ՝ۚʣ #BTJDϓϥϯ݄ "EWBODFEϓϥϯ݄ &OUFSQSJTFϓϥϯ݄ "1*ݺͼग़͠ճ਺ ʢ"1*6TBHFʣ

  6. ࣮ݱ͍ͨ͜͠ͱͷ֓ཁʢαϒεΫϦϓγϣϯʴैྔ՝ۚʣ &OUFSQSJTFϓϥϯ݄ "1*ݺͼग़͠ճ਺ ʢ"1*6TBHFʣ ຖ݄ܾ·ͬͨྉۚΛ੥ٻ "1*ͷݺͼग़͠ճ਺ʹԠͯ͡ ྉۚΛܭࢉͯ͠੥ٻ #BTJDϓϥϯ݄ "EWBODFEϓϥϯ݄

  7. ࣮ݱ͍ͨ͜͠ͱͷ֓ཁʢαϒεΫϦϓγϣϯʴैྔ՝ۚʣ &OUFSQSJTFϓϥϯ݄ "1*ݺͼग़͠ճ਺ ʢ"1*6TBHFʣ ຖ݄ܾ·ͬͨྉۚΛ੥ٻ "1*ͷݺͼग़͠ճ਺ʹԠͯ͡ ྉۚΛܭࢉͯ͠੥ٻ #BTJDϓϥϯ݄ "EWBODFEϓϥϯ݄ αϒεΫ͚ͩͰͳ͘ɺ

    ैྔ՝ۚ෼·Ͱूܭͯ͠ ੥ٻʹ൓өͤ͞ΔΑ͏ͳ ࣮૷ରԠ͕ඞཁʹͳͬͯ͘Δ αʔϏε։࢝·Ͱྉۚମܥ͕ ֬ఆ͠ͳ͍౳ɺޙ͔Βॊೈʹ ՝ۚϞσϧΛมߋͰ͖ΔΑ͏ʹ͍ͨ͠
  8. ࣮ݱ͍ͨ͜͠ͱͷ֓ཁʢαϒεΫϦϓγϣϯʴैྔ՝ۚʣ #BTJDϓϥϯ݄ "EWBODFEϓϥϯ݄ &OUFSQSJTFϓϥϯ݄ "1*ݺͼग़͠ճ਺ ʢ"1*6TBHFʣ ຖ݄ܾ·ͬͨྉۚΛ੥ٻ "1*ͷݺͼग़͠ճ਺ʹԠͯ͡ ྉۚΛܭࢉͯ͠੥ٻ  料金体系

    → ”継続” として商品登録 ・段階的/数量ベースの料金体系として商品登録 ・Stripeへ使用量を報告し、毎月の請求に反映させる
  9. αϯϓϧͷ঎඼Λొ࿥͢Δ ᶃ4BOECPYr#BTJD1MBOɿҰൠతͳఆظߪೖ޲͚ͷ঎඼Λొ࿥ ᶄ4BOECPYr"1*6TBHFɿ"1*ݺͼग़͠ճ਺౳ɺैྔ՝ۚ޲͚ͷ঎඼Λొ࿥

  10. αϯϓϧͷ঎඼Λొ࿥͢Δ ᶃ4BOECPYr#BTJD1MBOɿҰൠతͳఆظߪೖ޲͚ͷ঎඼Λ૝ఆ  料金体系モデル: “標準の料金体系” “継続”

  11. αϯϓϧͷ঎඼Λొ࿥͢Δ ᶄ4BOECPYr"1*6TBHFɿ"1*ݺͼग़͠ճ਺౳ɺैྔ՝ۚ޲͚ͷ঎඼Λొ࿥  料金体系モデル: “段階的な料金体系” ैྔ՝ۚ޲͚ͷྉۚମܥͱͯ͠͸ ʮஈ֊తʯͱʮ਺ྔϕʔεʯͷ ̎छྨ͕͋Δ 具体的な従量課金の料金体系を設定

  12. αϯϓϧͷ঎඼Λొ࿥͢Δ ᶄ4BOECPYr"1*6TBHFɿ"1*ݺͼग़͠ճ਺౳ɺैྔ՝ۚ޲͚ͷ঎඼Λొ࿥  料金体系モデル: “段階的な料金体系” 具体的な従量課金の料金体系を設定 ैྔ՝ۚ޲͚ͷྉۚମܥͱͯ͠͸ ʮஈ֊తʯͱʮ਺ྔϕʔεʯͷ ̎छྨ͕͋Δ  例えば1ユニットあたりの金額を算定する方式として  「1-100回目は◦◦円、101-200回目は◦◦円」と段階的に

     異なる料金を積み上げていく(段階式)  「合計回数100回以下の場合◦◦円、合計回数200回以下の場合は  ◦◦円、合計回数が201回以上の場合は◦◦円」と  合計数ベースで単価を決める(数量ベース)
  13. ࢖༻ྔΛܭଌ͢ΔΦϓγϣϯΛ༗ޮԽ ᶄ4BOECPYr"1*6TBHFɿ"1*ݺͼग़͠ճ਺౳ɺैྔ՝ۚ޲͚ͷ঎඼Λొ࿥ 「Usage is metered(使用量が計測されます)」にチェック 「Charge for metered usage by(計測された使用量に基づく請求)」

    → 適宜システム仕様に合わせて選択
  14. ࢖༻ྔΛܭଌ͢ΔΦϓγϣϯΛ༗ޮԽ ᶄ4BOECPYr"1*6TBHFɿ"1*ݺͼग़͠ճ਺౳ɺैྔ՝ۚ޲͚ͷ঎඼Λొ࿥ 「Usage is metered(使用量が計測されます)」にチェック 「Charge for metered usage by(計測された使用量に基づく請求)」

    → 適宜システム仕様に合わせて選択 ˞ޙ΄Ͳઆ໌͢Δʮ࢖༻ྔͷใࠂʯ ͕Ͱ͖ΔΑ͏ʹͳΔ ˞࣮ࡍʹ֤Ϣʔβʔͷ࢖༻ྔΛTUSJQF ͷ"1*ܦ༝ͰϨϙʔτ͢Δ͚ͩͰɺ঎ ඼ొ࿥࣌ʹઃఆͨ͠ྉۚςʔϒϧʹ߹ Θͤͯ՝ֹ͕ۚ੥ٻॻʹ൓ө͞ΕΔ
  15. ސ٬ٴͼαϒεΫϦϓγϣϯͷొ࿥ ސ٬ɺࢧ෷৘ใɺαϒεΫϦϓγϣϯΛొ࿥ ˞͓ࢼ͠Ͱܾࡁొ࿥ը໘ͷσϞΛ࡞ͬͯΈ͍ͨ৔߹ɺެࣜͷ$IFDLPVUαϯϓϧ͕ศར e// https://github.com/stripe-samples/checkout-single-subscription e// server/node/server.js L.50 - econst

    session = await stripe.checkout.sessions.create({ mode: 'subscription', payment_method_types: [ 'card' ], line_items: [ { price: '{PRICE_ID_PLAN}', quantity: 1 }, { price: '{PRICE_ID_API_USAGE}' } ], // ...
  16. ސ٬ٴͼαϒεΫϦϓγϣϯͷొ࿥  先程登録した2つの商品 (定額課金・従量課金)が 表示されている ˞Χʔυ൪߸͸TUSJQFςετϞʔυ ઐ༻ͷ൪߸Λ࢖༻

  17. αϒεΫϦϓγϣϯొ࿥௚ޙʹ੥ٻΛ֬ೝ͢Δͱɾɾɾ ˞ఆظྉۚʢ#BTJD1MBOʣͷྉ͕ۚ൓ө͞Ε͍ͯΔ

  18. ैྔ՝ۚͷ࢖༻ྔΛใࠂ͢Δɹ e[request sample] ePOST /v1/subscription_items/:subscription_item_id/usage_records eauthorization: Bearer {SECRET_API_KEY} econtent-type: application/x-www-form-urlencoded

    etimestamp=1614752111&quantity=250&action=set e[response sample] e200 OK e{ e "subscription_item": "xxx", e "quantity": 250, e "timestamp": 1615097751, e // ... e} ैྔ՝ۚ .FUFSFE #JMMJOH ͷֹۚΛ൓өͤ͞ΔͨΊʹɺސ٬͕ར༻ͨ͠ྔ Ϣ χοτ Λ਺஋ͱͯ͠4USJQFʹૹ৴ʢ˞6TBHF3FDPSET"1*ʣ ˞1BUIύϥϝʔλʹސ٬ͷఆظࢧ෷ͷ μογϡϘʔυը໘͔ΒऔಘͰ͖Δ ʮαϒεΫϦϓγϣϯΞΠςϜ*% ʢTJ@YYYʣʯΛࢦఆͯ͠਺ྔΛૹ৴ ˞4USJQF"1*ʹ͸3BUF-JNJU͕͋ΔͷͰ஫ҙ ʢMJWFNPEFͰSFBE XSJUFQFSTFDPOEʣ  IUUQTTUSJQFDPNEPDTSBUFMJNJUT
  19. ैྔ՝ۚͷ࢖༻ྔΛใࠂ͢Δ ࢖༻ྔΛใࠂͨ͠ޙͷ੥ٻ৘ใΛ֬ೝ

  20. ΞυϗοΫʹ੥ٻ߲໨ͱֹۚΛ௥Ճ͢Δํ๏΋͋Δ αϒεΫϦϓγϣϯͷظؒதʹ࣍ճͷ੥ٻ߲໨Λਵ࣌௥ՃͰ͖Δ"1*΋͋Δ 
 ݮֹ΋ՄೳͰɺΞυϗοΫʹ࣍ճ੥ٻͷֹۚΛௐઅɾਫ਼ࢉ͢Δͱ͍ͬͨ࢖͍ํ͕Ͱ͖ͦ͏  IUUQTTUSJQFDPNEPDTCJMMJOHJOWPJDFT TVCTDSJQUJPOBEEJOHVQDPNJOHJOWPJDFJUFNT

  21. (FPMPOJB ΦϯϥΠϯ஍ਤαʔϏε ͷࣄྫ ྉۚମܥ͕ྲྀಈతͩͬͨΓɺैྔ՝ۚΛεΫϥονͰ։ൃ͢Δෛ୲͕͋ͬͨ ˠมߋՄೳͰॊೈͳ࢓૊Έͷ࣮ݱͱ࣮૷ෛ୲Λܰݮ ΧϜϯ΀ϲε ĖຌᲦό⑲τ ܭଌσʔλͷ&5-ॲཧΛܦͯ%ZOBNP%#΁อଘ ᑿᠭᅗΤᏄຓ -BNCEB

    "QQMJDBUJPO 4 "UIFOB 'BSHBUF %ZOBNP%# -BNCEB 4 %ZOBNP%# 4USFBNT e{ e “subject_id”: "...", e “subscription_item”: "...", e "quantity": 100, e "timestamp": 1615097751, e // … e} ˞ࣄྫ঺հهࣄ͸ͪ͜ΒIUUQTTFSWFSMFTTDPKQCMPH
  22. "84αʔόʔϨεͳγεςϜߏ੒ͷྫ ܭଌϩάʢNFUSJDMFWFM౳ʣΛऩू͠ɺ&5-ॲཧΛܦͯ%ZOBNP%#ʹ֨ೲɺ %ZOBNP%#4USFBNTΛར༻ͯ͠ॱ࣍࢖༻ྔΛૹ৴͢Δ ΧϜϯ΀ϲε ĖຌᲦό⑲τ ܭଌσʔλͷ&5-ॲཧΛܦͯ%ZOBNP%#΁อଘ ᑿᠭᅗΤᏄຓ -BNCEB "QQMJDBUJPO 'BSHBUF

    %ZOBNP%# -BNCEB 4 %ZOBNP%# 4USFBNT ,JOFTJT'JSFIPTF e{ e “subject_id”: "...", e “subscription_item”: "...", e "quantity": 100, e "timestamp": 1615097751, e // … e}
  23. ·ͱΊ ఆظྉۚͷ঎඼ͱैྔ՝ۚͷ঎඼Λ྆ํొ࿥͠ɺαϒεΫϦϓγϣϯ͢Δ ैྔ՝ۚͷ঎඼͸࢖༻ྔΛܭଌ͢ΔΦϓγϣϯΛ༗ޮԽ͠ɺ 
 "1*ܦ༝Ͱ࢖༻ྔΛใࠂ͢Δͱ੥ٻʹ൓ө͞ΕΔ ैྔ՝ۚʹ൐͏՝ۚϩδοΫΛࣗલͰ࣮૷͢Δඞཁ͕ͳ͘ɺ4USJQFΛ࢖͍͜ͳͦ͏ αʔόʔϨεͷྑ͞Λ׆͔ͯ͠ॊೈͳઃܭΛ໨ࢦ͠·͠ΐ͏ ˞ຊ೔ͷ͓࿩͸ͪ͜Βͷϒϩάهࣄͷ಺༰Λݩʹ͍ͯ͠·͢ɻ߹Θͤͯ͝ࢀߟ͍ͩ͘͞ɻ 
 IUUQTTFSWFSMFTTDPKQCMPH

  24. serverless.co.jp