GERÇEKTEN ULAŞAN WEBHOOK'LAR: HMAC, RETRY VE IDEMPOTENCY

Her payment webhook entegrasyonunun yanlış yaptığı üç şey. Baynoy'un gönderdiği sözleşme ve nedeni.

Developers·2026-04-01·6 dk okuma
Gerçekten ulaşan webhook'lar: HMAC, retry ve idempotency

Her payment webhook'un üç garantisi gerekir: authenticity (istek gerçekten bizden geldi), at-least-once teslimat (sessizce kaybolan event yok) ve idempotency (yeniden teslimatlar DB'nizi çift ücretlendirmez).

Authenticity: her Baynoy webhook'u X-Baynoy-Signature header gönderir — endpoint'inizin gizli anahtarıyla sha256(timestamp + '.' + body). Timestamp 5 dakikadan eskiyse (replay savunması) veya imza constant-time karşılaştırma ile eşleşmiyorsa reddedin. Stripe'ın kullandığı tam formatı izliyoruz, mevcut Stripe doğrulama middleware'i değişmeden çalışır.

At-least-once: 1d, 5d, 30d, 2sa, 12sa, 24sa exponential backoff ile yeniden deneriz — altı deneme tavanlı. Her deneme baynoy_webhook_deliveries tablosuna response status ile satır yazar. Dashboard'daki replay-from-UI butonu aynı delivery pipeline'a vurur; özel yol yok.

Idempotency: her event event.id taşır (UUIDv7 — sıralanabilir, monoton artan). İlk alındığında persist edin ve unique constraint ile DB seviyesinde duplicate'leri reddedin. Yeniden göndereceğiz. Constraint sizin güvenlik ağınız.

Üç satır middleware ile 6 saatlik bir outage'ı tek bir ödeme bildirimini bile kaybetmeden atlatan bir webhook handler'ınız olur.

Yazı çıktığında haberdar olmak istersen aşağıdan kayıt ol.