Slide 1

Slide 1 text

Stripe CLIͰ Webhook APIΛ ޮ཰తʹ։ൃ͢Δ JP_Stripes Deep Dive vol.5 2021/04/22 Hidetaka Okamoto

Slide 2

Slide 2 text

TL;DR • Stripe Webhookͷಈ࡞ςετʹ͸ɺPublicͳAPI͕ඞཁ • Stripe CLIΛ࢖͏͜ͱͰɺlocalhostͷAPIΛ઀ଓͰ͖Δ • trigger/listenͳͲɺWebhookͷςετ/σόοά޲͚ίϚϯυ͕๛෋ • Stripe΍ΔͳΒWebhook -> Webhook΍ΔͳΒStripe CLI -> Stripe΍ΔͳΒStripe CLIʂ

Slide 3

Slide 3 text

Agenda • Stripe WebhookΛ࢖͏ϝϦοτ • Stripe Webhook APIͷ։ൃ͸େมʁ • Stripe CLIͰWebhook APIͷϩʔΧϧ։ൃΛޮ཰Խ • σϓϩΠޙͷσόοάɾϞχλϦϯάʹ΋Stripe CLI

Slide 4

Slide 4 text

Agenda •Stripe WebhookΛ࢖͏ϝϦοτ • Stripe Webhook APIͷ։ൃ͸େมʁ • Stripe CLIͰWebhook APIͷϩʔΧϧ։ൃΛޮ཰Խ • σϓϩΠޙͷσόοάɾϞχλϦϯάʹ΋Stripe CLI

Slide 5

Slide 5 text

ΦϯϥΠϯܾࡁ͸Πϕϯτۦಈ • ʮܾࡁʹ੒ޭͨ͠৔߹ʯಛఆͷϝʔϧ΍ૢ࡞Λ࣮ߦ͢Δ • ʮఆظ՝ۚͷ੥ٻ͕ࣦഊͨ͠ͷͰʯαʔϏε੍ݶͱϢʔβʔ௨஌ • ʮܾࡁֹۚ߹ܭ / ܖ໿ظ͕ؒҰఆ஋Λ௒͑ͨͷͰʯಛయΛ෇༩ • ʮෆ৹ͳܾࡁ͕ݟ͔ͭͬͨͷͰʯࣾ಺Slackʹ௨஌ • etc…

Slide 6

Slide 6 text

Stripe্ͷग़དྷࣄΛ ಠࣗͷαʔϏεʹ࿈ܞ͢Δ࢓૊Έ Ὃ Stripe Webhook

Slide 7

Slide 7 text

DigitalcubeͰͷWebhookར༻ྫʢҰ෦ʣ • ఆظ՝ۚͷܾࡁ͕ࣦഊͨ͠৔߹ɺαʔϏεʹ੍ݶΛઃఆ • FailedܥΠϕϯτ͕ൃੜͨ͠৔߹ɺSlackʹ௨஌ • ղ໿(subscriptions.delete)࣌ʹɺؔ࿈σʔλͷ࡟আ • ϓϥϯมߋޙɺαʔϏε্ݶ΁ͷ఍৮͕ͳ͍͔ͷ֬ೝ • etc…

Slide 8

Slide 8 text

Agenda • Stripe WebhookΛ࢖͏ϝϦοτ •Stripe Webhook APIͷ։ൃ͸େมʁ • Stripe CLIͰWebhook APIͷϩʔΧϧ։ൃΛޮ཰Խ • σϓϩΠޙͷσόοάɾϞχλϦϯάʹ΋Stripe CLI

Slide 9

Slide 9 text

StripeͷαʔϏε͔Β HTTPSϦΫΤετΛ౤͛Δ Ὃ API͸Internetʹ ެ։͞Ε͍ͯΔඞཁ͕͋Δ

Slide 10

Slide 10 text

Before Stripe CLI • APIαʔόʔΛςετ༻ʹσϓϩΠʢsls deploy -s webhookʣ • Stripe Dashboard͔ΒWebhookΠϕϯτΛखಈͰൃՐ • αʔόʔͷϩάΛ؂ࢹͯ͠ɺҙਤͨ͠ಈ࡞ʹͳ͍ͬͯΔ͔֬ೝ • ໰୊͕͋Ε͹ɺϩʔΧϧͰमਖ਼ͯ͠࠶σϓϩΠ • ʮ࣮૷ -> ςετʯʹ͕͔͔࣌ؒΔ

Slide 11

Slide 11 text

ngrokΛ࢖͏ͱ͍͏ख΋͋Δʹ͸͋Δ • ϩʔΧϧʹཱͯͨAPIαʔόʔʹ֎෦͔Β઀ଓͰ͖ΔΑ͏ʹ͢ΔSaaS • ແྉ࿮͕͋ΔͷͰɺϫʔΫγϣοϓ΍νϡʔτϦΞϧͰΑ͘ొ৔͢Δ • ແྉ൛͸઀ଓ਺্ݶ΍URL͕ຖճมΘΔͳͲͷ੍ݶ͕͋Δ • ʮStripe CLI͕࢖͑ͳ͍ʯͳΒɺngrokΛ࢖͏ͷ΋ͻͱͭ

Slide 12

Slide 12 text

Agenda • Stripe WebhookΛ࢖͏ϝϦοτ • Stripe Webhook APIͷ։ൃ͸େมʁ • Stripe CLIͰWebhook APIͷϩʔΧϧ։ൃΛޮ཰Խ • σϓϩΠޙͷσόοάɾϞχλϦϯάʹ΋Stripe CLI

Slide 13

Slide 13 text

stripe listenͰ ϩʔΧϧAPIʹ ϦΫΤετதܧ # ϩʔΧϧͷAPIαʔόʔΛىಈ % npm start # ϩʔΧϧͷAPIαʔόʔ͕localhost:4242ͷ৔߹ % stripe listen \ -—forward-to localhost:4242/webhook > Ready! Your webhook signing secret is whsec_xxxxxxxxxxxxx (^C to quit) # Webhook༻ͷॺ໊γʔΫϨοτΛ؀ڥม਺ʹઃఆ % export STRIPE_WEBHOOK_SECRET=whsec_xxxxxxxxxxxx x • DashboardͰͷ Webhookొ࿥ • ઐ༻ॺ໊Secretͷൃߦ • HTTPSϦΫΤετͷதܧ

Slide 14

Slide 14 text

Stripe CLIͰWebhookΠϕϯτΛखಈൃՐ • ʮstripe trigger [WEBHOOK_EVENT_NAME]ʯͰൃՐՄೳ • test؀ڥଆʹ࣮σʔλ͕࡞ΒΕɺWebhookΠϕϯτ͕ൃՐ͢Δܗ • productͷશ݅औಘͳͲΛ͍ͯ͠Δ৔߹ʹ͸ཁ஫ҙ • ࡞੒͞ΕΔσʔλͷத਎͸ઃఆෆՄೳ • stripe products createͳͲɺݸผίϚϯυͰ࡞੒͢΂͠

Slide 15

Slide 15 text

Before Stripe CLI • APIαʔόʔΛςετ༻ʹσϓϩΠʢsls deploy -s webhookʣ • Stripe Dashboard͔ΒWebhookΠϕϯτΛखಈͰൃՐ • αʔόʔͷϩάΛ؂ࢹͯ͠ɺҙਤͨ͠ಈ࡞ʹͳ͍ͬͯΔ͔֬ೝ • ໰୊͕͋Ε͹ɺϩʔΧϧͰमਖ਼ͯ͠࠶σϓϩΠ • ʮ࣮૷ -> ςετʯʹ͕͔͔࣌ؒΔ

Slide 16

Slide 16 text

After Stripe CLI • APIαʔόʔΛϩʔΧϧͰىಈ • stripe listen —forward-to localhost:XXXXͰStripeͱ઀ଓ • whsec_xxxͷ஋Λ؀ڥม਺ʹอଘ(or ߋ৽) • stripe trigger [EVENT_NAME]ͰΠϕϯτΛൃՐͯ͠ಈ࡞֬ೝ • ϩʔΧϧ্ͰWebhook APIͷ࣮૷͕Ͱ͖Δ

Slide 17

Slide 17 text

Stripe CLIͰͷϩʔΧϧ։ൃͷ஫ҙ఺ • listen͸σϑΥϧτͩͱCatch ALLʢશΠϕϯτड͚෇͚Δʣ • ʮ૝ఆ͍ͯ͠ͳ͍Πϕϯτʯ͕ૹΒΕͯ͘Δέʔε͕͋ΓಘΔ • test؀ڥΛ࢖͍ͬͯΔΞϓϦ͕Stripe APIʹϦΫΤετΛૹͬͨ৔߹ • DashboardͰ୭͔͕࡞ۀΛͨ͠৔߹ • ผͷ࡞ۀऀ͕stripe triggerίϚϯυΛ࣮ߦͨ͠৔߹ • —events EVENT_NAMEϑϥάͰड͚෇͚ΔΠϕϯτΛߜΖ͏

Slide 18

Slide 18 text

Agenda • Stripe WebhookΛ࢖͏ϝϦοτ • Stripe Webhook APIͷ։ൃ͸େมʁ • Stripe CLIͰWebhook APIͷϩʔΧϧ։ൃΛޮ཰Խ • σϓϩΠޙͷσόοάɾϞχλϦϯάʹ΋Stripe CLI

Slide 19

Slide 19 text

Stripe CLIͰWebhookΠϕϯτͷϩά؂ࢹ • ʮstripe listenʯͰൃੜͨ͠ΠϕϯτͷϩάΛ؂ࢹͰ͖Δ • σϑΥϧτͰ͸ʮ͍ͭɺͲΜͳΠϕϯτ͕ɺͲͷIDͰʯͷΈग़ྗ • flagΛ࢖ͬͯΠϕϯτͷߜΓࠐΈ΍JSONग़ྗ΋Մೳ • Ϣχοτςετ / E2Eςετʹ࢖͍͍ͨͳΒɺ—print-jsonϑϥά • —liveϑϥάͰຊ൪σϓϩΠޙͷΠϕϯτϩά؂ࢹ΋Ͱ͖Δ

Slide 20

Slide 20 text

্: σϑΥϧτ Լ: JSONग़ྗ % stripe --project-name test listen 2021-04-21 15:43:52 --> payment_intent.created [evt_1IiZmtDHnG67uihbHble0dMs] 2021-04-21 15:44:39 --> customer.created [evt_1IiZneDHnG67uihbz8CqDMXa] 2021-04-21 15:44:39 --> customer.deleted [evt_1IiZneDHnG67uihb1fkojgcc] % stripe --project-name test listen \ --print-json { "id": "evt_1IiZoVDHnG67uihb6NbbKShX", "object": "event", "api_version": "2020-03-02", "created": 1618987531, "data": { "object": { "id": "cus_JLGLsScTeXQ2Ve", "object": "customer", "address": null, "balance": 0, …

Slide 21

Slide 21 text

Appendix 1: ஌ͬಘ Stripe CLI ίϚϯυ • stripe fixture: JSONͰෳ਺ͷAPIίʔϧΛॱংཱ࣮ͯͯߦࢦࣔͰ͖Δ • stripe logs: StripeʹૹΒΕͨAPIίʔϧΛ؂ࢹʢonly test modeʣ • stripe open: Dashboard΍DocumentϖʔδΛϒϥ΢βͰ։͚Δ • stripe samples: github.com/stripe-samplesͷΞϓϦΛcloneͰ͖Δ

Slide 22

Slide 22 text

Appendix 2: Webhook͸ ॺ໊ݕূͰ อޢ͠Α͏ • Stripe͔ΒͷϦΫΤετ ͷΈॲཧ͢΂͖ • webhooks.constructEventΛ࢖ͬ ͯϦΫΤετΛݕূ • whsec_xxx͸AWSͷ Secret ManagerͳͲͰอޢ͠Α͏

Slide 23

Slide 23 text

Need more information?

Slide 24

Slide 24 text

https://zenn.dev/hideokamoto/books/e961b4bad92429

Slide 25

Slide 25 text

Thanks! • Stripe WebhookΛ࢖͏ϝϦοτ • Stripe Webhook APIͷ։ൃ͸େมʁ • Stripe CLIͰWebhook APIͷϩʔΧϧ։ൃΛޮ཰Խ • σϓϩΠޙͷσόοάɾϞχλϦϯάʹ΋Stripe CLI