Cara menerima pembayaran QRIS di toko online: panduan lengkap
Tiga cara menerima pembayaran QRIS di toko online: QRIS statis manual, link pembayaran tanpa coding, dan API. Cara memilih, langkah, keamanan, dan biaya.
Tim WaroengPay · Diperbarui · 10 menit baca
Untuk menerima pembayaran QRIS di toko online, kamu butuh tiga hal: QRIS yang nominalnya sesuai pesanan, cara mengetahui pembayaran mana milik pesanan mana, dan tempat uangnya masuk sebelum dicairkan ke rekeningmu. Ada tiga cara umum untuk mendapatkannya: memakai QRIS statis milik sendiri lalu mengecek pembayaran secara manual, membagikan link pembayaran tanpa coding, atau menghubungkan website tokomu ke payment gateway lewat API dan webhook. Panduan ini membahas ketiganya, cara memilih yang cocok untuk jenis tokomu, langkah memulai, sampai hal yang wajib dicek sebelum menerima pesanan sungguhan.
Kenapa QRIS cocok untuk toko online
QRIS adalah standar kode QR pembayaran nasional di Indonesia. Satu kode QRIS bisa dibayar dari aplikasi m-banking dan e-wallet mana pun, jadi kamu tidak perlu menyediakan banyak pilihan rekening atau nomor e-wallet. Untuk toko online, ada tiga keuntungan yang paling terasa:
- Pembeli tidak perlu mengetik nomor rekening. Cukup scan atau unggah gambar QR dari galeri, lalu konfirmasi di aplikasinya. Risiko salah ketik nomor tujuan hilang.
- Satu cara bayar untuk semua pembeli. Pembeli yang memakai GoPay, OVO, DANA, ShopeePay, atau aplikasi bank mana pun bisa membayar kode yang sama.
- Bisa dikonfirmasi otomatis. Dengan QRIS dinamis yang nominalnya berbeda per tagihan, pembayaran bisa dikenali sistem tanpa kamu membuka mutasi satu per satu.
Poin ketiga itulah yang membedakan toko online yang repot dengan yang berjalan sendiri. Perbedaan dua jenis QRIS dijelaskan lengkap di perbedaan QRIS statis dan dinamis.
Yang sebenarnya kamu butuhkan
Apa pun cara yang kamu pilih, alur pembayaran toko online selalu terdiri dari bagian yang sama. Yang berbeda hanya siapa atau apa yang mengerjakan tiap bagian.
| Bagian | Pertanyaannya | Kalau tidak ada |
|---|---|---|
| Tagihan | Berapa yang harus dibayar pembeli untuk pesanan ini? | Pembeli salah ketik nominal, atau membayar kurang |
| Kode QRIS | Ke mana pembeli membayar? | Pembeli minta nomor rekening lewat chat |
| Pencocokan | Pembayaran ini milik pesanan yang mana? | Pesanan tertukar, terutama kalau harganya sama |
| Konfirmasi | Siapa yang menandai pesanan lunas, dan kapan? | Pesanan menunggu admin, termasuk di malam hari |
| Pencairan | Kapan uang bisa dipakai? | Omzet tercatat tapi arus kas tidak jelas |
Tiga cara menerima QRIS di toko online
1. QRIS statis milik sendiri, dicek manual
Kamu mendaftarkan QRIS ke bank atau penyedia jasa pembayaran, lalu mendapat satu kode QR untuk semua transaksi. Kode itu kamu tampilkan sebagai gambar di website atau kirim lewat chat. Pembeli mengetik nominal sendiri, membayar, lalu biasanya mengirim screenshot bukti bayar. Kamu mengecek notifikasi atau mutasi rekening, mencocokkan dengan pesanan, dan memproses pesanan.
Cara ini paling sederhana dan uangnya langsung masuk ke akun atas namamu. Kelemahannya ada di pencocokan: dua pembeli dengan harga sama menghasilkan pembayaran yang identik, dan screenshot bisa dipalsukan. Baca ciri-ciri bukti transfer palsu sebelum mengandalkan screenshot.
2. Link pembayaran, tanpa coding
Payment gateway menyediakan halaman bayar yang bisa kamu bagikan sebagai link. Setiap pembeli yang membuka link mendapat tagihan sendiri dengan QRIS dinamis, dan pembayarannya tercatat otomatis. Kamu tidak perlu punya website: link bisa dikirim di chat, ditaruh di bio media sosial, atau dicetak sebagai QR.
Cara ini cocok untuk toko yang berjualan lewat WhatsApp, Instagram, TikTok, atau katalog sederhana. Contoh penerapannya ada di halaman QRIS untuk jualan di WhatsApp dan Instagram.
3. Integrasi API dan webhook
Kalau tokomu punya website atau aplikasi dengan backend sendiri, checkout bisa langsung membuat tagihan lewat API. Pembeli membayar di halaman bayar atau QR yang kamu tampilkan sendiri, dan servermu menerima webhook saat pembayaran lunas. Pesanan diproses otomatis: stok berkurang, email terkirim, atau produk digital dikirim, tanpa campur tangan admin.
Ini cara yang paling rapi untuk toko dengan pesanan rutin, tapi butuh sedikit kerja teknis. Contoh lengkap untuk satu bahasa ada di tutorial integrasi QRIS di PHP dan Laravel.
Perbandingan singkat
| Aspek | QRIS statis manual | Link pembayaran | API dan webhook |
|---|---|---|---|
| Butuh website | Tidak | Tidak | Ya, dengan backend |
| Butuh coding | Tidak | Tidak | Ya |
| Nominal di QR | Diketik pembeli | Sudah terisi | Sudah terisi |
| Pencocokan pembayaran | Manual | Otomatis | Otomatis |
| Pesanan diproses otomatis | Tidak | Tercatat otomatis, pengiriman tetap kamu urus | Ya, lewat webhook |
| Cocok untuk | Pesanan sedikit, harga jarang sama | Jualan lewat chat dan media sosial | Website, aplikasi, bot, produk digital |
Pembahasan lebih dalam soal kelebihan dan konsekuensi masing-masing, termasuk soal biaya MDR dan ke mana uang masuk, ada di QRIS manual vs payment gateway.
Cara memilih sesuai jenis toko
| Jenis toko | Cara yang disarankan | Alasannya |
|---|---|---|
| Jualan lewat WhatsApp atau Instagram, tanpa website | Link pembayaran | Tidak perlu coding, setiap pembeli tetap mendapat nominal sendiri |
| Website toko dengan backend sendiri | API dan webhook | Status pesanan berubah sendiri begitu pembayaran masuk |
| Produk digital, voucher, top up | API dan webhook | Produk harus terkirim otomatis, termasuk tengah malam |
| Donasi, iuran, tiket event | Link pembayaran dengan nominal tetap atau bebas | Satu link untuk banyak pembayar, tercatat terpisah |
| Kios atau warung dengan pembeli datang langsung | QRIS statis milik sendiri | Notifikasi bisa dicek saat pembeli masih di depanmu |
Banyak toko memakai lebih dari satu cara sekaligus: stiker QRIS sendiri di kasir, link pembayaran untuk pesanan dari chat, dan API untuk website. Yang penting, catat pemasukan dari setiap sumber secara terpisah supaya rekapmu tidak dobel.
Toko yang hanya berjualan di marketplace tidak perlu memasang QRIS sendiri, karena pembayaran di sana diurus marketplace. Panduan ini ditujukan untuk toko yang menerima pembayaran di luar marketplace.
Langkah memulai dengan WaroengPay
Berikut urutan dari nol sampai pesanan pertama lunas otomatis. Langkah 4a dan 4b tinggal dipilih salah satu sesuai caramu berjualan.
- Daftar akun. Buat akun di halaman daftar. Akun baru bisa perlu disetujui admin terlebih dulu sebelum aktif.
- Lengkapi profil toko. Isi nama toko, logo, dan tagline. Profil ini tampil di halaman bayar supaya pembeli yakin sedang membayar ke toko yang benar.
- Daftarkan rekening pencairan. Saldo dicairkan ke rekening bank atau e-wallet atas nama pemilik toko, jadi daftarkan rekening atas namamu sendiri.
- 4a. Tanpa website: buat link pembayaran di dashboard dengan judul produk, harga tetap atau diisi pembeli (dengan batas minimal dan maksimal), gambar, dan teks tombol. Bagikan alamat link-nya atau unduh QR link untuk dicetak.
- 4b. Dengan website: buat API key, lalu panggil
POST /api/paymentssaat pembeli checkout. Simpanidtagihan di pesananmu, arahkan pembeli ke halaman bayar, dan pasang URL webhook untuk menerimapayment.paid. Detailnya di dokumentasi API. - Hubungkan Telegram. Notifikasi pembayaran masuk dan penarikan dana dikirim ke chat-mu, dan saldo bisa dicek kapan saja.
- Uji dulu di mode uji. API key berawalan
wp_test_membuat tagihan uji yang bisa disimulasikan lunas tanpa uang sungguhan, lengkap dengan webhook-nya. - Terima pesanan sungguhan. Ganti ke API key live, lakukan satu transaksi kecil, dan pastikan pesanan berubah lunas sendiri.
Apa yang terjadi saat pembeli membayar
Supaya kamu bisa menjelaskan ke pembeli dan memahami status di dashboard, ini alur satu pesanan dari checkout sampai lunas:
| Tahap | Contoh pesanan Rp150.000 |
|---|---|
| Tagihan dibuat | Harga ditambah kode unik, misalnya pembeli membayar Rp150.201 |
| Pembeli membayar | Scan QRIS dari aplikasi apa pun, nominal sudah terisi |
| Mutasi dibaca | Selama ada tagihan terbuka, mutasi rekening merchant dibaca setiap 8 detik |
| Tagihan lunas | Kredit bernominal persis sama dalam jendela waktu tagihan menandainya lunas |
| Toko dikabari | Dashboard, Telegram, dan webhook payment.paid ke website-mu |
| Masuk ke saldo | Rp150.000, harga barang diterima utuh |
Kode unik adalah angka kecil (di WaroengPay Rp100 sampai Rp250) yang membuat setiap tagihan yang sedang menunggu punya nominal berbeda. Itulah yang membuat pembayaran bisa dicocokkan tanpa manusia. Penjelasan lengkapnya ada di apa itu kode unik transfer, dan mekanisme pencocokannya di panduan konfirmasi pembayaran otomatis.
Checkout yang membuat pembeli tidak bingung
Sebagian besar pesanan yang "nyangkut" terjadi karena pembeli membayar nominal yang berbeda atau membayar setelah tagihan habis waktunya. Beberapa kebiasaan kecil ini mencegahnya:
- Tampilkan nominal persis, termasuk kode unik. Jangan dibulatkan. Nominal yang berbeda tidak bisa dicocokkan otomatis.
- Tampilkan batas waktu. Tagihan lewat API berlaku 15 menit secara default dan bisa diatur 5 sampai 60 menit; tagihan dari link pembayaran berlaku 10 menit. Halaman bayar WaroengPay sudah menampilkan hitung mundur.
- Beri tahu pembeli bahwa konfirmasinya otomatis. Pembeli tidak perlu mengirim screenshot. Halaman bayar berubah sendiri saat pembayaran masuk, dan pembeli bisa mengunduh bukti bayar setelahnya.
- Atur halaman kembali. Isi
redirect_urlsupaya pembeli diarahkan kembali ke tokomu setelah lunas. - Cegah tagihan ganda. Kirim idempotency key saat membuat tagihan supaya tombol checkout yang terklik dua kali tidak membuat dua tagihan.
Aturan keamanan yang tidak boleh dilewatkan
Kalau pesananmu diproses otomatis, celah keamanan juga berjalan otomatis. Lima aturan ini wajib diikuti, terutama untuk integrasi API:
- Jangan anggap lunas karena pembeli kembali ke tokomu. Siapa pun bisa membuka
redirect_urlsecara langsung. Patokan lunas adalah webhook atau status tagihan dari API. - Verifikasi tanda tangan webhook. Setiap webhook WaroengPay ditandatangani HMAC-SHA256. Hitung ulang dari body mentah sebelum memproses.
- Cocokkan pesanan lewat
idtagihan, dan cocokkan nominalnya. Nomor pesanan (reference) tidak unik. Pastikandata.base_amountsama dengan total pesanan sebelum menandai lunas. - Proses setiap event sekali saja. Webhook bisa dikirim ulang, sampai 6 kali selama sekitar 2,7 jam kalau servermu gangguan. Simpan id event yang sudah diproses.
- Jangan kirim barang dari screenshot. Untuk pesanan lewat link pembayaran pun, patokannya status lunas di dashboard atau notifikasi Telegram, bukan gambar dari pembeli.
Contoh kode untuk aturan 2 sampai 4 ada di panduan webhook pembayaran.
Pembayaran yang telat, salah nominal, atau dobel
Pembeli tidak selalu membayar tepat. Uang yang sudah masuk ke rekening merchant tetap tidak boleh hilang, jadi aturannya:
- Telat sedikit. Pembayaran yang masuk sampai 5 menit setelah batas waktu masih dicocokkan otomatis.
- Telat lebih lama atau salah nominal. Tagihan tidak lunas otomatis, tapi pembayarannya dicatat untuk dicocokkan admin. Kalau dicocokkan, tokomu menerima
payment.paiddengandata.late = true, setelah sebelumnya menerimapayment.expired. Integrasimu harus siap dengan urutan ini: proses pesanan atau hubungi pembeli. - Dobel. Satu kredit di mutasi hanya bisa melunasi satu tagihan, jadi tidak ada konfirmasi ganda. Kredit kedua dicatat terpisah.
Di halaman bayar yang sudah kedaluwarsa, pembeli juga punya tombol "Saya sudah bayar" untuk membantu admin menelusuri pembayarannya.
Biaya dan pencairan dana
Hitung biaya dari omzet bulanan, bukan dari satu transaksi, dan pahami kapan uang benar-benar bisa kamu pakai. Di WaroengPay:
| Komponen | Ketentuan |
|---|---|
| Pendaftaran, biaya bulanan, penarikan dana | Rp0 |
| Biaya per transaksi | Kode unik Rp100 sampai Rp250 yang dibayar pembeli, jadi harga barang diterima utuh |
| Harga di atas Rp500.000 | Tambahan 0,7% dari harga |
| Nominal per tagihan | Rp1.000 sampai Rp10.000.000 |
| Minimal penarikan | Rp10.000 |
| Kapan saldo bisa ditarik | Mengikuti jadwal pencairan bank, beberapa kali sehari |
Contohnya, pesanan Rp600.000 dibayar pembeli Rp600.201, dan yang masuk ke saldomu Rp595.800 (dipotong kode unik dan 0,7%). Rincian lengkap beserta jam pencairan ada di halaman harga.
Checklist sebelum menerima pesanan sungguhan
- Profil toko (nama, logo) sudah terisi dan tampil di halaman bayar.
- Rekening pencairan atas nama pemilik toko sudah terdaftar.
- Notifikasi Telegram sudah terhubung.
- Alur checkout sudah diuji di mode uji: lunas, kedaluwarsa, dan webhook terkirim ulang.
- Webhook diverifikasi tanda tangannya, idempoten, dan mencocokkan nominal.
- Pembeli diberi tahu nama merchant yang akan muncul di aplikasinya dan bahwa konfirmasi berjalan otomatis.
- Satu transaksi kecil dengan uang sungguhan sudah berhasil lunas sendiri.
Pertanyaan yang sering muncul
Apakah harus punya website untuk menerima QRIS?
Tidak. Link pembayaran sudah menyediakan halaman bayar lengkap, jadi kamu bisa berjualan hanya lewat chat atau media sosial. Website baru diperlukan kalau kamu ingin pesanan diproses otomatis oleh sistemmu sendiri.
Apakah pembeli perlu membuat akun?
Tidak. Pembeli cukup membuka halaman bayar dan membayar QRIS dari aplikasi yang sudah mereka punya.
Apakah butuh mesin EDC atau rekening merchant sendiri?
Tidak. Pembayaran diterima di rekening merchant QRIS yang terhubung dengan WaroengPay, lalu saldo setiap toko dicatat terpisah dan dicairkan ke rekening atas nama pemilik toko.
Seberapa cepat pesanan berubah lunas?
Biasanya dalam belasan detik setelah pembeli membayar, tergantung kecepatan mutasi bank. Konfirmasi berjalan 24 jam, termasuk malam hari dan akhir pekan.
Apakah ada batas jumlah tagihan?
Lewat API, maksimal 30 tagihan per menit per akun dan 50 tagihan yang menunggu pembayaran sekaligus per akun.
Baca juga: QRIS statis vs dinamis, konfirmasi pembayaran otomatis, webhook pembayaran, serta halaman solusi QRIS otomatis untuk toko online dan QRIS otomatis untuk produk digital.