Blog
Cara Menerima Pembayaran Virtual Account di Aplikasi

Menerima pembayaran non-tunai yang rapi dan otomatis adalah salah satu kebutuhan dasar aplikasi modern. Jika kamu ingin tahu cara terima virtual account di aplikasi atau website, artikel ini memandu langkah demi langkah: mulai dari membuat pembayaran, menampilkan nomor VA beserta waktu ekspirasinya, sampai mengonfirmasi status lunas secara otomatis lewat webhook. Kita akan pakai pendekatan yang bisa langsung kamu terapkan dengan BorderPay, lapisan teknologi (software) yang berjalan di atas mitra Payment Gateway berlisensi Bank Indonesia. Artinya kamu fokus pada integrasi, sementara pemrosesan dan penyimpanan dana ditangani mitra yang berlisensi.
Apa Itu Virtual Account dan Kapan Cocok Dipakai
Virtual Account (VA) adalah nomor rekening virtual unik yang dibuat khusus untuk satu tagihan atau satu pelanggan. Ketika pembeli mentransfer ke nomor tersebut lewat m-banking, ATM, atau internet banking, sistem otomatis mengenali pembayaran itu tanpa perlu pengecekan mutasi manual. Ini membuat VA sangat cocok untuk tagihan bernilai lebih besar, invoice B2B, biaya sekolah, cicilan, atau pelanggan yang lebih nyaman transfer bank ketimbang scan QR.
Jika kamu masih menimbang metode mana yang paling pas, perbandingan QRIS vs Virtual Account bisa membantu memutuskan. Kabar baiknya, dengan BorderPay kamu tidak harus memilih salah satu, karena QRIS dan VA tersedia berdampingan. Kalau kebutuhanmu justru lebih ke pembayaran cepat bernominal kecil, panduan cara menerima QRIS di website melengkapi bacaan ini.
Persiapan Sebelum Menerima VA
Sebelum menulis kode, siapkan hal-hal berikut:
- Akun BorderPay. Daftar tanpa biaya pendaftaran maupun langganan. Biaya hanya muncul saat ada transaksi, dan rinciannya bisa kamu lihat di halaman pricing.
- Mode test/sandbox. Kamu bisa langsung mencoba integrasi VA di mode test sejak hari pertama, tanpa menunggu proses persetujuan. Mode ini aman untuk eksperimen karena tidak melibatkan uang sungguhan.
- KYC untuk go-live. Untuk menerima uang sungguhan, verifikasi KYC wajib diselesaikan lebih dulu. Selama KYC belum tuntas, semua uji coba tetap berjalan di mode test.
- Endpoint webhook (opsional tapi sangat disarankan) untuk menerima notifikasi status pembayaran secara otomatis.
Empat Cara Integrasi: Pilih yang Sesuai
BorderPay menyediakan beberapa jalur integrasi, dari yang tanpa koding sampai penuh lewat API:
| Cara | Coding | Cocok untuk |
|---|---|---|
| Buat link dari Dashboard | Tidak | Tagihan sekali-kali, tim non-teknis |
| Payment Link | Tidak | Bagikan tautan via chat/email |
| Embed Checkout | Minim (1 snippet) | Tempel di halaman web |
| REST API | Ya | Aplikasi & sistem otomatis |
Sisa artikel ini fokus pada alur API karena paling fleksibel untuk aplikasi. Referensi lengkap parameter ada di dokumentasi.
Langkah 1: Buat Pembayaran Virtual Account
Inti dari cara terima virtual account lewat API adalah membuat satu objek pembayaran dengan metode VA. Kamu menentukan jumlah tagihan, bank tujuan, dan identitas order dari sisimu. Sebagai praktik baik, sertakan external_id atau referensi order unik agar setiap tagihan mudah dilacak dan tidak tertukar.
Jika kamu belum tahu bank mana saja yang tersedia, jangan hardcode daftarnya. Panggil endpoint discovery GET /payment-methods untuk mengambil metode dan bank VA yang aktif untuk akunmu. Cara ini membuat aplikasimu tetap benar meski katalog bank berubah di kemudian hari.
Saat membuat pembayaran, gunakan idempotency key agar percobaan ulang (misalnya karena jaringan putus) tidak menghasilkan dua tagihan. Praktik ini penting supaya pelanggan tidak menerima dua nomor VA untuk satu order.
Setelah request berhasil, BorderPay mengembalikan objek pembayaran yang berisi minimal:
- Nomor Virtual Account yang harus ditransfer pelanggan.
- Nama bank tujuan.
- Jumlah tagihan.
- Waktu kedaluwarsa (expiry) pembayaran.
- Status awal (misalnya
pending).
Langkah 2: Tampilkan Nomor VA dan Waktu Ekspirasi
Begitu nomor VA diterima, tampilkan dengan jelas di layar checkout atau kirim ke pelanggan. Beberapa hal yang membuat pengalaman bayar terasa mulus:
- Nomor VA besar dan mudah disalin. Sediakan tombol "Salin" agar pelanggan tidak salah ketik.
- Nama bank dan logo supaya pelanggan tahu harus buka aplikasi bank yang mana.
- Nominal pasti. Tampilkan jumlah yang harus ditransfer secara tepat.
- Hitung mundur ekspirasi. VA di BorderPay berlaku 24 jam. Lewat batas itu, nomor otomatis kedaluwarsa dan tidak ada opsi bayar-telat, jadi tampilkan tenggat dengan jelas.
Perbedaan penting: QRIS BorderPay berlaku 60 menit, sedangkan VA 24 jam. Menampilkan tenggat yang benar mengurangi keluhan "kok nomornya sudah tidak bisa dibayar". Kalau pembayaran kedaluwarsa, buat pembayaran baru dan tampilkan nomor VA yang baru.
Kamu tidak wajib membangun tampilan ini dari nol. Jika ingin praktis, Embed Checkout menyediakan halaman bayar siap pakai yang sudah menampilkan nomor VA dan hitung mundur, cukup tempel satu snippet.
Langkah 3: Konfirmasi Pembayaran via Webhook
Jangan pernah menandai order "lunas" hanya berdasarkan pelanggan mengeklik "Saya sudah bayar". Sumber kebenaran adalah notifikasi resmi dari sistem pembayaran. Di sinilah webhook berperan.
BorderPay mengirim notifikasi ke endpoint milikmu setiap kali status berubah, dengan event antara lain:
payment.paid— dana masuk, order boleh diproses.payment.expired— nomor VA kedaluwarsa tanpa pembayaran.payment.failed— pembayaran gagal.
Verifikasi Tanda Tangan HMAC
Setiap notifikasi ditandatangani dengan HMAC. Di sisi merchant, verifikasi tanda tangan tersebut sebelum memproses isinya, sehingga kamu yakin notifikasi benar-benar berasal dari BorderPay dan bukan permintaan palsu. Ini pertahanan mendasar yang tidak boleh dilewati.
Terapkan Idempotensi di Sisi Penerima
Webhook bisa terkirim lebih dari sekali (misalnya karena kirim ulang otomatis). Karena itu, buat handler-mu idempoten: simpan ID event yang sudah diproses, dan jika event yang sama datang lagi, abaikan tanpa memproses ulang. Dengan begitu satu pembayaran tidak menggandakan pemenuhan order.
Alur handler yang aman umumnya seperti ini:
- Terima request webhook.
- Verifikasi tanda tangan HMAC. Tolak bila tidak valid.
- Cek apakah event ID sudah pernah diproses. Bila sudah, balas
200dan berhenti. - Cocokkan pembayaran dengan order di database.
- Perbarui status order (
paid), lalu jalankan pemenuhan (kirim barang, aktifkan layanan, dan seterusnya). - Balas
200 OKagar BorderPay tahu notifikasi diterima.
BorderPay menyimpan log setiap pengiriman dan menyediakan kirim ulang, sehingga saat endpoint sempat down kamu bisa memutar ulang notifikasi. Sebelum go-live, uji seluruh alur ini di mode test terlebih dahulu.
Setelah Lunas: Settlement dan Penarikan
Dana yang masuk tidak langsung mendarat di rekeningmu detik itu juga. Setelah pembayaran lunas, dana tertahan sebentar lalu tersedia sesuai jadwal per metode. Jadwal ini mengikuti hari kerja dan melewati akhir pekan serta libur nasional. Status dan tanggal ketersediaan dana tampil transparan di dashboard.
Ketika dana sudah tersedia, kamu bisa menarik saldo secara otomatis ke rekening bank di Indonesia. Ada biaya per penarikan, dan jika penarikan gagal, saldo dikembalikan penuh ke akunmu. Rincian biaya, termasuk biaya transaksi, dapat kamu cek di halaman pricing.
Kesalahan Umum yang Perlu Dihindari
- Menandai lunas dari sisi klien. Selalu andalkan webhook, bukan klik tombol pelanggan.
- Melewatkan verifikasi HMAC. Tanpa ini, endpoint-mu rentan notifikasi palsu.
- Handler tidak idempoten. Bisa menggandakan pengiriman barang.
- Menyembunyikan tenggat. Pelanggan bingung saat VA kedaluwarsa setelah 24 jam.
- Hardcode daftar bank. Gunakan
GET /payment-methodsagar tetap akurat.
Penutup
Menerima pembayaran Virtual Account sebenarnya berpola sederhana: buat pembayaran, tampilkan nomor VA dan tenggat 24 jam dengan jelas, lalu konfirmasi lunas lewat webhook yang tanda tangannya diverifikasi dan diproses secara idempoten. Dengan BorderPay yang berdiri di atas mitra berlisensi Bank Indonesia, kamu bisa mulai mencoba di mode test hari ini juga, lalu menyelesaikan KYC untuk menerima uang sungguhan. Mulai dari dokumentasi untuk detail teknis, cek FAQ bila ada pertanyaan, atau langsung daftar untuk mencoba integrasinya.