Razorpay webhook aynı ödemeyi iki kez krediye edebilir mi?

Razorpay webhook'ları 'en az bir kez' (at-least-once) ilkesiyle çalışır. Eğer endpoint'in yanıtı yavaşsa veya kaybolursa, aynı payment.captured olayı tekrar gelir, X-Razorpay-Event-Id aynı kalır. Ama bunu kontrol etmezsen, her webhook'ta wallet += amount çalışır ve her seferinde 200 dönersin. Sonuç? Bir ödeme üç kez krediye edilir.

Pritom14'ün 50 saniyelik demo'sunda tam olarak bu görülüyor. 20 satırlık Flask handler, imzayı kontrol ediyor ama event ID'yi saklamıyor. carbon-layer aracı 1.000 signed payment.captured webhook'u, her biri 3 kez gönderir. Sonuç: 1.000 unique event, 3.000 kredi. Başarısız.

Fix basit: event ID'yi bir tabloda unique key ile sakla, kredinin aynı transaction'ında. Test tekrar çalıştırıldığında: 1.000 event, 1.000 kredi. Başarılı.

Praktik olarak, webhook handler'ında ilk kontrol event ID'nin daha önce işlenip işlenmediği olmalı. Eğer işlenmişse, 200 döndür ama kredi yapma. Böyle duplicate webhook'lar sorun olmaz.


       


       
       
       


       

YouTube videosu: YouTube Videosu


Özet: Razorpay webhook'larını idempotent yap. Event ID'yi veritabanında sakla ve kontrol et. Aksi halde müşteriler istemeden fazla kredi alır.

konu hakkında tepkinizi verebilirsiniz