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

Aboneliği 14 gün içinde iptal ettim — bir refund aldım, sonra ikinci bir refund daha. €99 iki kez geri yatırıldı (Stripe webhook retry + missing Idempotency-Key)

Valencia'da 42 yaşında tapas bar sahibi Carlos, Diamond aboneliği 12 gün önce yükselttikten sonra fikrini değiştirip iptal ediyor. Pazar günü €99 refund alıyor — Çarşamba günü banka uygulaması yine "thMenu €99 refund" pingliyor. Tek bir iptal, dört gün arayla iki ayrı Refund object. Forensik: Stripe webhook handler chain'inin (4) D1 sync veya (5) cache-purge adımı transient 5xx aldı → handler 500 döndü → Stripe webhook'u 1 saniye sonra retry etti → INSIDE the chain `issueRefund()` ikinci kez Stripe'a `POST /refunds` attı → outbound POST'ta Idempotency-Key yoktu → Stripe ikinci Refund object'i yarattı. **PR #661 batch XI F2** üç katmanlı fix: (1) local `stripeApi()` helper'a `opts.idempotencyKey` ekle, (2) `issueRefund()` artık `eventId: string` parametresi alıyor (compile-time enforcement), (3) `stripeClaimKey(eventId, "refund")` ile deterministik 32-char key türetilir → Stripe 24h server-side dedup. Pattern: her outbound state-changing POST stable upstream identifier'dan türetilmiş Idempotency-Key taşımalı.

th

thMenu Ekibi

thmenu.com

Faydalı buldunuz mu? Paylaşın.