Cara yang Benar dalam Menyiapkan BayarCash di Laravel
Jika Anda membangun SaaS untuk pasar Malaysia, Anda pada akhirnya akan membutuhkan FPX. BayarCash adalah pilihan yang umum.
SDK bukanlah masalahnya. Masalahnya adalah arsitektur Anda. Jika Anda memanggil SDK dari controller atau menuliskan kode status secara hardcode di view, Anda akan menghadapi masalah di produksi.
Saya telah mengimplementasikan BayarCash di tiga aplikasi Laravel yang berbeda. Berikut adalah pola yang selalu berhasil.
Istilah Kunci yang Harus Dikuasai
- Portal: Konfigurasi checkout merchant Anda. Gunakan
portal_key. - API Token: Ini mengautentikasi panggilan keluar Anda.
- Secret Key: Ini menandatangani payload Anda dan memverifikasi webhook. Jaga kerahasiaannya.
- Payment Intent: Anda mengirimkan tagihan (charge), menerima URL, lalu mengalihkan (redirect) pengguna.
- Channel: Selalu gunakan konstanta SDK daripada angka mentah.
Strukturkan Kode Anda dengan Baik
Kode domain Anda tidak boleh melihat payload BayarCash mentah. Anda memerlukan tiga lapisan:
- Client wrapper yang tipis: Ini menangani konfigurasi dan menyediakan metode bertipe (typed methods).
- Gateway: Ini mengimplementasikan sebuah interface dan menggunakan bahasa domain Anda.
- Factory: Ini memilih gateway yang aktif sehingga Anda dapat mengganti BayarCash dengan Stripe dengan mudah.
Binding Fake Gateway
Jika Anda tidak menyediakan API token, ikatlah (bind) provider Fake di service container Anda. Ini memungkinkan pengujian Anda berjalan tanpa jaringan dan memungkinkan build lokal berjalan tanpa penagihan aktif.
Praktik Terbaik Webhook
Webhook adalah sumber kebenaran (source of truth) Anda. Ikuti aturan ini untuk menghindari kekacauan di produksi:
- Bebas CSRF: Rute webhook Anda harus melewati perlindungan CSRF.
- Verifikasi Tanda Tangan: Selalu verifikasi tanda tangan sebelum melakukan hal lainnya.
- Aturan 200: Setelah Anda memverifikasi tanda tangan, kembalikan respons 2xx.
- Hindari Pengulangan (Retries): Jika Anda mengembalikan error 500, BayarCash akan mencoba ulang webhook Anda sebanyak 40 kali. Ini dapat membuat server Anda crash. Catat (log) error tersebut, tetapi tetap kembalikan respons 200.
- Idempotensi: Pastikan logika Anda dapat menangani webhook yang sama dua kali tanpa membuat pesanan duplikat.
Daftar Periksa untuk Keberhasilan
• Gunakan order_number sebagai kunci korelasi. Jaga agar tetap di bawah 30 karakter.
• Simpan catatan lokal berstatus pending sebelum Anda mengalihkan pengguna.
• Gunakan callback server-ke-server sebagai otoritas utama Anda.
• Gunakan return URL sebagai jaring pengaman untuk rekonsiliasi.
• Segera petakan kode status integer ke Enum Anda sendiri.
Integrasi pembayaran bersentuhan dengan uang sungguhan. Uji verifikasi tanda tangan dan idempotensi Anda lebih dari hal lainnya.
Sumber: https://dev.to/nasrulhazim/setting-up-bayarcash-fpx-in-laravel-the-right-way-4b2n
