å®å šãªè«æ±æŽæ°ã®ããã®åªçãªæ¯æããŠã§ãããã¯ãã§ãã¯ãªã¹ã
ã€ãã³ãã®éè€æé€ãå詊è¡åŠçãè«æ±æžã»ãµãã¹ã¯ãªãã·ã§ã³ã»ã¢ã¯ã»ã¹æš©ã®å®å šãªæŽæ°ã®ããã®åªçãªæ¯æããŠã§ãããã¯ãã§ãã¯ãªã¹ãã

æ¯æããŠã§ãããã¯ãéè€æŽæ°ãçãçç±
æ¯æããŠã§ãããã¯ã¯ã課éãããã€ãããæ¯æãæåããè«æ±æžæ¯æããããµãã¹ã¯ãªãã·ã§ã³ã®æŽæ°ããè¿éçºçããªã©éèŠãªåºæ¥äºãçºçãããšãã«ããã¯ãšã³ããžéãã¡ãã»ãŒãžã§ããèŠããã«ããããªã£ãã®ã§èšé²ãæŽæ°ããŠãããšããéç¥ã§ãã
éè€ãèµ·ããã®ã¯ããŠã§ãããã¯é ä¿¡ãã確å®ã«å±ããããšãç®æããŠèšèšãããŠããããã§ããäžåºŠã ãå±ããããšãä¿èšŒããããã§ã¯ãªãããã§ãããµãŒããé ããã¿ã€ã ã¢ãŠãããããšã©ãŒãè¿ããäžæçã«å©çšäžå¯ã«ãªããšããããã€ãã¯éåžžåãã€ãã³ããåéããŸãããŸããåãå®äžçã®æäœã«çŽã¥ãå¥ã®ã€ãã³ãïŒäŸïŒè«æ±æžã€ãã³ããšæ¯æãã€ãã³ãïŒãå±ãããšããããŸããç¹ã«è¿éã®ãããªçŽ æ©ã远éãããå Žåãã€ãã³ãé ãååŸããããšããããŸãã
ãã³ãã©ãåªçã§ãªããšãåãã€ãã³ããäºåºŠé©çšãããŠæ¬¡ã®ãããªåé¡ã«ãªããŸãïŒ
- è«æ±æžãäºéã«ãæ¯ææžã¿ãæ±ãã«ãªãéè€äŒèšãçºçãã
- æŽæ°ãäºåºŠé©çšãããŠã¢ã¯ã»ã¹æéãéå°ã«å»¶é·ããã
- æš©å©ãäºéã«ä»äžãããïŒè¿œå ã¯ã¬ãžãããã·ãŒããæ©èœïŒ
- è¿éããã£ãŒãžããã¯ã§ã¢ã¯ã»ã¹ãæ£ããåãæ¶ãããªã
ããã¯åãªãããã¹ããã©ã¯ãã£ã¹ã以äžã®è©±ã§ããä¿¡é Œã§ããè«æ±åŠçãšãµããŒããã±ããã ããã®è«æ±åŠçã®å·®ã«ãªããŸãã
ãã®ãã§ãã¯ãªã¹ãã®ç®çã¯ã·ã³ãã«ã§ãïŒåä¿¡ããåã€ãã³ãããæå€§1åã ãé©çšããããšæ±ãããšãå šãŠã®ã€ãã³ãã«å®å®ããèå¥åãä¿åããå詊è¡ãå®å šã«åŠçããè«æ±æžã»ãµãã¹ã¯ãªãã·ã§ã³ã»æš©å©ãå¶åŸ¡ãããæ¹æ³ã§æŽæ°ããŸããAppMaster ã®ãããªããŒã³ãŒãçæããã¯ãšã³ãã§ãåãã«ãŒã«ãåœãŠã¯ãŸããŸãïŒæç¢ºãªããŒã¿ã¢ãã«ãšåçŸå¯èœãªãã³ãã©ãããŒãå¿ èŠã§ãã
ãŠã§ãããã¯ã«é©çšã§ããåªçæ§ã®åºæ¬
åªçæ§ãšã¯ãåãå ¥åãäœåºŠåŠçããŠãæçµç¶æ ãåãã§ããããšãæå³ããŸããè«æ±ã®èгç¹ã§ã¯ïŒåãè«æ±æžã¯1åã ãæ¯ææžã¿ã«ãåããµãã¹ã¯ãªãã·ã§ã³ã¯1åã ãæŽæ°ãããã¢ã¯ã»ã¹ã¯1åã ãä»äžãããããšããããšã§ãã
ãããã€ãã¯ãšã³ããã€ã³ããã¿ã€ã ã¢ãŠãããã 5xx ãè¿ããããããã¯ãŒã¯ãåããããããšå詊è¡ããŸããå詊è¡ã¯åãã€ãã³ããç¹°ãè¿ããŸããããã¯æ°æ¥åŸã«çºçããå¥ã®å®ã€ãã³ãïŒäŸãã°è¿éïŒã®ãããªæ°ããã€ãã³ããšã¯éããæ°ããã€ãã³ãã¯ç°ãªãIDãæã¡ãŸãã
ãããæ©èœãããã«ã¯2ã€ãå¿ èŠã§ãïŒå®å®ããèå¥åãšãèŠãããšãããããèŠããŠããå°ããªâèšæ¶âã§ãã
éèŠãªIDïŒãšä¿åãã¹ããã®ïŒ
ã»ãšãã©ã®æ¯æããã©ãããã©ãŒã ã¯ãŠã§ãããã¯ã€ãã³ãåºæã®ã€ãã³ãIDãå«ã¿ãŸãããã€ããŒãå ã«ãªã¯ãšã¹ãIDãåªçæ§ããŒã課éãªããžã§ã¯ãã®IDïŒcharge ã payment_intent ã®ãããªïŒãå«ãããšããããŸãã
ä¿åãã¹ãã¯ããã®æ£ç¢ºãªã€ãã³ããæ¢ã«é©çšãããïŒãã«çããããæ å ±ã§ãã
å®åçãªæå°éïŒ
- ã€ãã³ãIDïŒãŠããŒã¯ããŒïŒ
- ã€ãã³ãã¿ã€ãïŒãããã°ã«äŸ¿å©ïŒ
- åä¿¡ã¿ã€ã ã¹ã¿ã³ã
- åŠçã¹ããŒã¿ã¹ïŒprocessed/failed çïŒ
- 該åœãã顧客ã»è«æ±æžã»ãµãã¹ã¯ãªãã·ã§ã³ãžã®åç §
éèŠãªåãã¯ãã€ãã³ãID ããŠããŒã¯å¶çŽä»ãã®ããŒãã«ã«ä¿åããããšã§ãããã³ãã©ã¯ãŸãã€ãã³ãID ãæ¿å ¥ããæ¢ã«ååšãããªã忢ã㊠200 ãè¿ãããšããæµããå®å šã§ãã
éè€æé€ã¬ã³ãŒãã¯ã©ããããä¿æããã
é å»¶å詊è¡ã調æ»ãã«ããŒããæéã¯ä¿æããŠãã ãããäžè¬çãªçªã¯ 30ïœ90 æ¥ã§ãããã£ãŒãžããã¯ã»ç°è°ã»é·ããµãã¹ã¯åšæãããå Žå㯠6ïœ12 ãæã«å»¶ã°ããå€ãè¡ã¯åé€ããŠããŒãã«ãé«éã«ä¿ã¡ãŸãã
AppMaster ã®ãããªçæããã¯ãšã³ãã§ã¯ããã㯠WebhookEvents ã¢ãã«ã«ã€ãã³ãID ã®ãŠããŒã¯ãã£ãŒã«ããæãããéè€æ€åºæã«æ©æçµäºããããžãã¹ããã»ã¹ãžç°¡æœã«ããããããŸãã
ã€ãã³ãã®éè€æé€ã®ããã®ã·ã³ãã«ãªããŒã¿ã¢ãã«èšèš
è¯ããŠã§ãããã¯ãã³ãã©ã¯ã»ãšãã©ãããŒã¿ã®åé¡ã§ãããããã€ãã®ã€ãã³ããäžåºŠã ãæ£ç¢ºã«èšé²ã§ããã°ããã®åŸã®åŠçã¯å®å šã«ãªããŸãã
ãŸãã¯ã¬ã·ãŒããã°ã®ããã«æ¯ãèãããŒãã«ãäœã£ãŠãã ãããPostgreSQLïŒAppMaster ã® Data Designer ã«ã¢ããªã³ã°ããå Žåãå«ãïŒã§ã¯ãå°ãã峿 Œã«ä¿ã¡éè€ãæ©ã倱æããããã«ããŸãã
å¿ èŠãªæå°é
webhook_events ããŒãã«ã®å®åçãªããŒã¹ã©ã€ã³ã¯ïŒ
providerïŒããã¹ããäŸïŒ"stripe"ïŒprovider_event_idïŒããã¹ããå¿ é ïŒstatusïŒããã¹ããäŸïŒ"received"ã"processed"ã"failed"ïŒprocessed_atïŒã¿ã€ã ã¹ã¿ã³ããnullableïŒraw_payloadïŒjsonb ãŸã㯠textïŒ
(provider, provider_event_id) ã«ãŠããŒã¯å¶çŽã远å ããŠãã ããããã®åäžã®ã«ãŒã«ãäž»èŠãªéè€é²æ¢ã¬ãŒãã¬ãŒã«ã«ãªããŸãã
æŽæ°å¯Ÿè±¡ãç¹å®ããããã®ããžãã¹IDãæ¬²ããã§ãããããããã¯ãŠã§ãããã¯ã€ãã³ãIDãšã¯å¥ç©ã§ãã
äžè¬çãªäŸïŒcustomer_idãinvoice_idãsubscription_idããããã€ãã¯æ°å€ã§ãªãIDã䜿ãããšãå€ãã®ã§ããã¹ãã§ä¿åããŠãã ããã
çã®ãã€ããŒããšããŒã¹æžã¿ãã£ãŒã«ã
ãããã°ãååŠçã®ããã« raw payload ãä¿åããŠãã ãããã¯ãšãªãã¬ããŒããç°¡åã«ããããã«ããŒã¹æžã¿ãã£ãŒã«ããä¿åã§ããŸãããæ¬åœã«äœ¿ããã®ã ããä¿åããŸãã
ã·ã³ãã«ãªã¢ãããŒãïŒ
- åžžã«
raw_payloadãä¿åãã - ããã¯ãšãªããããŒã¹æžã¿IDïŒcustomerãinvoiceãsubscriptionïŒãããã€ãä¿åãã
- ãã£ã«ã¿ãªã³ã°çšã«æ£èŠåããã
event_typeïŒããã¹ãïŒãä¿åãã
ããšãã° invoice.paid ãäºåºŠå±ããŠããŠããŒã¯å¶çŽã§äºåç®ã®æ¿å
¥ã¯ãããã¯ãããŸããç£æ»çšã« raw payload ãæ®ããããŒã¹æžã¿ã® invoice ID ã§æåã«æŽæ°ããè«æ±æžããã°ããèŠã€ããããŸãã
æé ïŒå®å šãªãŠã§ãããã¯ãã³ãã©ã®ãããŒ
å®å šãªãã³ãã©ã¯ãããšéå±ã§ãããããã€ããåãã€ãã³ããåéããŠãããããã¯ã€ãã³ããé äžåã§å±ããŠããåžžã«åãæ¯ãèããããŸãã
æ¯ååŸãã¹ã 5 ã¹ãããã®ãããŒ
-
眲åãæ€èšŒããŠãã€ããŒããããŒã¹ããŸãã眲åãã§ãã¯ã«å€±æãããæ³å®å€ã®ã€ãã³ãã¿ã€ãããŸãã¯ããŒã¹ã§ããªããªã¯ãšã¹ãã¯æåŠããŠãã ããã
-
è«æ±ããŒã¿ã«è§Šããåã«ã€ãã³ãã¬ã³ãŒããæžããŸãããããã€ãã€ãã³ãIDãã¿ã€ããäœææå»ãraw payloadïŒãŸãã¯ããã·ã¥ïŒãä¿åããŸããã€ãã³ãID ãæ¢ã«ååšãããªãéè€æ±ãã«ããŠåæ¢ããŸãã
-
ã€ãã³ããåäžã®ãææè ãã¬ã³ãŒãã«ãããã³ã°ããŸããäœãæŽæ°ããã®ãïŒè«æ±æžããµãã¹ã¯ãªãã·ã§ã³ã顧客ïŒã決ããå€éšID ãã¬ã³ãŒãã«ä¿åããŠçŽæ¥åç §ã§ããããã«ããŸãã
-
å®å šãªç¶æ 倿Žãé©çšããŸããç¶æ ã¯åžžã«åé²ãããåŸæ»ããããªãã§ãã ãããé ããŠæ¥ã
invoice.updatedã«ãã£ãŠæ¯ææžã¿ãåãæ¶ããªãããã«ããŸããé©çšããå å®¹ïŒæ§ç¶æ ãæ°ç¶æ ãã¿ã€ã ã¹ã¿ã³ããã€ãã³ãIDïŒãç£æ»çšã«èšé²ããŸãã -
éããã«å¿çãçµæããã°ã«æ®ããŸããã€ãã³ããå®å šã«ä¿åãããåŠçãŸãã¯ç¡èŠããããæåãè¿ããŠãã ãããåŠçãããããéè€ã§ç¡èŠãããããæåŠãããããšãã®çç±ããã°ã«èšé²ããŸãã
AppMaster ã§ã¯ããã webhook events ããŒãã«ãš Business Process ã«ãªãããæ¢ã«èŠãã€ãã³ãIDïŒãããã§ãã¯ããŠããæå°éã®æŽæ°ã¹ããããå®è¡ãã圢ã«ãªãããšãå€ãã§ãã
å詊è¡ãã¿ã€ã ã¢ãŠããé äžåé ä¿¡ã®åŠç
ãããã€ãã¯æåå¿çãè¿ããªããšãŠã§ãããã¯ãå詊è¡ããŸããã€ãã³ãã¯é äžåã§éãããããšããããŸãããã³ãã©ã¯åãæŽæ°ãäºåºŠå±ããŠãããããã¯åŸç¶ã®æŽæ°ãå ã«å±ããŠãå®å šã§ããå¿ èŠããããŸãã
å®çšçãªã«ãŒã«ïŒéããã«å¿çããéãåŠçã¯åŸã§è¡ãããŠã§ããã¯ãªã¯ãšã¹ããéãããžãã¯å®è¡ã®å Žãšèãããåé ã®ã¬ã·ãŒããšããŠæ±ã£ãŠãã ããããªã¯ãšã¹ãå ã§å€éšAPIåŒã³åºããPDF çæãäŒèšèšç®ãªã©ãè¡ããšã¿ã€ã ã¢ãŠããå¢ããå詊è¡ãèªçºãããŸãã
é äžåïŒææ°ã®çå®ãä¿æãã
é äžåã¯æ®éã«èµ·ãããŸãã倿Žãé©çšããåã«æ¬¡ã®2ç¹ããã§ãã¯ããŠãã ããïŒ
- ã¿ã€ã ã¹ã¿ã³ããæ¯èŒããïŒãã®ãªããžã§ã¯ãïŒè«æ±æžã»ãµãã¹ã¯ãªãã·ã§ã³ã»æš©å©ïŒã«æ¢ã«ä¿åããŠãããã®ããæ°ããå Žåã®ã¿é©çšãã
- ã¿ã€ã ã¹ã¿ã³ããè¿ããäžæç¢ºãªå Žåã¯ã¹ããŒã¿ã¹åªå 床ã䜿ãïŒpaid 㯠open ãäžåããcanceled 㯠active ãäžåã
æ¢ã«è«æ±æžãæ¯ææžã¿ãšèšé²ããŠããã®ã«é ã㊠"open" ãæ¥ããç¡èŠããŸããå ã« "canceled" ãåãåã£ãŠããŠåŸããå€ã "active" ãæ¥ãå Žå㯠canceled ãç¶æããŸãã
ç¡èŠããããã¥ãŒã«å ¥ããã
ã€ãã³ããå€ããæ¢ã«é©çšæžã¿ïŒåäžã€ãã³ãIDãå€ãã¿ã€ã ã¹ã¿ã³ããäœåªå 床ã®ã¹ããŒã¿ã¹ïŒãªãç¡èŠããŠãã ãããéã«ãäŸåããŒã¿ããŸã ç¡ãïŒäŸïŒãµãã¹ã¯æŽæ°ã顧客ã¬ã³ãŒãããå ã«æ¥ãïŒå Žåã¯ãã¥ãŒã«å ¥ããŠãã ããã
å®çšçãªãã¿ãŒã³ïŒ
- åä¿¡çŽåŸã«ã€ãã³ããä¿åããåŠçç¶æ ïŒreceived, processing, done, failedïŒãä»ãã
- äŸåé¢ä¿ãæ¬ ããŠãããªã waiting ã«ããŠããã¯ã°ã©ãŠã³ãã§å詊è¡ãã
- å詊è¡äžéãèšããç¹°ãè¿ã倱æãããã¢ã©ãŒããåºã
AppMaster ã§ã¯ã€ãã³ãä¿åããŒãã«ãš Business Process ãçµã¿åããããªã¯ãšã¹ãã«éããã«å¿çããŠããéåæã§ãã¥ãŒåŠçããã®ãé©åã§ãã
è«æ±æžã»ãµãã¹ã¯ãªãã·ã§ã³ã»æš©å©ã®å®å šãªæŽæ°
éè€æé€ã®æ¬¡ã®ãªã¹ã¯ã¯åæããè«æ±ç¶æ ã§ãïŒè«æ±æžã¯ paid ãªã®ã«ãµãã¹ã¯ãé廿»çŽã®ãŸãŸããããã¯æš©å©ãäºåºŠä»äžããåãæ¶ãããŠããªãããªã©ãåãŠã§ãããã¯ãç¶æ é·ç§»ãšããŠæ±ããååæ§ã®ããæŽæ°ã§é©çšããŠãã ããã
è«æ±æžïŒã¹ããŒã¿ã¹å€æŽã¯å調ã«
è«æ±æžã¯ paidãvoidedãrefunded ã®ããã«ç§»è¡ããŸããéšåæ¯æããããåŸãŸããå°çããã€ãã³ãã ããèŠãŠç¶æ ããã°ã«ããªãã§ãã ãããçŸåšã®ã¹ããŒã¿ã¹ãšäž»èŠãªåèšïŒamount_paidãamount_refundedïŒãä¿æããååããªé·ç§»ã®ã¿ãèš±å¯ããŸãã
å®åã«ãŒã«ïŒ
- è«æ±æžã "paid" ã«ããŒã¯ããã®ã¯æåã« paid ã€ãã³ããèŠããšãã ã
- è¿éã§ã¯
amount_refundedãè«æ±åèšãŸã§å¢ãããæžãããªã - è«æ±æžã voided ã«ãªã£ãããã«ãã£ã«ã¡ã³ãã¯æ¢ãããç£æ»ã®ããã¬ã³ãŒãã¯æ®ã
- éšåæ¯æãã¯éé¡ãæŽæ°ããããå šé¡æ¯ææžã¿ãã®ç¹å žã¯ä»ããªã
ãµãã¹ã¯ãªãã·ã§ã³ãšæš©å©ïŒä»äžã¯1åãåãæ¶ãã¯1å
ãµãã¹ã¯ãªãã·ã§ã³ã«ã¯æŽæ°ããã£ã³ã»ã«ãç¶äºæéããããŸããcurrent_period_start/end ã®ãããªæéå¢çãšã¹ããŒã¿ã¹ãä¿æããããããæš©å©ãŠã£ã³ããŠãå°åºããŠãã ãããæš©å©ã¯åäžã®ããŒã«å€ã§ã¯ãªãæç€ºçãªã¬ã³ãŒãã«ããŠãã ããã
ã¢ã¯ã»ã¹å¶åŸ¡ã®ã«ãŒã«ïŒ
- ãŠãŒã¶ãŒÃ補åÃæéããšã«1ã€ã®æš©å©ä»äž
- ã¢ã¯ã»ã¹çµäºæïŒãã£ã³ã»ã«ãè¿éããã£ãŒãžããã¯ïŒã«ã¯1ã€ã®åãæ¶ãã¬ã³ãŒã
- ã©ã®ãŠã§ãããã¯ã€ãã³ãã倿ŽãåŒãèµ·ãããããèšé²ããç£æ»ãã¬ã€ã«
åæç¶æ ãé¿ããããã«1ã€ã®ãã©ã³ã¶ã¯ã·ã§ã³ã䜿ã
è«æ±æžã»ãµãã¹ã¯ãªãã·ã§ã³ã»æš©å©ã®æŽæ°ã¯äžã€ã® DB ãã©ã³ã¶ã¯ã·ã§ã³ã§é©çšããŠãã ãããçŸåšã®è¡ãèªã¿ãã€ãã³ããæ¢ã«é©çšãããŠããªããã確èªãããã¹ãŠã®å€æŽãæžããŸããäœã倱æãããããŒã«ããã¯ããŠã"è«æ±æžã¯æ¯ææžã¿ã ãã¢ã¯ã»ã¹ããªã" ã®ãããªç¶æ ãé²ããŸãã
AppMaster ã§ã¯åäžã® Business Process ãããŒã§ PostgreSQL ããŸãšããŠæŽæ°ããããžãã¹å€æŽãšç£æ»ãšã³ããªãæžã蟌ãã®ãèªç¶ãªãããã³ã°ã§ãã
ãŠã§ãããã¯ãšã³ããã€ã³ãã®ã»ãã¥ãªãã£ãšããŒã¿å®å šæ§ãã§ãã¯
ãŠã§ãããã¯ã®ã»ãã¥ãªãã£ã¯æ£ç¢ºæ§ã®äžéšã§ããæ»æè ããšã³ããã€ã³ããžåœã®ãªã¯ãšã¹ããéãããšããpaidããåœè£ ããŠè«æ±ããŒã¿ãæ¹ãããããå±éºããããŸããéè€æé€ããã£ãŠããã€ãã³ããæ¬ç©ã§ããããšã蚌æã顧客ããŒã¿ãå®å šã«ä¿ã€å¿ èŠããããŸãã
è«æ±ããŒã¿ã«è§Šããåã«éä¿¡å ãæ€èšŒãã
ãã¹ãŠã®ãªã¯ãšã¹ãã§çœ²åãæ€èšŒããŠãã ãããStripe ã®å Žå㯠Stripe-Signature ããããšçã®ãªã¯ãšã¹ãããã£ïŒæžãæããªã JSONïŒã䜿ã£ãŠæ€èšŒããå€ãã¿ã€ã ã¹ã¿ã³ãã®ã€ãã³ãã¯æåŠããã®ãäžè¬çã§ãããããããªãå Žåã¯å³åº§ã«å€±ææ±ãã«ããŠãã ããã
æ©ã段éã§åºæ¬ãæ€èšŒããŠãã ããïŒHTTP ã¡ãœãããæ£ããããContent-Typeãå¿
é ãã£ãŒã«ãïŒevent idãtypeãè«æ±æžããµãã¹ã¯ãç¹å®ãããªããžã§ã¯ãIDïŒãæã£ãŠããããAppMaster ã§æ§ç¯ãããªã眲åã·ãŒã¯ã¬ããã¯ç°å¢å€æ°ãå®å
šãªèšå®ã«çœ®ããããŒã¿ããŒã¹ãã¯ã©ã€ã¢ã³ãã³ãŒãã«çœ®ããªãã§ãã ããã
ç°¡åãªã»ãã¥ãªãã£ãã§ãã¯ãªã¹ãïŒ
- æå¹ãªçœ²åãšæ°ããã¿ã€ã ã¹ã¿ã³ãããªããªã¯ãšã¹ãã¯æåŠãã
- æåŸ ããããããšã³ã³ãã³ãã¿ã€ããèŠæ±ãã
- ãŠã§ãããã¯ãã³ãã©ã«ã¯æå°æš©éã® DB ã¢ã¯ã»ã¹ã䜿ã
- ã·ãŒã¯ã¬ããã¯ããŒãã«å€ïŒenv/configïŒã§ä¿ç®¡ããå¿ èŠã«å¿ããŠããŒããŒã·ã§ã³ãã
- ã€ãã³ããå®å šã«æ°žç¶åããŠããã®ã¿ 2xx ãè¿ã
ã·ãŒã¯ã¬ãããæŒãããªããã°ãæ®ã
ãªãã©ã€ãç°è°ç³ç«ãŠããããã°ã§ããã ãã®ãã°ãæ®ãã€ã€ãæ©åŸ®ãªå€ã¯é¿ããŠãã ãããä¿åãã PII ã¯å®å
šãªãµãã»ããã«ãšã©ããŸãïŒãããã€ãã®é¡§å®¢IDãå
éšãŠãŒã¶ãŒIDããã¹ã¯ããã¡ãŒã«ïŒäŸïŒa***@domain.comïŒãã«ãŒãå
šæ
å ±ãäœæå
šäœãçã®èªèšŒããããªã©ã¯ä¿åããªãã§ãã ããã
åæ§ç¯ã«åœ¹ç«ã€ãã°é ç®ïŒ
- ãããã€ãã€ãã³ãIDãã¿ã€ããäœææå»
- æ€èšŒçµæïŒçœ²å OK / 倱æïŒâ»çœ²åèªäœã¯ä¿åããªã
- éè€å€å®ïŒæ°èŠ vs æ¢åŠçïŒ
- æŽæ°ããå éšã¬ã³ãŒãIDïŒè«æ±æžïŒãµãã¹ã¯ãªãã·ã§ã³ïŒæš©å©ïŒ
- ãšã©ãŒçç±ãšå詊è¡åæ°ïŒãã¥ãŒããŠããå ŽåïŒ
åºæ¬çãªæªçšå¯Ÿçã远å ããŠãã ããïŒIP ããšã®ã¬ãŒãå¶éãå¯èœãªã顧客ID æ¯ã®å¶éãã»ããã¢ãããèš±ããªããããã€ãã®æ¢ç¥ IP ç¯å²ã®ã¿åãä»ããçã§ãã
äºéè«æ±ãäºéã¢ã¯ã»ã¹ãæããããããã¹
ã»ãšãã©ã®è«æ±ãã°ã¯èšç®ãã¹ã§ã¯ãªãããŠã§ãããã¯ããäžåºŠã ãå±ããã®ããšæ±ã£ãŠããŸãããšã«èµ·å ããŸãã
éè€æŽæ°ãæãæããã¹ïŒ
- ã¿ã€ã ã¹ã¿ã³ããéé¡ã§éè€æé€ããŠããã å¥ã®ã€ãã³ãã§ãåãéé¡ãããåŸãŸãããå詊è¡ã¯æ°ååŸã«æ¥ãããšããããŸãããããã€ãã®ãŠããŒã¯ã€ãã³ãID ã䜿ã£ãŠãã ããã
- çœ²åæ€èšŒã®åã« DB ãæŽæ°ããŠããã ãŸãæ€èšŒã次ã«ããŒã¹ããããŠè¡åã
- ã€ãã³ãããã®ãŸãŸçå®ãšã¿ãªãçŸåšç¶æ ã確èªããŠããªãã æ¢ã« paidãrefundedãvoid ã®è«æ±æžã«å¯ŸããŠç¡æ¡ä»¶ã« paid ãšããã¹ãã§ã¯ãããŸããã
- åã賌å
¥ã§è€æ°ã®æš©å©ãäœã£ãŠããŸãã å詊è¡ã§éè€è¡ãçãŸããŸãã
subscription_idã«å¯Ÿã㊠"æš©å©ãååšããããšãä¿èšŒãã" ã¢ãããµãŒãã奜ãã¹ãã§ãã - éç¥ãµãŒãã¹ã®ããŠã³ã§ãŠã§ãããã¯ã倱æãããã ã¡ãŒã«ã SMSãSlack ãéããªããããšãã£ãŠèª²éåŠçã倱æãããã¹ãã§ã¯ãããŸãããéç¥ã¯ãã¥ãŒã«ããŠãã³ã¢ã®è«æ±å€æŽãå®å šã«ä¿åãããæåãè¿ããŠãã ããã
ç°¡åãªäŸïŒæŽæ°ã€ãã³ããäºåºŠæ¥ããšãæåã®é ä¿¡ã§æš©å©è¡ãäœãããå詊è¡ã§2çªç®ã®è¡ãäœããã2ã€ã®ã¢ã¯ãã£ãæš©å©ããã§ããŠããŸãäœåãªã·ãŒããã¯ã¬ãžãããä»äžãããŸãã
AppMaster ã§ã®å¯Ÿçã¯ãããŒã®èŠçŽãã§ãïŒãŸãæ€èšŒãã€ãã³ãã¬ã³ãŒãããŠããŒã¯å¶çŽã§æ¿å ¥ãç¶æ ãã§ãã¯ä»ãã§è«æ±æŽæ°ãè¡ããæŽŸçåŠçïŒã¡ãŒã«çïŒã¯éåæã¹ãããã«ããŠå詊è¡åµãé²ããŸãã
çŸå®çãªäŸïŒéè€æŽæ°ãããç¶ç¶èª²éãšãã®åŸã®è¿é
ãã¿ãŒã³ã¯æãããã«èŠããŸããããã³ãã©ãå®å šã«åå®è¡ã§ããããã«ããã°ç®¡çå¯èœã§ãã
顧客ãæé¡ãã©ã³ã«å
¥ã£ãŠãããšããŸããStripe ãç¶ç¶èª²éïŒäŸãã° invoice.paidïŒã€ãã³ããéããŸããããªãã®ãµãŒãã¯åãåãããŒã¿ããŒã¹ãæŽæ°ããŸãã 200 ãè¿ãã®ã«æéããããïŒã³ãŒã«ãã¹ã¿ãŒããDB è² è·ïŒãStripe ã¯å€±æãšèŠãªããŠåãã€ãã³ããåéããŸãã
æåã®é
ä¿¡ã§ã¢ã¯ã»ã¹ãä»äžããå詊è¡ã§ã¯åãã€ãã³ãã§ãããšæ€åºããŠäœãããŸããããã®åŸãè¿éã€ãã³ãïŒäŸãã° charge.refundedïŒãå±ãã¢ã¯ã»ã¹ãåãæ¶ããŸãã
ããŒã¿ããŒã¹ã§ã®ç¶æ ã¢ãã«äŸïŒAppMaster Data Designer ã§äœãããŒãã«ïŒïŒ
webhook_events(event_id UNIQUE, type, processed_at, status)invoices(invoice_id UNIQUE, subscription_id, status, paid_at, refunded_at)entitlements(customer_id, product, active, valid_until, source_invoice_id)
åã€ãã³ãåŸã®ããŒã¿ããŒã¹ç¶æ ã®äŸ
ã€ãã³ã AïŒç¶ç¶èª²éãååé
ä¿¡ïŒåŸïŒwebhook_events ã« event_id=evt_123 ã®æ°è¡ãstatus=processedãinvoices 㯠paid ã«ãentitlements.active=trueãvalid_until ã¯æ¬¡ã®æéã«é²ãã
ã€ãã³ã AïŒå詊è¡ïŒåŸïŒwebhook_events ãžã®æ¿å
¥ããŠããŒã¯å¶çŽã§å€±æãããããã³ãã©ãæ¢ã«åŠçæžã¿ãšæ€åºããã®ã§è«æ±æžãæš©å©ã«å€æŽã¯ãªãã
ã€ãã³ã BïŒè¿éïŒåŸïŒwebhook_events ã« event_id=evt_456 ã®æ°è¡ãinvoices.refunded_at ãã»ãããã status=refundedãentitlements.active=false ãŸã㯠valid_until ãçŸåšã«æŽæ°ããsource_invoice_id ã䜿ã£ãŠäžåºŠã ãåãæ¶ãã
éèŠãªã®ã¯ã¿ã€ãã³ã°ã§ãïŒéè€ãã§ãã¯ã¯ä»äžãåãæ¶ãã®åã«è¡ãããŸãã
ããŒã³ãåã®ã¯ã€ãã¯ãã§ãã¯ãªã¹ã
æ¬çªãŠã§ãããã¯ãæå¹ã«ããåã«ãå®éã®ã€ãã³ããåãåæ°ïŒ2åã§ã10åã§ãïŒéãããŠãè«æ±ã¬ã³ãŒãã1åã ãæŽæ°ãããããšã蚌æããŠãã ããã
ãšã³ãããŒãšã³ãæ€èšŒã®ãã§ãã¯ãªã¹ãïŒ
- ãã¹ãŠã®åä¿¡ã€ãã³ãã¯ãŸãä¿åãããïŒraw payloadãã€ãã³ãIDãã¿ã€ããäœææå»ãçœ²åæ€èšŒçµæïŒãããšãåŸç¶åŠçã倱æããŠã
- éè€ã¯æ©æã«æ€åºããïŒåäžãããã€ãã€ãã³ãIDïŒãã³ãã©ã¯è«æ±ïŒãµãã¹ã¯ïŒæš©å©ã倿Žããçµäºãã
- ããžãã¹æŽæ°ã¯äžåºŠã ãè¡ãããããšã蚌æããïŒè«æ±æžã¹ããŒã¿ã¹1åããµãã¹ã¯ãªãã·ã§ã³ç¶æ 1åãæš©å©ä»äžãŸãã¯åãæ¶ãã¯1åã®ã¿
- 倱æã¯åå®è¡ã«ååãªæ å ±ã§èšé²ãããïŒãšã©ãŒã¡ãã»ãŒãžã倱æããã¹ããããå詊è¡ç¶æ ïŒ
- ãã³ãã©ã¯éããã«å¿çããïŒä¿ååŸã«åé ãè¿ãããªã¯ãšã¹ãå ã§é·æéåŠçããªã
倧ããªå¯èŠ³æž¬æ§ã»ããã¢ããã¯äžèŠã§ãããä¿¡å·ã¯å¿ èŠã§ãããã°ãç°¡åãªããã·ã¥ããŒãã§æ¬¡ã远跡ããŠãã ããïŒ
- éè€é ä¿¡ã®ã¹ãã€ã¯ïŒéåžžã¯ããçšåºŠçºçãããæ¥å¢ã¯ã¿ã€ã ã¢ãŠãããããã€ãé害ã®ãµã€ã³ïŒ
- ã€ãã³ãã¿ã€ãããšã®é«ããšã©ãŒçïŒäŸïŒinvoice payment failedïŒ
- å詊è¡ã«è©°ãŸã£ãŠããã€ãã³ãã®ããã¯ãã°å¢å
- ãã¹ãããïŒæ¯ææžã¿è«æ±æžã ãæš©å©ããªããåãæ¶ãæžã¿ãµãã¹ã¯ã ãã¢ã¯ã»ã¹ãæ®ã£ãŠããïŒ
- åŠçæéã®æ¥å¢
AppMaster ã§æ§ç¯ããå Žåã¯ã€ãã³ãä¿åãå°çšããŒãã«ã«ãããåŠçæžã¿ã«ãããæ±ºå®ã Business Process ã®åäžã®ååãã€ã³ãã«ããŠãã ããã
次ã®ã¹ãããïŒãã¹ããç£èŠããããŠããŒã³ãŒãã§ã®æ§ç¯
ãã¹ãã§åªçæ§ã¯å®èšŒãããŸããããããŒç³»ã ãã§ãªããåãã€ãã³ããäœåºŠãåçããé äžåã§éããã¿ã€ã ã¢ãŠããçºçãããŠãããã€ãã«å詊è¡ãããŠãã ããã2åç®ã»3åç®ã»10åç®ã®é ä¿¡ã§äœãå€ãããªãããšãæåŸ ãããŸãã
ããã¯ãã£ã«ã®èšç»ãããŠãããŸãããããã°ä¿®æ£ãã¹ããŒã倿Žããããã€ãé害ã®åŸã§éå»ã€ãã³ããååŠçããããªãããšããããŸãããã³ãã©ãçã«åªçã§ããã°ãããã¯ãã£ã«ã¯ãåããã€ãã©ã€ã³ã§ã€ãã³ããåçãããã ãã§éè€ãäœããã«æžã¿ãŸãã
ãµããŒãããŒã åãã®ç°¡åãªã©ã³ããã¯ãçšæããŠãã ããïŒ
- ã€ãã³ãID ãèŠã€ããŠåŠçæžã¿ã確èªãã
- è«æ±æžããµãã¹ã¯ãªãã·ã§ã³ã¬ã³ãŒãã®ç¶æ ãšã¿ã€ã ã¹ã¿ã³ãã確èªãã
- æš©å©ã¬ã³ãŒãïŒãã€ããªãä»äžããããïŒã確èªãã
- å¿ èŠãªããã®åäžã®ã€ãã³ãID ã«å¯ŸããŠå®å šãªååŠçã¢ãŒãã§åå®è¡ãã
- ããŒã¿äžæŽåãããå Žåã¯æ¯æ£åŠçœ®ã1ã€ã ãé©çšããŠèšé²ãã
ãã€ã©ãŒãã¬ãŒããå€ãæžããã«å®è£ ããããªããAppMasterïŒappmaster.ioïŒã¯ã³ã¢ããŒãã«ãã¢ããªã³ã°ããããžã¥ã¢ã«ãª Business Process ã§ãŠã§ãããã¯ãããŒãäœãã€ã€å®éã®ããã¯ãšã³ããœãŒã¹ã³ãŒããçæã§ããŸãã
ãŸãã¯ããŒã³ãŒãçæããã¯ãšã³ãã§ãŠã§ãããã¯ãã³ãã©ã端ãã端ãŸã§äœããåè©Šè¡æã«ãå®å šã«åãããšã確èªããŠãããã©ãã£ãã¯ãšåçãã¹ã±ãŒã«ãããŠãã ããã
ãããã質å
éè€ããŠãŠã§ãããã¯ãå±ãã®ã¯æ£åžžãªåäœã§ãããããã€ãã¯ãå°ãªããšãäžåºŠïŒat least onceïŒãé ä¿¡ãä¿èšŒããèšèšã§ããšã³ããã€ã³ããã¿ã€ã ã¢ãŠãããã 5xx ãè¿ãããæ¥ç¶ãåãããšãåãã€ãã³ããæåå¿çãè¿ããŸã§åéããŸãã
ãããã€ããçºè¡ããäžæã® ã€ãã³ãID ã䜿ã£ãŠãã ãããéé¡ãã¿ã€ã ã¹ã¿ã³ãã顧客ã¡ãŒã«ã§ã¯ãªãã€ãã³ãIDãä¿ç®¡ãããŠããŒã¯å¶çŽãèšããã°å詊è¡ã¯å³åº§ã«æ€åºããŠå®å šã«ç¡èŠã§ããŸãã
è«æ±æžããµãã¹ã¯ãªãã·ã§ã³ãæš©å©ãæŽæ°ããåã«ã€ãã³ãããŸãæ¿å ¥ããŠãã ãããæ¿å ¥ãã€ãã³ãIDã®éè€ã§å€±æãããåŠçãäžæ¢ããŠæåãè¿ããå詊è¡ã§äºéæŽæ°ãèµ·ããªãããã«ããŸãã
é å»¶å詊è¡ã調æ»ã®ã«ãã¬ããžãèããŠååãªæéä¿ç®¡ããŠãã ãããå®åã§ã¯ 30ïœ90æ¥ ãæšæºã§ãç°è°ç³ç«ãŠããã£ãŒãžããã¯ãé·æãµã€ã¯ã«ãããå Žå㯠6ïœ12ãæ ã«äŒžã°ããå€ãè¡ã¯ããŒãžããŠããŒãã«æ§èœãä¿ã¡ãŸãã
ã¯ããçœ²åæ€èšŒã¯å¿ é ã§ãã眲åã確èªããŠããããŒã¹ãšå¿ é ãã£ãŒã«ãæ€èšŒãè¡ã£ãŠãã ããã眲åãç¡å¹ãªãæåŠããè«æ±å€æŽã¯æžã蟌ãŸãªãã§ãã ãããéè€æé€ã ãã§ã¯åœé ããããpaidãã€ãã³ãããå®ããŸããã
ã€ãã³ããå®å šã«ä¿åãããããã«åé ãè¿ããéãåŠçã¯ããã¯ã°ã©ãŠã³ãã§è¡ã£ãŠãã ããããªã¯ãšã¹ãå ã§å€§éåŠçãå€éšAPIåŒã³åºããPDFçæãªã©ãè¡ããšã¿ã€ã ã¢ãŠããå¢ããå詊è¡ãšéè€ã®ãªã¹ã¯ãé«ãŸããŸãã
ç¶æ ãåé²ããã倿Žã®ã¿é©çšããå€ãã€ãã³ãã¯ç¡èŠããŠãã ãããã¿ã€ã ã¹ã¿ã³ããæ¯èŒããããã¹ããŒã¿ã¹åªå 床ïŒããšãã° refunded 㯠paid ãäžæžããã¹ãã§ã¯ãªããcanceled 㯠active ãäžæžãïŒã䜿ããŸããå€ãã€ãã³ãã¯ç¶æ ãæ»ããªãã§ãã ããã
æ¯åæ°ããæš©å©ã¬ã³ãŒããäœããªãã§ãã ãããããŠãŒã¶ãŒÃ補åÃæéïŒãŸãã¯ãµãã¹ã¯ãªãã·ã§ã³ïŒããšã«1ã€ã®æš©å©ãä¿èšŒãããã¢ãããµãŒãã«ãŒã«ã䜿ããæ¥ä»ãäžéãæŽæ°ããã©ã®ã€ãã³ãIDã倿ŽãåŒãèµ·ãããããèšé²ããŸãã
è«æ±æžã»ãµãã¹ã¯ãªãã·ã§ã³ã»æš©å©ã®å€æŽã1ã€ã®ããŒã¿ããŒã¹ãã©ã³ã¶ã¯ã·ã§ã³å ã§è¡ã£ãŠãã ãããããããããšã§ãè«æ±æžã¯æ¯ææžã¿ã«ãªã£ããã¢ã¯ã»ã¹ãä»äžãããŠããªããã®ãããªåæç¶æ ãé²ããŸãã
ã§ããŸããããåããã¿ãŒã³ã¯ãWebhookEvents ã¢ãã«ã«äžæãªã€ãã³ãIDãæãããBusiness Process ã§ãæ¢ã«èŠããïŒãããã§ãã¯ããŠæ©æçµäºããæ¹æ³ã§ããè«æ±æžïŒãµãã¹ã¯ïŒæš©å©ã Data Designer ã§æç€ºçã«ã¢ããªã³ã°ããã°ãå詊è¡ããªãã¬ã€ã§éè€è¡ãå¢ããã®ãé²ããŸãã


