Webhook tekrarlarında çift sipariş oluşmasını nasıl önlüyorsunuz?

0 Yanıt 15 Görüntülenme
Puanlayanlar
Katılımcılar
Konuyu Açan #1
Ödeme sağlayıcısı veya pazaryeri aynı bildirimi yeniden gönderince entegrasyonun ikinci kez sipariş ya da stok hareketi oluşturması can sıkıcı olabiliyor. Özellikle yanıt zaman aşımına uğradığında karşı taraf bildirimi tekrar deneyebiliyor; ilk işlem aslında tamamlanmış olsa bile.

Benim için temel önlem, sağlayıcının olay kimliğini veritabanında benzersiz tutmak. Önce olay kaydını ekleyip, sadece ilk kez geldiyse işlemek gerekiyor:

KOD
1234
INSERT INTO webhook_events (provider, event_id, received_at)
VALUES (?, ?, NOW())
ON DUPLICATE KEY UPDATE event_id = event_id;


Burada (provider, event_id) üzerinde UNIQUE indeks olmalı. Ekleme sonucuna göre olayın daha önce işlendiğini anlayıp sipariş oluşturma ve stok düşme adımlarını tekrarlamamak mümkün. Sipariş güncellemesiyle olay kaydını da mümkün olduğunca aynı veritabanı transaction’ında tutarım; böylece yarıda kalan işlemler tutarsızlık bırakmaz.

Bir de olayları doğrudan uzun süren işlere bağlamak yerine önce kaydedip kuyruğa aktarmak faydalı. Bildirimler sırasız gelebileceğinden, sipariş durumunu körlemesine değiştirmek yerine mevcut durumla gelen durumu karşılaştırmak gerekiyor. Örneğin “ödendi” durumuna geçmiş siparişi, gecikmiş bir “ödeme bekleniyor” olayıyla geri almamak lazım.

Siz tekrar eden webhook’ları nasıl ele alıyorsunuz; sağlayıcının olay kimliğini mi kullanıyorsunuz, yoksa başka bir yönteminiz var mı?

Yanıt vermek için giriş yapmış olmalısınız.

0 alıntı seçildi