Ödeme Yaşam Döngüsü ve Confirm
Ödeme neden iki aşamalı ilerler ve confirm adımı hangi riskleri yönetir?
Neden doğrudan "pay" değil de "confirm" var?
Ödeme sistemlerinde tek adımlı "pay" yaklaşımı yerine iki aşamalı model tercih edilir:
- Payment oluşturma: İş niyeti ve tutar hazırlanır.
- Confirm: Ödeme yöntemi, cihaz/kullanıcı bağlamı ve yönlendirme kararlarıyla işlem tetiklenir.
Bu ayrım sayesinde:
- Risk/fraud kontrolleri confirm anında uygulanır.
- Kullanıcıdan toplanan son veriler (kart, adres, kimlik sinyalleri) güvenli şekilde işlenir.
- Akıllı yönlendirme veya alternatif sağlayıcı denemeleri daha kontrollü yapılır.
Tipik yaşam döngüsü
CREATEDREQUIRES_PAYMENT_METHODREQUIRES_ACTION(ör. ek doğrulama)PROCESSINGSUCCEEDEDveyaEXPIRED- Gerekirse
REFUNDED
Confirm aşamasında neler olur?
- Ödeme yöntemi bağlanır.
- Payer identity (IP/user-agent vb.) risk sinyali olarak değerlendirilir.
- Routing stratejisi seçilir.
- Sonuç payment + charge katmanlarında izlenebilir şekilde kayda alınır.
Payer bilgileri ve adresler nerede toplanır?
Bu noktada iki farklı confirm modeli vardır:
1) Payment confirm (doğrudan API akışı)
- Ana odak: ödeme yöntemini bağlayıp işlemi başlatmaktır.
- Risk/fraud sinyali olarak payer identity taşınır.
- Fatura/teslimat adresi gibi kullanıcı form verileri bu adımın merkezinde değildir.
2) Checkout session confirm (hosted akış)
- Kullanıcının formdan girdiği payer bilgileri bu aşamada ele alınır.
- E-posta, ad, telefon ve adres verileri checkout bağlamında toplanabilir.
- Gerekirse
shipping_same_as_billingyaklaşımı ile adres sadeleştirmesi yapılır.
Kısa cevap: Evet, adres toplama vardır; ancak bu daha çok checkout confirm akışının sorumluluğudur.
Confirm neden ayrı bir adım olarak korunur?
- İş niyeti ile tahsilat tetikleme ayrışır.
- Güvenlik sinyalleri işlem anında değerlendirilir.
- Yönlendirme (routing) ve fallback kararları confirm anında işletilir.
- Operasyon ekipleri için daha iyi izlenebilirlik sağlar.
Uygulama önerisi
- Siparişi "ödendi" durumuna geçirirken sadece frontend sonucuna güvenme.
- Sunucu tarafında payment/charge durumunu doğrula.
- Asenkron event/webhook sinyallerini nihai mutabakat için kullan.