Webhookçµ±åã®ãããã°: 眲åããªãã©ã€ããªãã¬ã€ãã€ãã³ããã°
眲åã®æšæºåããªãã©ã€ã®å®å šãªåŠçããªãã¬ã€ã®æå¹åãæ€çŽ¢ããããã€ãã³ããã°ã®ä¿æã§Webhookçµ±åããããã°ããæ¹æ³ãåŠã¶ã

ãªãWebhookçµ±åã¯ãã©ãã¯ããã¯ã¹ã«ãªããããã®ã
Webhookã¯ãäœããèµ·ãããšãã«äžã€ã®ã¢ããªãããªãã®ã¢ããªãåŒã³åºãä»çµã¿ã«ãããŸãããæ±ºæžãããã€ãããæ¯æãæåããéãããã©ãŒã ããŒã«ããæ°ããéä¿¡ããäŒãããCRMããååŒãæŽæ°ãããããšå ±åãããã·ã³ãã«ã«èŠããåé¢ãäœããå£ãããšãã«éããç»é¢ããªããæç¢ºãªå±¥æŽããªããå®å šã«åå®è¡ããæ¹æ³ããªãããšã«æ°ã¥ããŸãã
ã ããWebhookã®åé¡ã¯ã€ã©ã€ã©ããŸãããªã¯ãšã¹ãã¯å°çããïŒãŸãã¯ããªãïŒãããªãã®ã·ã¹ãã ã¯åŠçããïŒãŸãã¯å€±æããïŒãæåã®ã·ã°ãã«ã¯ã顧客ããã§ãã¯ã¢ãŠãã§ããªããããã¹ããŒã¿ã¹ãæŽæ°ãããªãããšãã£ããããŸããªãã±ããã§ããããšãå€ãã§ãããããã€ãããªãã©ã€ãããšéè€ãçºçãããããããŸããããã€ããŒãã®ãã£ãŒã«ããå€ãããšãäžéšã®ã¢ã«ãŠã³ãã ãã§ããŒãµãå£ããããšããããŸãã
ããããçç¶:
- éä¿¡ãããªãã£ãã®ãåŠçãããªãã£ãã®ãããããªããæ¶ãããã€ãã³ã
- äºéé ä¿¡ã«ãã£ãŠäºéã®å¯äœçšïŒè«æ±æžãäºæãã¡ãŒã«ãäºéãã¹ããŒã¿ã¹å€æŽãäºåïŒ
- æ°ãããã£ãŒã«ããæ¬ æãã£ãŒã«ããåã®äžäžèŽãªã©ãæã ã ã倱æãã
- ç°å¢ã«ãã£ãŠçœ²åãã§ãã¯ãéã£ãã倱æããããã
ãããã°ã§ããWebhookã®æ§æã¯æšæž¬ã®éã§ãã远跡å¯èœïŒãã¹ãŠã®é ä¿¡ãšãã®æ±ããèŠã€ããããïŒãåçŸå¯èœïŒéå»ã®ã€ãã³ããå®å šã«ãªãã¬ã€ã§ããïŒãæ€èšŒå¯èœïŒçæ£æ§ãšåŠççµæã蚌æã§ããïŒã§ããããšã誰ãã«ããã®ã€ãã³ãã¯ã©ããªã£ãïŒããšèãããããæ°åã§èšŒæ ã瀺ããã¹ãã§ãã
AppMasterã®ãããªãã©ãããã©ãŒã ã§ã¢ããªãäœããªãããã®èãæ¹ã¯ããã«éèŠã§ããããžã¥ã¢ã«ããžãã¯ã¯çŽ æ©ã倿Žã§ããŸãããå€éšã·ã¹ãã ããã©ãã¯ããã¯ã¹ã«ãªããªãããã«æç¢ºãªã€ãã³ãå±¥æŽãšå®å šãªãªãã¬ã€ãå¿ èŠã§ãã
Webhookã芳枬å¯èœã«ããããã®æäœéã®ããŒã¿
ãã¬ãã·ã£ãŒäžã§ãããã°ãããšãã«ã¯ãæ¯ååãåºæ¬ãå¿ èŠã§ã: ä¿¡é Œã§ããæ€çŽ¢ã§ãããªãã¬ã€ã§ããèšé²ãããããªããã°ããã¹ãŠã®Webhookãäžä»¶ç©ã®è¬ã«ãªããŸãã
ããªãã®ã·ã¹ãã ã§åäžã®Webhookãã€ãã³ãããäœãæå³ããããæ±ºããŠãã ãããã¬ã·ãŒãã®ããã«æ±ããŸããã: 1ã€ã®çä¿¡ãªã¯ãšã¹ãã¯1ã€ã®ä¿åãããã€ãã³ããšèŠãªããŸããããšãåŠçãåŸã§è¡ãããŠãã§ãã
æäœéä¿åãã¹ããã®:
- Event ID: å¯èœãªããããã€ãã®IDã䜿ãããªããã°çæããã
- åé ã®ä¿¡é Œã§ããããŒã¿: åãåã£ãæå»ãéä¿¡å
ïŒãããã€ãåããšã³ããã€ã³ããä¿æãããªãIPïŒã
received_atã¯ãã€ããŒãå ã®ã¿ã€ã ã¹ã¿ã³ããšå¥ã«ä¿æããã - åŠçã¹ããŒã¿ã¹ãšçç±: å°ããªç¶æ ã»ããïŒreceived, verified, handled, failedïŒã䜿ããçã倱æçç±ãä¿åããã
- çã®ãªã¯ãšã¹ããšããŒã¹æžã¿ã®ãã¥ãŒ: ç£æ»ã眲åãã§ãã¯ã®ããã«åä¿¡æã®çã®ããã£ãšãããããã®ãŸãŸä¿åãããµããŒããæ€çŽ¢ã®ããã«JSONã®ããŒã¹æžã¿ãã¥ãŒãä¿åããã
- çžé¢ããŒ: æ€çŽ¢å¯èœãª1ã2åã®ãã£ãŒã«ãïŒorder_id, invoice_id, user_id, ticket_idïŒãçšæããã
äŸ: æ¯æããããã€ãããpayment_succeededããéã£ãŠããã®ã«é¡§å®¢ãæªæãã®ãŸãŸã«èŠããå Žåãã€ãã³ããã°ã«çã®ãªã¯ãšã¹ããããã°çœ²åã確èªããæ£ç¢ºãªéé¡ãšé貚ã確èªã§ããŸããinvoice_idãå«ãŸããŠããã°ããµããŒãã¯è«æ±æžããã€ãã³ããèŠã€ããã¹ããŒã¿ã¹ãâfailedâã§æ¢ãŸã£ãŠããããšã確èªãããšã³ãžãã¢ã«æç¢ºãªãšã©ãŒçç±ãæž¡ããŸãã
AppMasterã§ã¯ãData Designerã®ãWebhookEventãããŒãã«ã«ãåã¹ãããå®äºæã«ã¹ããŒã¿ã¹ãæŽæ°ããBusiness Processãçµããšããå®çšçãªããæ¹ããããŸããããŒã«èªäœãç®çã§ã¯ãªããäžè²«ããèšé²ãç®çã§ãã
ãã°ãèªã¿ããããªãããã«ã€ãã³ãæ§é ãæšæºåãã
åãããã€ããç°ãªããã€ããŒã圢ç¶ãéããšããã°ã¯åžžã«æ£ããã£ãå°è±¡ã«ãªããŸããå®å®ããã€ãã³ãã®âãšã³ãããŒãâãäœãã°ãããŒã¿ãå€ãã£ãŠãæ¯ååããã£ãŒã«ããèŠããããããããã°ãéããªããŸãã
æçšãªãšã³ãããŒãã«ã¯éåžžãæ¬¡ãå«ãŸããŸã:
idïŒãŠããŒã¯ãªã€ãã³ãIDïŒtypeïŒinvoice.paidã®ãããªæç¢ºãªã€ãã³ãåïŒcreated_atïŒã€ãã³ããçºçããæå»ãåä¿¡æå»ã§ã¯ãªãïŒdataïŒããžãã¹ãã€ããŒãïŒversionïŒäŸ:v1ïŒ
ãã®ãŸãŸãã°ã«ä¿åã§ããã·ã³ãã«ãªäŸ:
{
"id": "evt_01H...",
"type": "payment.failed",
"created_at": "2026-01-25T10:12:30Z",
"version": "v1",
"correlation": {"order_id": "A-10492", "customer_id": "C-883"},
"data": {"amount": 4990, "currency": "USD", "reason": "insufficient_funds"}
}
snake_caseãcamelCaseã®ã©ã¡ãããéžã³ãäžè²«ããŠäœ¿ã£ãŠãã ãããåã«ã峿 Œã§ããããš: amountãæã
æååã«ããŠæã
æ°å€ã«ããªãã§ãã ããã
ããŒãžã§ãã³ã°ã¯ä¿éºã§ãããã£ãŒã«ãã倿Žããå¿
èŠããããšãã¯ãv2ãå
¬éããŠãã°ããv1ãåããç¶ããŠãã ãããããã«ãããµããŒãã®ã€ã³ã·ãã³ããé²ããã¢ããã°ã¬ãŒãã®ãããã°ããã£ãšæ¥œã«ãªããŸãã
äžè²«æ§ããããã¹ãå¯èœãªçœ²åæ€èšŒ
çœ²åæ€èšŒã¯Webhookãšã³ããã€ã³ããéæŸãã«ãªããªãããã«ããããã®ãã®ã§ããæ€èšŒããªããã°ãURLãç¥ã£ã誰ã§ãåœã®ã€ãã³ããéããããæ»æè ãå®éã®ãªã¯ãšã¹ããæ¹ããããããšã§ããŸãã
æãäžè¬çãªãã¿ãŒã³ã¯å ±æã·ãŒã¯ã¬ããã䜿ã£ãHMAC眲åã§ããéä¿¡è ã¯çã®ãªã¯ãšã¹ãããã£ïŒãããæè¯ïŒãæ£èŠåããæååã«çœ²åããŸããåãåãåŽã¯HMACãåèšç®ããŠæ¯èŒããŸããå€ãã®ãããã€ãã¯ããã£ããã£ããããªã¯ãšã¹ãã®ãªãã¬ã€ãé²ãããã«çœ²åã«ã¿ã€ã ã¹ã¿ã³ããå«ããŸãã
æ€èšŒã«ãŒãã³ã¯éå±ã§äžè²«ããŠããã¹ãã§ã:
- åä¿¡æã®çã®ããã£ããã®ãŸãŸèªã¿åãïŒJSONããŒã¹åïŒ
- ãããã€ãã®ã¢ã«ãŽãªãºã ãšç§å¯ã§çœ²åãåèšç®ãã
- 宿°æéæ¯èŒé¢æ°ã§æ¯èŒãã
- å€ãã¿ã€ã ã¹ã¿ã³ãã¯æåŠããïŒæ°åã®çªãªã©ïŒ
- ééããããã°éããïŒäœãæ¬ ããŠãããäžæ£ãªãç¡å¹æ±ãïŒ
ãã¹ãå¯èœã«ããŠãã ãããæ€èšŒã¯å°ããªé¢æ°ã«ãŸãšããæ¢ç¥ã®æ£ãããµã³ãã«ãšééã£ããµã³ãã«ã§ãã¹ããæžããŸããããããæéã®ç¡é§ã¯ãããŒã¹æžã¿JSONã«çœ²åããŠããŸãããšã§ãïŒçãã€ãåã«çœ²åãã¹ãïŒã
ã·ãŒã¯ã¬ããããŒããŒã·ã§ã³ãæåããèšç»ããŠãã ãããç§»è¡äžã«2ã€ã®ã¢ã¯ãã£ããªã·ãŒã¯ã¬ããããµããŒããã: æ°ãããã®ããŸã詊ããæ¬¡ã«åã®ãã®ã«ãã©ãŒã«ããã¯ããã
æ€èšŒã倱æãããšãã¯ãç§å¯ãæŒãããã«ãããã°ã§ããååãªæ å ±ããã°ã«æ®ããŠãã ãã: ãããã€ãåãã¿ã€ã ã¹ã¿ã³ãïŒå€ããããã©ããïŒã眲åããŒãžã§ã³ããªã¯ãšã¹ã/çžé¢IDãçããã£ã®çãããã·ã¥ïŒæ¬äœãã®ãã®ã§ã¯ãªãïŒãªã©ã
éè€å¯äœçšãèµ·ãããªããªãã©ã€ãšåªçæ§
ãªãã©ã€ã¯æ®éã®ããšã§ãããããã€ãã¯ã¿ã€ã ã¢ãŠãããããã¯ãŒã¯é害ã5xxã¬ã¹ãã³ã¹ã®ãšãã«ãªãã©ã€ããŸããããšãããªãã®ã·ã¹ãã ãåŠçãå®äºããŠããŠãããããã€ããããªãã®å¿çãåãåããªãã£ãããã«åãã€ãã³ããåéãããããšããããŸãã
ãããããã©ã®ã¬ã¹ãã³ã¹ãããªãã©ã€ããã忢ãããæ±ºããŠãããŸããããå€ãã®ããŒã ã¯æ¬¡ã®ãããªã«ãŒã«ã䜿ããŸã:
- 2xx: åçããªãã©ã€åæ¢
- 4xx: èšå®ããªã¯ãšã¹ãã®åé¡ãéåžžã¯ãªãã©ã€åæ¢
- 408/429/5xx: äžæç倱æãã¬ãŒãå¶éããªãã©ã€
åªçæ§ãšã¯ãåãã€ãã³ããäœåºŠåŠçããŠãå¯äœçšãç¹°ãè¿ãããªãããšïŒäºéè«æ±ãéè€æ³šæãäºéã¡ãŒã«ãé²ãïŒã§ããWebhookã¯å°ãªããšãäžåºŠé ä¿¡(at-least-once)ããããã®ãšããŠæ±ã£ãŠãã ããã
å®çšçãªãã¿ãŒã³ã¯ãåçä¿¡ã€ãã³ãã®ãŠããŒã¯IDãšåŠççµæãä¿åããããšã§ããåé ä¿¡ãæ¥ãã:
- ããæåæžã¿ãªãã2xxãè¿ããŠäœãããªãã
- ãã倱æãªããå éšåŠçãå詊è¡ããïŒãŸãã¯ãªãã©ã€å¯èœãªã¹ããŒã¿ã¹ãè¿ãïŒã
- ããé²è¡äžãªãã䞊ååŠçãé¿ããŠçãâacceptedâã¬ã¹ãã³ã¹ãè¿ãã
å éšãªãã©ã€ã«ã¯ææ°ããã¯ãªãã䜿ãã詊è¡åæ°ã«äžéãèšããŸããäžéã«éããããã€ãã³ãããèŠç¢ºèªãã¹ããŒãã«ç§»ããæåŸã®ãšã©ãŒãæ®ããŠãã ãããAppMasterã§ã¯ãããã¯ã€ãã³ãIDãšã¹ããŒã¿ã¹çšã®å°ããªããŒãã«ãšããªãã©ã€ãã¹ã±ãžã¥ãŒã«ããŠç¹°ãè¿ã倱æãã«ãŒãã£ã³ã°ããBusiness Processã«ãããã«å¯Ÿå¿ããŸãã
ãµããŒããçŽ æ©ãä¿®æ£ã§ãããªãã¬ã€ããŒã«
ãªãã©ã€ã¯èªåçã«è¡ãããŸãããªãã¬ã€ã¯æå³çã«è¡ããã®ã§ãã
ãªãã¬ã€ããŒã«ã¯ãéã£ãã¯ãã ããåçŸå¯èœãªãã¹ãã«å€ãããŸã£ããåããã€ããŒããåé ä¿¡ããŸãããããå®å šãªã®ã¯ãåªçæ§ãšç£æ»èšŒè·¡ãããå Žåã ãã§ããåªçæ§ã¯äºéè«æ±ã»äºéåºè·ã»äºéã¡ãŒã«ãé²ããç£æ»èšŒè·¡ã¯èª°ãäœããªãã¬ã€ããããšçµæã瀺ããŸãã
åäžã€ãã³ãã®ãªãã¬ã€ãšæéç¯å²ãªãã¬ã€
åäžã€ãã³ãã®ãªãã¬ã€ã¯äžè¬çãªãµããŒãã±ãŒã¹ã§ã: 1人ã®é¡§å®¢ã1ä»¶ã®å€±æã€ãã³ããä¿®æ£åŸã«åé ä¿¡ãããæéç¯å²ãªãã¬ã€ã¯ã€ã³ã·ãã³ãåãã§ã: ãããã€ããç¹å®ã®ãŠã£ã³ããŠã§é害ãèµ·ããããã®æéã«å€±æãããã¹ãŠãåéããå¿ èŠããããšãã§ãã
éžæãã·ã³ãã«ã«ä¿ã£ãŠãã ãã: ã€ãã³ãã¿ã€ããæéç¯å²ãã¹ããŒã¿ã¹ïŒfailed, timed out, delivered but unacknowledgedïŒã§ãã£ã«ã¿ããŠã1ä»¶ãŸãã¯ãããã§ãªãã¬ã€ããŸãã
äºæ ãé²ãã¬ãŒãã¬ãŒã«
ãªãã¬ã€ã¯åŒ·åã§ããå±éºã§ãã£ãŠã¯ãªããŸãããããã€ãã®ã¬ãŒãã¬ãŒã«ãèšããŸããã:
- ããŒã«ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡
- å®å ããšã®ã¬ãŒãå¶é
- ç£æ»èšé²ã«å¿ é ã®çç±ã¡ã¢ãä¿å
- 倧éãããã«ã¯æ¿èªãå¿ é ã«ãããªãã·ã§ã³
- éä¿¡ããã«æ€èšŒãããã©ã€ã©ã³ã¢ãŒã
ãªãã¬ã€åŸã¯ãå ã®ã€ãã³ãã®æšªã«çµæã衚瀺ããŸã: æåãäŸç¶å€±æïŒææ°ãšã©ãŒä»ãïŒããŸãã¯ç¡èŠïŒåªçæ§ã«ããéè€ãšããŠæ€åºïŒãªã©ã
ã€ã³ã·ãã³ãæã«åœ¹ç«ã€ã€ãã³ããã°
Webhookãã€ã³ã·ãã³ãã§å£ãããšããæ°åã§çããå¿ èŠã§ããè¯ããã°ã¯æç¢ºãªã¹ããŒãªãŒãèªããŸã: äœãå±ããäœãããããã©ãã§æ¢ãŸã£ããã
åä¿¡æã®çã®ãªã¯ãšã¹ãã¯ãã®ãŸãŸä¿åããŠãã ãã: ã¿ã€ã ã¹ã¿ã³ãããã¹ãã¡ãœãããããããçã®ããã£ããããã€ãããã£ãŒã«ããå€ãããããŒãµãããŒã¿ã誀èªãããšãããããçå®ã®åºæºã«ãªããŸããä¿ååã«æ©å¯å€ïŒèªèšŒããããããŒã¯ã³ãäžèŠãªå人æ å ±ãæ¯æãæ å ±ïŒã¯ãã¹ã¯ããŠãã ããã
çããŒã¿ã ãã§ã¯äžååã§ããæ€çŽ¢å¯èœãªããŒã¹æžã¿ãã¥ãŒãä¿åããŸããã: ã€ãã³ãã¿ã€ããå€éšã€ãã³ãIDã顧客/ã¢ã«ãŠã³ãèå¥åãé¢é£ãªããžã§ã¯ãIDïŒinvoice_id, order_idïŒãå éšçžé¢IDãããã«ãããµããŒãã¯ã顧客8142ã®ãã¹ãŠã®ã€ãã³ãããéããã«èŠã€ããããŸãã
åŠçäžã¯äžè²«ããæèšã§çãã¹ãããã¿ã€ã ã©ã€ã³ãä¿ã¡ãŸããäŸ: âvalidated signatureâ, âmapped fieldsâ, âchecked idempotencyâ, âupdated recordsâ, âqueued follow-upsâã
ä¿ææéãéèŠã§ããå®éã®é å»¶ãçŽäºãã«ããŒããã®ã«ååãªå±¥æŽãæ®ãã€ã€ãæ°žä¹ ã«ä¿æããªãããã«ããŸãçã®ãã€ããŒããåé€ãŸãã¯å¿ååãã軜éãªã¡ã¿ããŒã¿ãé·ãæ®ãããšãæ€èšããŠãã ããã
ã¹ããããã€ã¹ããã: ãããã°å¯èœãªWebhookãã€ãã©ã€ã³ãæ§ç¯ãã
åä¿¡åŽãå°ããªãã€ãã©ã€ã³ãšããŠæç¢ºãªãã§ãã¯ãã€ã³ããæãããŠæ§ç¯ããŸãããã¹ãŠã®ãªã¯ãšã¹ããä¿åãããã€ãã³ãã«ãªãããã¹ãŠã®åŠçå®è¡ã詊è¡ãšããŠèšé²ããããã¹ãŠã®å€±æãæ€çŽ¢å¯èœã«ãªããŸãã
åä¿¡ãã€ãã©ã€ã³
HTTPãšã³ããã€ã³ãã¯åã蟌ã¿ã®ã¿ãšèããŠãã ãããæåã«æå°éã®äœæ¥ãè¡ãããã®åŸã¯ãŒã«ãŒã«åŠçãç§»ããŠã¿ã€ã ã¢ãŠããè¬ã®åäœãçãŸãªãããã«ããŸãã
- ããããçã®ããã£ãåé ã¿ã€ã ã¹ã¿ã³ãããããã€ãããã£ããã£ããã
- 眲åãæ€èšŒããïŒãŸãã¯ãæ€èšŒå€±æãã®æç¢ºãªã¹ããŒã¿ã¹ãä¿åããïŒã
- å®å®ããã€ãã³ãIDã§ããŒä»ãããŠåŠçããã¥ãŒã«ç»é²ããã
- ã¯ãŒã«ãŒã§åªçæ§ãã§ãã¯ãšããžãã¹ã¢ã¯ã·ã§ã³ãè¡ãã
- æçµçµæïŒæå/倱æïŒãšæçšãªãšã©ãŒã¡ãã»ãŒãžãèšé²ããã
å®éã«ã¯ã2ã€ã®ã³ã¢ã¬ã³ãŒããæ¬²ãããªãã§ããã: Webhookã€ãã³ãããšã«1è¡ãåŠç詊è¡ããšã«1è¡ã
å ç¢ãªã€ãã³ãã¢ãã«ã«ã¯: event_id, provider, received_at, signature_status, payload_hash, payload_jsonïŒãŸãã¯raw payloadïŒ, current_status, last_error, next_retry_atã詊è¡ã¬ã³ãŒãã«ã¯: attempt_number, started_at, finished_at, http_statusïŒè©²åœããå ŽåïŒ, error_code, error_text ãä¿åã§ããŸãã
ããŒã¿ãæã£ããããµããŒããevent IDãcustomer IDãæéç¯å²ã§æ€çŽ¢ããã¹ããŒã¿ã¹ã§ãã£ã«ã¿ã§ããå°ããªç®¡çããŒãžã远å ããŠãã ãããã·ã³ãã«ã§é«éã«ä¿ã¡ãŸãã
ãã¿ãŒã³ã«åºã¥ããŠã¢ã©ãŒããèšå®ããŸããããåçºã®å€±æã§ã¯ãªããäŸãã°ã5åã§ãããã€ãã10å倱æãããã€ãã³ããfailedã«è©°ãŸã£ãŠããããšãã£ããã¿ãŒã³ã§ãã
éä¿¡åŽã®æåŸ å€
éä¿¡åŽãå¶åŸ¡ã§ãããªããæ¬¡ã®3ã€ãæšæºåããŠãã ãã: åžžã«ã€ãã³ãIDãå«ãããåžžã«åãæ¹æ³ã§ãã€ããŒãã«çœ²åããããªãã©ã€ããªã·ãŒãå¹³æãªèšèã§å ¬éãããããã«ãããããŒãããŒããéã£ãããšèšã匵ã£ãŠããªãã®ã·ã¹ãã ã«äœãæ®ã£ãŠããªããšãã®ç¡é§ãªããåããé²ããŸãã
äŸ: æ¯æãWebhookããfailedããããfixedããžããªãã¬ã€ã䜿ã£ãŠ
ãããããã¿ãŒã³ã¯ãStripeã®Webhookãæ³šæã¬ã³ãŒããäœããåé ã¡ãŒã«/SMSãéããšããåŠçã§ãã1ã€ã®ã€ãã³ãã倱æãããšã顧客ã課éãããããæ³šæãååšããããåé ã¡ãŒã«ãéãããã誰ãããããªããªããŸãã
çŸå®çãªå€±æäŸ: Stripeã®çœ²åã·ãŒã¯ã¬ãããããŒããŒã·ã§ã³ãããšããŸããæ°åéãããªãã®ãšã³ããã€ã³ãã¯ãŸã å€ãã·ãŒã¯ã¬ããã§æ€èšŒããŠãããããStripeã¯ã€ãã³ããéãããµãŒãã¯401/400ã§æåŠãããããã·ã¥ããŒãã¯ãwebhook failedããšè¡šç€ºãããã¢ããªã®ãã°ã¯ãinvalid signatureããšããæžããŠããªãã
è¯ããã°ã¯åå ãæçœã«ããŸãã倱æããã€ãã³ãã®ã¬ã³ãŒãã«ã¯å®å®ããã€ãã³ãIDãšããã¹ããããç¹å®ããã®ã«ååãªæ€èšŒè©³çް: 眲åããŒãžã§ã³ã眲åã¿ã€ã ã¹ã¿ã³ããæ€èšŒçµæãæç¢ºãªæåŠçç±ïŒééã£ãã·ãŒã¯ã¬ãã vs ã¿ã€ã ã¹ã¿ã³ãã®ããïŒã衚瀺ãããã¹ãã§ããããŒããŒã·ã§ã³äžã¯ã©ã®ã·ãŒã¯ã¬ããã詊ãããïŒäŸ: âcurrentâ vs âpreviousâïŒããã°ã«æ®ãã®ã圹ç«ã¡ãŸãïŒçã®ç§å¯ã¯ãã°ã«æ®ããªãïŒã
ã·ãŒã¯ã¬ãããä¿®æ£ããŠçããŠã£ã³ããŠã§âcurrentâãšâpreviousâã®äž¡æ¹ãåãå ¥ããããã«ããŠããããã¯ãã°ãåŠçããå¿ èŠããããŸãããªãã¬ã€ããŒã«ããããçæéã®ã¿ã¹ã¯ã«å€ããŸã:
- event_idã§ã€ãã³ããèŠã€ããã
- 倱æçç±ã解決ãããŠããããšã確èªããã
- ã€ãã³ãããªãã¬ã€ããã
- åªçæ§ãæ€èšŒãã: Orderã¯1åã ãäœæãããåé ã¯1åã ãéãããã
- ãªãã¬ã€çµæãšã¿ã€ã ã¹ã¿ã³ãããã±ããã«è¿œå ããã
ãããããã¹ãšåé¿æ³
ã»ãšãã©ã®Webhookåé¡ã¯ãã·ã¹ãã ãæçµçãªãšã©ãŒã ããèšé²ããŠããããã«è¬ã®ãŸãŸã«ãªããŸããåé ä¿¡ãå°ããªã€ã³ã·ãã³ãã¬ããŒããšããŠæ±ã£ãŠãã ãã: äœãå±ããããäœã倿ããããæ¬¡ã«äœãèµ·ãããã
ãããããã¹:
- åä¿¡ãæ€èšŒããã¥ãŒãåŠçã倱æããªãã©ã€ãšãã£ãã©ã€ããµã€ã¯ã«å šäœã§ã¯ãªãäŸå€ã ãããã°ã«æ®ã
- çã®ãã€ããŒããšãããããã¹ã¯ããã«ä¿åããŠããŸããã·ãŒã¯ã¬ãããå人ããŒã¿ãåã蟌ãã§ããŸã
- ãªãã©ã€ãæ°ããã€ãã³ããšããŠæ±ããäºéè«æ±ãéè€ã¡ãã»ãŒãžãçºçããã
- ã€ãã³ããæ°žç¶çã«ä¿åãããåã«200 OKãè¿ããŠããŸããããã·ã¥ããŒãã¯æ£åžžã§ãå®éã®åŠçã倱ããã
å®è·µçãªä¿®æ£:
- æå°ã§æ€çŽ¢å¯èœãªãªã¯ãšã¹ãèšé²ãšã¹ããŒã¿ã¹å€æŽãä¿åããã
- ããã©ã«ãã§æ©å¯ãã£ãŒã«ãããã¹ã¯ããçã®ãã€ããŒããžã®ã¢ã¯ã»ã¹ãå¶éããã
- åªçæ§ãã³ãŒãã ãã§ãªãããŒã¿ããŒã¹ã¬ãã«ã§åŒ·å¶ããã
- ã€ãã³ããå®å šã«ä¿åãããåŸã«ã®ã¿åçãè¿ãã
- ãªãã¬ã€ãã¯ã³ãªãã¹ã¯ãªããã§ã¯ãªããµããŒããããŒãšããŠèšèšããã
AppMasterã䜿ã£ãŠãããªãããããã¯èªç¶ã«ãã©ãããã©ãŒã ã«ãã£ããããŸã: Data Designerã®ã€ãã³ãããŒãã«ãæ€èšŒãšåŠçã®ããã®ã¹ããŒã¿ã¹é§åã®Business Processãæ€çŽ¢ãšãªãã¬ã€çšã®ç®¡çUIã
ã¯ã€ãã¯ãã§ãã¯ãªã¹ããšæ¬¡ã®ã¹ããã
æ¯ååãåºæ¬ãç®æããŸããã:
- ãã¹ãŠã®ã€ãã³ãã«ãŠããŒã¯ãªevent_idããããçã®ãã€ããŒããåä¿¡æã®ãŸãŸä¿åããã
- ãã¹ãŠã®ãªã¯ãšã¹ãã§çœ²åæ€èšŒãè¡ãã倱æã«ã¯æç¢ºãªçç±ãå«ããã
- ãªãã©ã€ã¯äºæž¬å¯èœã§ããã³ãã©ã¯åªçæ§ãå®ãã
- ãªãã¬ã€ã¯èªå¯ãããããŒã«ã«éå®ããç£æ»èšŒè·¡ãæ®ãã
- ãã°ã¯event_idãprovider idãã¹ããŒã¿ã¹ãæéã§æ€çŽ¢å¯èœã§ãçããäœãèµ·ãããããµããªãä»ããã
ãããã®ãã¡1ã€ã§ãæ¬ ãããšãçµ±åã¯ãã©ãã¯ããã¯ã¹ã«ãªãåŸãŸããçã®ãã€ããŒããä¿åããŠããªããã°ããããã€ããäœãéã£ãã蚌æã§ããŸããã眲å倱æãå ·äœçã§ãªããã°ã誰ã®è²¬ä»»ãã§äœæéãè°è«ãã矜ç®ã«ãªããŸãã
çŽ æ©ããããçµã¿ç«ãŠããããã¹ãŠãæã§æžãæéããªããªããAppMaster (appmaster.io)ã¯ããŒã¿ã¢ãã«ãåŠçãããŒã管çUIãäžã€ã®å Žæã§çµã¿ç«ãŠãæå©ããã§ããŸããæçµçãªã¢ããªã®ããã«å®éã®ãœãŒã¹ã³ãŒããçæããŸãã


