Berhenti Melakukan Refund Pembayaran yang Seharusnya Tidak Perlu Anda Tagih
Banyak pengembang merilis alur checkout yang langsung menagih kartu. Kemudian, mereka menjalankan validasi pesanan seperti pengecekan stok atau pengecekan penipuan.
Jika validasi gagal, kode tersebut akan mengeluarkan refund.
Ini menimbulkan masalah bagi pelanggan Anda. Mereka melihat ada tagihan dan kemudian refund beberapa hari kemudian. Mereka menganggap perusahaan Anda tidak tepercaya. Mereka mengira uang mereka tertahan.
Refund memiliki biaya nyata:
- Pelanggan kehilangan kepercayaan saat mereka melihat dua transaksi terpisah.
- Refund membutuhkan waktu 5 hingga 10 hari untuk muncul di rekening koran.
- Anda mungkin kehilangan uang karena biaya transaksi atau nilai tukar mata uang.
- Jaringan kartu menandai pola penagihan-dan-refund yang sering terjadi sebagai risiko tinggi.
Solusinya adalah menggunakan model authorize dan capture.
Sebagian besar tutorial mengajarkan Anda untuk melakukan capture uang secara instan. Sebaliknya, Anda sebaiknya melakukan hold (penahanan) pada dana terlebih dahulu. Hold tersebut tertahan di kartu tanpa memindahkan uangnya. Jika validasi Anda gagal, Anda cukup membatalkan hold tersebut. Tidak ada tagihan yang akan muncul di rekening koran pelanggan.
Di Stripe, Anda melakukan ini dengan mengatur capture_method ke manual.
Alur barunya bekerja seperti ini:
- Buat
PaymentIntentdengan manual capture. - Dana diotorisasi tetapi tidak dipindahkan.
- Jalankan validasi pesanan Anda.
- Jika pesanan valid, lakukan capture pembayaran.
- Jika pesanan gagal, batalkan intent tersebut.
Pendekatan ini menawarkan beberapa keuntungan:
- Anda menghindari kebutuhan untuk melakukan refund.
- Otorisasi yang dibatalkan akan hilang begitu saja dari rekening koran pelanggan.
- Anda dapat melakukan partial capture. Jika pelanggan membeli tiga barang tetapi satu barang habis, Anda hanya melakukan capture untuk jumlah dua barang tersebut.
- Anda membuat jejak audit yang bersih di log Anda.
Sebagian besar penyedia pembayaran utama menggunakan logika yang sama.
- Stripe menggunakan
capture_method: manual. - Adyen menggunakan manual capture delays.
- Braintree menggunakan
submitForSettlement: false. - PayPal menggunakan
intent: AUTHORIZE.
Gunakan metode ini jika ada bagian dari logika bisnis Anda yang dapat gagal setelah pelanggan menekan tombol bayar. Pindahkan pengecekan berisiko Anda di antara tahap otorisasi dan capture. Ini menjaga pergerakan uang Anda tetap bersih dan pelanggan Anda tetap senang.
Sumber: https://dev.to/jguillaumesio/stop-refunding-payments-you-should-never-have-charged-4d7m