Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Payments Service: Fake Ödeme Sağlayıcısı, Idempotent Charge ve Webhook Callback'i
Payments, ödeme sağlayıcısına siparişten türetilen bir Idempotency-Key ile charge gönderiyor, POST'u HTTP katmanında tekrar etmiyor ve zaman aşımını başarısızlık değil bilinmeyen sonuç sayıyor; sonucu imzalı ve replay korumalı bir webhook ya da reconciliation job'ı belirliyor. Sağlayıcının modeli bir anti-corruption layer'da kalıyor; iptal edilmiş siparişe geç gelen ödeme uçtan uca iadeye dönüşüyor.
Webhook Almak: İmza Doğrulama, Replay Koruması, Hızlı 2xx ve Idempotent İşleme
Gelen webhook'un imzasını model binding'den önce ham gövde üzerinden ve sabit süreli karşılaştırmayla doğrula, timestamp toleransı ve webhook-id ile replay'i engelle, event'i inbox'a yazıp hemen 200 dön ve işlemeyi arka planda idempotent yap. Bookstore'da payment.succeeded ile bilinmeyen ödeme sonuçlarını kapatıyoruz.
Webhook Göndermek: Standard Webhooks, İmzalama, Outbox ile Teslimat ve Retry Takvimi
Webhook'u request içinde değil outbox'tan, arka planda gönder; her isteği Standard Webhooks header'larıyla (webhook-id, webhook-timestamp, webhook-signature) HMAC-SHA256 ile imzala, günlere yayılan bir retry takvimi uygula ve hep hata veren endpoint'i kapat. Bookstore'un kurumsal müşterilerine order.shipped event'ini bu şekilde teslim ediyoruz.