Blog
Cara Menerima Pembayaran untuk Toko Online (E-commerce)
Bagian dari topik: Cara Terima Pembayaran per Kebutuhan

Menjalankan toko online berarti mengurus katalog produk, keranjang belanja, dan alur pesanan yang lebih rumit dari sekadar "kirim nomor rekening". Menyiapkan pembayaran toko online yang benar berarti memastikan setiap pesanan punya identitas jelas, pelanggan bisa memilih metode bayar yang nyaman, dan status order berpindah otomatis begitu uang masuk. Salah kelola di titik ini bisa berujung pada pesanan yang dobel, stok yang tidak sinkron, atau pelanggan yang menunggu konfirmasi manual berjam-jam.
Artikel ini fokus pada kebutuhan khas e-commerce dengan katalog dan keranjang, bukan sekadar terima bayaran satuan. Kita bahas cara memetakan keranjang ke satu pesanan, menyediakan beberapa metode pembayaran, memakai order_id sebagai penanda, dan yang paling penting: memenuhi pesanan secara otomatis setelah pembayaran terkonfirmasi lewat webhook. Kalau kamu berjualan lewat channel yang lebih sederhana, panduan terima pembayaran online untuk UMKM mungkin lebih pas sebagai titik awal.
Alur Checkout E-commerce dari Keranjang ke Pembayaran
Berbeda dengan pembayaran satuan, toko online punya keranjang yang bisa berisi banyak item dengan jumlah berbeda. Alur umumnya begini:
- Pelanggan menambahkan produk ke keranjang, lalu menuju checkout.
- Sistemmu menghitung total (harga item, ongkir, diskon) dan membuat satu pesanan dengan identitas unik.
- Kamu membuat permintaan pembayaran ke BorderPay, menyertakan
reference_idatauorder_idmilikmu, dan menerimapay_url. - Pelanggan diarahkan ke halaman pembayaran dan memilih metode.
- Setelah bayar, sistemmu diberi tahu lewat webhook dan pesanan diproses.
Kunci di sini adalah memetakan seluruh isi keranjang menjadi satu pesanan dengan satu identitas pembayaran. Jangan membuat pembayaran terpisah per item, kecuali memang itu yang kamu inginkan, karena akan menyulitkan rekonsiliasi dan pengiriman.
Menyediakan Beberapa Metode Pembayaran
Pembeli e-commerce punya preferensi berbeda. Sebagian nyaman scan QRIS dari e-wallet, sebagian lebih suka transfer ke Virtual Account (VA) dari mobile banking. Menyediakan pilihan mengurangi kemungkinan pelanggan batal di detik terakhir hanya karena metode favoritnya tidak ada.
Metode yang live di BorderPay adalah QRIS dan Virtual Account, dan e-wallet tetap bisa dipakai membayar lewat QRIS. Karakternya berbeda:
| Metode | Cara bayar | Masa berlaku | Cocok untuk |
|---|---|---|---|
| QRIS | Scan dari e-wallet / mobile banking | 60 menit | Nominal kecil-menengah, bayar cepat |
| Virtual Account | Transfer ke nomor VA unik | 24 jam | Pembeli yang biasa transfer bank |
Untuk membantumu memutuskan cara menyajikan pilihan, bandingkan keduanya lewat QRIS vs Virtual Account. Kalau kamu ingin sistemmu menampilkan opsi secara dinamis, gunakan GET /payment-methods untuk menarik daftar metode yang tersedia, sehingga halaman checkout tidak perlu di-hardcode dan otomatis ikut ketika ada perubahan.
Ingat masa berlaku saat mendesain UX: QRIS kedaluwarsa dalam 60 menit dan VA dalam 24 jam. Tampilkan hitung mundur atau instruksi yang jelas supaya pelanggan tidak membayar setelah kode basi. Ketika kode kedaluwarsa, kamu akan menerima event payment.expired sehingga bisa menandai pesanan sebagai belum dibayar dan mengembalikan stok yang sempat dikunci.
Peran order_id dan reference_id
Setiap pesanan di toko online wajib punya identitas unik yang kamu kendalikan sendiri. Saat membuat pembayaran lewat REST API, kirim identitas ini sebagai reference_id atau order_id. Fungsinya krusial:
- Menghubungkan pembayaran ke pesanan. Ketika webhook masuk, kamu tahu persis pesanan mana yang harus diproses.
- Mencegah kebingungan saat rekonsiliasi. Mutasi dana bisa kamu cocokkan dengan nomor pesanan di sistemmu.
- Mendukung idempotensi. Identitas yang konsisten membantumu memastikan satu pesanan tidak diproses dua kali.
Gunakan nilai yang benar-benar unik dan tidak bisa ditebak sembarangan, misalnya kombinasi ID internal ditambah komponen acak. Hindari memakai nomor urut polos yang mudah ditebak. Untuk memahami integrasi API lebih lengkap, lihat integrasi API pembayaran.
Memenuhi Pesanan Otomatis Setelah payment.paid
Inti dari otomasi e-commerce ada di sini. Jangan pernah menganggap pesanan lunas hanya karena pelanggan diarahkan kembali ke halaman "terima kasih". Redirect di browser bisa gagal, ditutup, atau dipalsukan. Sumber kebenaran adalah webhook.
Ketika pembayaran sukses, BorderPay mengirim event payment.paid ke endpoint-mu. Di titik itulah kamu:
- Verifikasi tanda tangan HMAC untuk memastikan notifikasi benar dari BorderPay.
- Cek idempotensi menggunakan
order_idsupaya event yang kebetulan terkirim dua kali tidak memproses pesanan dua kali. - Ubah status pesanan menjadi lunas, kurangi stok, dan picu pemenuhan (kirim barang, aktifkan lisensi, atau kirim produk digital).
- Kirim konfirmasi ke pelanggan.
Selain payment.paid, tangani juga payment.expired (kode habis masa berlaku) dan payment.failed (pembayaran gagal) agar status pesanan selalu akurat. Webhook BorderPay ber-log dan bisa dikirim ulang, jadi jika server tokomu sempat down, notifikasi tidak hilang begitu saja. Pelajari pola penanganannya di webhook pembayaran.
Mengurangi Pesanan yang Batal di Checkout
Halaman checkout adalah titik paling rawan pelanggan kabur. Beberapa item yang berhubungan langsung dengan pembayaran bisa kamu perbaiki:
- Jangan paksa satu metode. Tawarkan QRIS dan VA sekaligus.
- Tunjukkan total yang jelas sebelum pelanggan diarahkan ke pembayaran, termasuk ongkir dan pajak bila ada.
- Beri instruksi dan hitung mundur agar pelanggan tahu batas waktu bayar.
- Tangani kegagalan dengan anggun. Jika pembayaran gagal atau kedaluwarsa, izinkan pelanggan mencoba lagi tanpa mengulang seluruh proses.
Untuk daftar perbaikan yang lebih menyeluruh di sisi konversi, baca optimasi checkout konversi. Perbaikan kecil di halaman pembayaran sering berdampak besar pada jumlah pesanan yang benar-benar tuntas dibayar.
Menjaga Stok dan Status Tetap Sinkron
Toko online punya tantangan yang tidak dialami penjual satuan: stok terbatas yang diperebutkan banyak pembeli sekaligus. Ketika seseorang menuju checkout tapi belum membayar, kamu perlu memutuskan apakah stok dikunci sementara atau tidak. Mengunci stok terlalu agresif membuat produk terlihat habis padahal belum terjual; tidak mengunci sama sekali bisa membuat dua pembeli membayar untuk item terakhir yang sama.
Pola yang aman dan umum dipakai:
- Kunci stok sementara saat pembayaran dibuat, dengan batas waktu yang mengikuti masa berlaku metode (60 menit untuk QRIS, 24 jam untuk VA).
- Lepaskan kunci otomatis ketika kamu menerima
payment.expiredataupayment.failed, sehingga stok kembali tersedia untuk pembeli lain. - Kurangi stok permanen hanya setelah
payment.paidterkonfirmasi lewat webhook.
Dengan memetakan setiap event webhook ke aksi stok yang jelas, kamu menghindari dua bug klasik e-commerce: overselling (menjual lebih dari stok) dan phantom stock (stok tampak habis padahal tidak ada yang benar-benar membeli). Karena webhook BorderPay bisa dikirim ulang, pastikan pemrosesan stok juga idempoten agar event yang datang dua kali tidak mengurangi stok dua kali.
Rekonsiliasi dan Pembukuan Toko
Semakin banyak pesanan, semakin penting kemampuan mencocokkan uang yang masuk dengan pesanan di sistemmu. Di sinilah order_id kembali berperan. Setiap dana yang tersedia dan setiap penarikan bisa kamu telusuri ke pesanan asalnya lewat penanda tersebut.
Beberapa kebiasaan yang memudahkan pembukuan toko:
- Gunakan tanggal ketersediaan dana, bukan tanggal pesanan, sebagai acuan kapan uang bisa ditarik. Dana tersedia mengikuti jadwal settlement pada hari kerja.
- Simpan status lengkap tiap pesanan (pending, paid, expired, failed) agar laporan penjualan akurat dan tidak mencampur pesanan yang batal dengan yang lunas.
- Cocokkan penarikan dengan mutasi bank memakai catatan penarikan di dashboard.
Pencairan sendiri berjalan otomatis ke rekening bank Indonesia milikmu, dan bila gagal karena data rekening bermasalah, saldo dikembalikan penuh. Tidak ada biaya pendaftaran atau langganan; rincian biaya transaksi dan penarikan ada di halaman pricing.
Kesimpulan
Menerima pembayaran untuk toko online berarti memetakan keranjang menjadi satu pesanan berpenanda order_id, menyediakan beberapa metode seperti QRIS dan Virtual Account, lalu memenuhi pesanan secara otomatis begitu event payment.paid diterima lewat webhook. Jangan mengandalkan redirect browser sebagai bukti bayar; andalkan webhook yang sudah kamu verifikasi HMAC-nya dan proses secara idempoten. Dengan pondasi ini, stok, status pesanan, dan pemenuhan tetap sinkron meski volume transaksi naik.
BorderPay adalah lapisan teknologi di atas mitra Payment Gateway berlisensi Bank Indonesia, dengan mode test/sandbox sejak hari pertama sehingga kamu bisa menguji seluruh alur checkout tanpa uang sungguhan; KYC baru diperlukan sebelum menerima pembayaran riil. Siap membangun checkout tokomu? Daftar akun dan mulai dari dokumentasi.