İçeriğe atla
ÖzelliklerFiyatlandırmaİş OrtaklığıBlogYardımHakkımızdaİletişim
BaşlaGiriş Yap
Bloga Dön
industry2026-05-2312 dk okuma

Müşteri öğle yemeğini ödedi, yedi, çıktı — bir saat sonra Stripe Connect webhook retry'ı sipariş'i "failed" yapıp iade ettirdi

Lizbon'un Alfama mahallesinde 41 yaşında tapas barı sahibi Tomás'ın Salı öğleyin 12 kişilik turist grubu €87 öğle yemeği için Apple Pay tıkladı — 3DS step-up bir kez "temporary error" verdi, sonra retry'da başarılı oldu. KDS "paid" gösterdi, grup yedi, ayrıldı. 48 dakika sonra Tomás'ın telefonu push notification ile titredi: "Sipariş ödeme BAŞARISIZ — iade gerekebilir". Stripe Dashboard `payment_intent: succeeded` diyordu ama thMenu admin paneli `payment_status: failed`. Tomás panelin daha yüksek sesli sinyaline güvendi, refund tetikledi, müşteri çoktan gitmişti. 2 hafta sonra muhasebe reconciliation'unda €87 net kayıp — müşteri ödemiş + yemiş + refund almıştı. Forensik: Stripe `payment_intent.payment_failed` (3DS first-attempt fail) event'i thMenu ilk seferde acknowledge etmediği için retry queue'ya düştü, 48 dakika sonra delivered olunca `flipPaymentStatus` zaten-`paid` order'ı `failed`'e flip etti. **PR #646 batch VI F1** fix: `FLIP_GUARD` state-machine tablosu (paid ← {pending, requires_action, processing, failed}; failed ← {pending, requires_action, processing} — paid FROZEN; refunded ← {paid}). Inline `AND ${guard}` her UPDATE'te; `meta.changes === 0` → log + 200 OK (Stripe retry durdurmalı; error response retry tetikler ve gürültüyü amplify eder). Pattern: webhook sink'lerde state machine ZORUNLU; her operator-visible status field forward-only state machine gerektirir.

th

thMenu Ekibi

thmenu.com

Faydalı buldunuz mu? Paylaşın.