Payment intent mimarisi gateway charge çağrısını neden döver?
Yazan Selim Destanci
Kurucu
Klasik gateway’ler ödemeyi bir fonksiyon çağrısı olarak sunar: charge gönder, başarı ya da hata al. Bu soyutlama, gerçeklik araya girene kadar tutar — bankanın çekip çekmediğini bilmediğiniz bir timeout, ikinci acquirer’da bir retry, kısmi bir capture, kendisi kısmi olan bir capture’a karşı iade. Bir boolean bu hikâyeyi taşıyamaz.
Intent ise ödemeyi uzun ömürlü bir durum makinesi olarak modeller: başlatıldı, işleniyor, 3-D Secure bekliyor, yetkilendirildi, kısmen capture edildi, capture edildi, iade edildi — her yasal geçiş tanımlı, gerisi reddedilir. Kod, yetkilendirilmemiş bir ödemeyi “kazara” iade edemez; çünkü öyle bir geçiş yoktur.
En az takdir edilen durum, dürüst olanıdır: mutabakat-bekliyor. Banka zaman aşımına düştüğünde dürüst durum “bilinmiyor”dur; aksini varsaymak çift çekimlerin tarifidir. Intent orada park edebilir; bir süpürme bankaya gerçekte ne olduğunu sorar — ancak ondan sonra ilerler. Charge çağrısının park edecek yeri yoktur; bir yöne yalan söylemek zorundadır.
Intent çok-acquirer yönlendirmeyi de doğallaştırır. Birinci deneme reddedilir; cascade ikinci denemeyi aynı intent altında ateşler — aynı idempotency kapsamı, aynı denetim izi, garanti tek çekim. Charge-çağrılı gateway’lerde her retry yepyeni bir ödemedir; bunları tek müşteri hikâyesine dikmek sizin probleminiz olur.
Son olarak intent her geçişte olay yayar — hash-zincirleyebileceğiniz, denetleyip yeniden oynatabileceğiniz yalnız-ekle bir tarih. Bu yalnız uyum hijyeni değildir; webhook’ların, ledger’ın ve itiraz kanıtının üzerine kurulduğu zemindir. Gateway size bir cevap verdi. Intent size bir kayıt verir.