𝗦𝘁𝗼𝗽 𝗥𝗲𝗳𝘂𝗻𝗱𝗶𝗻𝗴 𝗣𝗮𝘆𝗺𝗲𝗻𝘁𝘀 𝗬𝗼𝘂 𝗦𝗵𝗼𝘂𝗹𝗱 𝗡𝗲𝘃𝗲𝗿 𝗛𝗮𝘃𝗲 𝗖𝗵𝗮𝗿𝗴𝗲𝗱
Birçok geliştirici, karttan anında tahsilat yapan bir ödeme akışı yayınlar. Ardından, stok kontrolleri veya dolandırıcılık kontrolleri gibi sipariş doğrulama işlemleri gerçekleştirirler.
Doğrulama başarısız olursa, kod bir iade işlemi başlatır.
Bu durum müşterileriniz için sorunlar yaratır. Bir tahsilat görürler ve günler sonra bir iade görürler. Şirketinizin güvenilmez olduğunu düşünürler. Paralarının takılı kaldığını sanırlar.
İadelerin gerçek maliyetleri vardır:
- Müşteriler iki ayrı işlem gördüklerinde güven kaybederler.
- İadelerin banka ekstresinde görünmesi 5 ila 10 gün sürer.
- İşlem ücretleri veya döviz kurları nedeniyle para kaybedebilirsiniz.
- Kart ağları, sık tekrarlanan tahsilat ve iade modellerini yüksek risk olarak işaretler.
Çözüm, authorize ve capture modelini kullanmaktır.
Çoğu eğitim, parayı anında tahsil etmeyi (capture) öğretir. Bunun yerine, önce fonlar üzerinde bir bloke (hold) oluşturmalısınız. Bir bloke, parayı hareket ettirmeden kart üzerinde bekler. Eğer doğrulamanız başarısız olursa, sadece blokeyi iptal edersiniz. Müşterinin ekstresine hiçbir tahsilat yansımaz.
Stripe'da bunu capture_method değerini manual yaparak gerçekleştirirsiniz.
Yeni akış şu şekilde çalışır:
- Manuel capture ile bir
PaymentIntentoluşturun. - Fonlar yetkilendirilir (authorized) ancak hareket ettirilmez.
- Sipariş doğrulamanızı çalıştırın.
- Sipariş geçerliyse, ödemeyi tahsil edin (capture).
- Sipariş başarısız olursa, intent'i iptal edin.
Bu yaklaşım birkaç avantaj sunar:
- İade ihtiyacından kaçınmış olursunuz.
- İptal edilen bir yetkilendirme, müşterinin ekstresinden doğrudan silinir.
- Kısmi tahsilatlar (partial captures) yapabilirsiniz. Bir müşteri üç ürün alıyorsa ancak biri stokta yoksa, yalnızca iki ürünün tutarını tahsil edersiniz.
- Loglarınızda temiz bir denetim izi (audit trail) oluşturursunuz.
Çoğu büyük ödeme sağlayıcısı aynı mantığı kullanır.
- Stripe
capture_method: manualkullanır. - Adyen manuel capture gecikmeleri kullanır.
- Braintree
submitForSettlement: falsekullanır. - PayPal
intent: AUTHORIZEkullanır.
Müşteri ödeme butonuna bastıktan sonra iş mantığınızın herhangi bir parçası başarısız olabiliyorsa bu yöntemi kullanın. Riskli kontrollerinizi yetkilendirme (authorization) ve tahsilat (capture) arasına taşıyın. Bu, para hareketlerinizi temiz tutar ve müşterilerinizi mutlu eder.
Kaynak: https://dev.to/jguillaumesio/stop-refunding-payments-you-should-never-have-charged-4d7m