Kami menyelenggara bayarkit, pustaka sumber terbuka dengan adapter untuk empat belas gateway pembayaran Malaysia. Menulisnya bermakna membaca dokumen, SDK rasmi dan plugin setiap gateway baris demi baris, dan menjalankan bayaran sandbox sebenar bila boleh. Halaman ini menyenaraikan apa yang berbeza bagi pembangun yang menyambungkannya. Ia tidak membandingkan yuran, tempoh bayaran atau kelulusan, kerana kami belum mengukurnya.
Setiap perkara membawa satu daripada dua label: diukur (kami menjalankan bayaran pada sandbox pada Oktober 2026) atau didokumen (ditulis dari sumber rasmi, belum dijalankan terhadap gateway). Sumbernya dalam repositori bayarkit, dalam gateways/registry.json dan satu spesifikasi bagi setiap gateway.
Apa yang perlu disemak sebelum memilih
- Unit jumlah. Sesetengah gateway menerima sen integer (
1050), yang lain ringgit berperpuluhan ("10.50"). Tersilap campur mengenakan 100 kali terlalu banyak atau terlalu sedikit. - Tandatangan callback. Skemanya dari HMAC dan RSA hingga MD5 dan SHA-256 biasa. Sesetengahnya menandatangani badan mentah, jadi badan yang disiri semula dari JSON yang dihurai tidak pernah lulus. Satu hanya menghantar token tetap.
- Pertanyaan status. Bolehkah pelayan anda bertanya status bayaran kepada gateway, dan adakah jawapan itu ditandatangani? Tanpa pertanyaan, callback yang diulang sukar dikesan.
- Sandbox. Sama ada ia wujud, sama ada ia meliputi FPX, dan sama ada ia berkelakuan seperti dokumen.
- Balasan callback. Sesetengah gateway mengharapkan balasan tepat, seperti
OKatauRECEIVEOK, dan menghantar semula sehingga mendapatnya.
Diukur pada sandbox
toyyibPay
- Jumlah dalam sen integer; RM1.00 diterima walaupun dokumen menyebut "lebih daripada RM1.00". (diukur)
- Callback tiba sebagai
multipart/form-data, dan jawapan API dipulangkan sebagaitext/htmldengan tab di hadapan. (diukur) - Bil tanpa transaksi, dan secret key yang salah, kedua-duanya menjawab teks
No data found!. (diukur) - Kami mengira tujuh tempat sandbox berbeza daripada dokumen; README bayarkit menyenaraikannya.
Billplz
- Callback dan ubah hala tidak membawa rujukan anda: cari pesanan ikut id bil yang disimpan semasa checkout. (diukur)
- Bayaran gagal tetap menghantar callback, dengan
paid=false. (diukur) - X Signature menyusun rentetan
key+valueyang dicantum, bukan kunci; perkataan "sort keys" dalam dokumen memberi HMAC berbeza daripada plugin rasmi. (didokumen)
Bayarcash
- Secret key dikongsi oleh setiap portal dalam satu akaun, dan transaksi menamakan portalnya ikut nama. Beri setiap portal nama unik dan semaknya. (diukur)
- Id checkout ialah payment intent: bacanya di
/payment-intents/{id}, yang menjawab 201 untuk bacaan. (diukur) - Jumlah dalam ringgit dengan dua perpuluhan (
"25.00"). (didokumen, SDK rasmi)
Stripe (Malaysia)
- Bayaran FPX yang gagal tidak menghantar event
checkout.session: sesi kekal terbuka sehingga tamat tempoh. (diukur) - Minimum dalam MYR ialah RM2.00. Di bawahnya, ralat menyalahkan jenis kaedah bayaran, bukan jumlah. (diukur)
- FPX memerlukan akaun Stripe Malaysia, MYR dan bayaran sekali sahaja. (didokumen)
Dari dokumen rasmi, belum diukur
- CHIP: jumlah dalam sen; callback ditandatangani dengan RSA ke atas badan mentah; URL callback tidak boleh mengandungi port, walaupun
:443. Mod ujian mensimulasikan bank dan tidak menghala ke bank sebenar. - senangPay: peniaga dipindahkan ke platform DOKU, jadi integrasi baharu memakai API DOKU dengan tandatangan header
HMACSHA256=. Jumlah dalam ringgit; bayaran hanya boleh ditanya 60 saat selepas selesai. - iPay88: kunci HMAC-SHA512 juga bahagian pertama mesej yang ditandatangani. Pertanyaan status menjawab teks biasa: hanya rentetan tepat
00bermakna dibayar. - Fiuu: jumlah dalam ringgit; tandatangan callback ialah MD5 berganda dengan secret key, dan mata wang callback boleh tiba sebagai
RM, bukanMYR. - 2C2P: jumlah dalam ringgit dengan lima perpuluhan; hanya notifikasi backend ditandatangani (JWT), jadi return pelayar tidak boleh menanda pesanan dibayar.
- Razorpay Curlec: jumlah dalam sen; contoh webhook Node rasmi menyemak JSON yang disiri semula, sedangkan tandatangan meliputi badan mentah.
- HitPay: dua skema tandatangan dengan dua garam berbeza; sandbox untuk perniagaan Singapura dan tidak menawarkan FPX.
- Gkash: jumlah yang ditandatangani ialah rentetan ringgit tanpa titik (
0.10menjadi010), dan jawapan pertanyaan tidak bertandatangan. - Xendit: webhook membawa token tetap, bukan tandatangan, jadi semak jumlah dan status dengan rekod anda sendiri atau satu pertanyaan. Jumlah dalam ringgit.
- eGHL: SHA-256 biasa ke atas kata laluan peniaga dan nilai medan; plugin rasmi tidak sepakat tentang medan mana yang ditandatangani.
Corak merentas gateway
- Empat contoh rasmi (Curlec, HitPay, Airwallex dan satu resipi 2C2P) mengandungi kod tandatangan yang boleh gagal pada input sebenar. Semak ke atas bait permintaan mentah, dengan kunci yang dinamakan dokumen.
- URL return atau callback tidak pernah cukup untuk menanda pesanan dibayar. Pertanyaan status baharu menangkap callback yang diulang.
- Simpan jumlah sebagai sen integer dan tukar di hujung untuk gateway yang mahukan ringgit, supaya perbandingan tidak pernah bertemu ringgit titik terapung.
Bagaimana halaman ini kekal terkini
Setiap sumber di sebalik halaman ini dicap jari, dan semakan harian melaporkan bila dokumen gateway berubah. Setiap perubahan dibaca dengan tangan sebelum spesifikasi, gateway palsu ujian atau adapter berubah. Panduan FPX untuk Node.js ada dalam Bagaimana menerima bayaran FPX dalam Node.js?