Blog · Terbit · Diperbarui
Cara Tahu Pembayaran QRIS Sudah Masuk, Tanpa Cek Mutasi Manual
Pembayaran QRIS baru pasti masuk kalau transaksinya muncul di sisi penjual: di aplikasi atau dashboard merchant penyedia QRIS, dengan nominal dan waktu yang cocok. Layar “berhasil” di ponsel pembeli, tangkapan layar yang dikirim lewat chat, atau kata “sudah bayar” belum membuktikan apa pun. Serahkan barang setelah transaksinya terlihat di sisi penjual, bukan sebelumnya.
Tulisan ini menjelaskan bukti mana yang bisa dipercaya, langkah mengecek QRIS statis yang ditempel di meja kasir, dan cara membuat konfirmasinya datang sendiri per tagihan sehingga tidak ada lagi yang perlu dicocokkan dengan mutasi.
Bukti mana yang bisa dipercaya?
| Yang dilihat penjual | Bisa dipercaya? | Kenapa |
|---|---|---|
| Tangkapan layar bukti bayar dari pembeli | Tidak | Gambar mudah disunting atau dipakai ulang dari transaksi lama. |
| Layar “berhasil” di ponsel pembeli | Tidak cukup | Yang tampil adalah aplikasi pembeli. Kalau stiker QR di meja sudah ditimpa, uangnya bisa saja masuk ke rekening lain. |
| Mutasi rekening bank | Ya, tetapi terlambat | Tergantung penyedia, dana QRIS bisa baru masuk rekening setelah settlement, dan mutasi tidak menyebut tagihan mana yang dibayar. |
| Notifikasi dan riwayat di aplikasi merchant penyedia QRIS | Ya | Dicatat di sisi penjual saat transaksi terjadi, lengkap dengan nominal dan jam. |
| Status per tagihan dari QRIS dinamis | Ya, dan otomatis | Setiap tagihan punya kode QR dan status sendiri, jadi tidak ada yang perlu dicocokkan. |
Modus pemalsuan bukti bayar lebih beragam daripada gambar hasil sunting, dan dirinci di bukti transfer palsu. Modus stiker QR yang ditimpa dibahas di QRIS palsu dan stiker yang ditimpa.
Cara cek pembayaran di QRIS statis
QRIS statis adalah satu kode yang dicetak sekali dan dipakai semua pembeli, dan pembeli mengetik sendiri nominalnya. Untuk kode seperti ini, urutan pengecekan di kasir:
- Pasang notifikasi transaksi di aplikasi merchant dari bank atau penyedia yang menerbitkan QRIS itu, di ponsel yang dipegang orang yang berdiri di kasir, bukan hanya di ponsel pemilik.
- Saat pembeli bilang sudah bayar, buka riwayat transaksi di aplikasi merchant tersebut, bukan layar pembeli.
- Cocokkan tiga hal: nominal persis sama, jamnya baru saja, dan transaksinya belum pernah dipakai untuk pesanan lain. Kalau tersedia, catat nomor referensinya.
- Kalau transaksinya belum muncul, minta pembeli menunggu sebentar. Kalau saldo pembeli sudah terpotong tetapi transaksi tidak pernah muncul di sisi penjual, pembeli perlu menghubungi aplikasi yang dipakainya membayar, bukan penjual yang menanggung.
- Periksa stiker QR di meja secara rutin, dan pastikan nama merchant yang tampil saat dipindai adalah nama usaha sendiri.
Kelemahan QRIS statis tetap ada: dua pembeli yang membayar nominal sama dalam waktu berdekatan terlihat sama di riwayat, dan pembeli bisa salah ketik nominal. Kalau pembeli mengeluh kodenya tidak terbaca, penyebabnya dibahas di QRIS gagal dipindai pembeli.
Kenapa cek mutasi tidak bisa jadi sistem
Mutasi rekening mencatat uang masuk, bukan tagihan mana yang dibayar. Dua pembayaran dengan nominal sama terlihat identik, pembayaran yang masuk malam hari baru dicek esok pagi, dan pencocokannya bergantung pada satu orang yang memegang rekening. Cara itu masih bisa jalan selama transaksinya sedikit. Begitu pembayaran mulai ramai, atau begitu yang menagih bukan orang yang memegang rekening, setiap transaksi baru menambah beban kerja, bukan sekadar menambah pemasukan.
Prinsipnya: satu permintaan pembayaran per tagihan
Supaya status bisa dipastikan mesin, arahnya dibalik: bukan satu kode yang menampung semua pembayaran, melainkan satu permintaan pembayaran untuk setiap tagihan, dengan QRIS dinamis yang nominalnya sudah terkunci. Setiap permintaan punya nominal, identitas, dan statusnya sendiri, jadi pertanyaan “yang ini sudah dibayar atau belum” selalu punya jawaban pasti.
Di Kasera Pay, bentuknya dua, mengikuti pembagian open payment dan closed payment yang umum di payment gateway:
- Tautan checkout (closed payment): nominal ditentukan penjual, satu tautan untuk satu transaksi. Dibuat dari dashboard atau lewat API.
- Halaman pembayaran (open payment): nominal ditentukan pembayar dan halamannya bisa dipakai berulang, misalnya untuk iuran komunitas atau donasi. Setiap pembayaran tetap tercatat sebagai transaksi tersendiri.
Tiga status menjawab hampir semua pertanyaan harian: pending saat menunggu, succeeded (di dashboard: Dibayar) saat pembayaran terkonfirmasi, dan expired saat lewat batas waktu tanpa dibayar. Daftar lengkap nilainya ada di referensi ambil permintaan. Status yang tampil di dashboard dan yang dikembalikan API selalu sama, jadi kasir, bendahara, dan sistem membaca satu sumber.
Tanpa integrasi: cukup dashboard dan notifikasi
Untuk yang tidak menulis kode, alurnya berhenti di sini: buat tautan checkout dari dashboard, kirim ke pembayar, lalu pantau statusnya di daftar Transaksi. Untuk pembayaran live, pemilik bisa menerima email, notifikasi browser, dan push di aplikasi Kasera Pay saat pembayaran masuk. Begitu statusnya Dibayar, pembayaran itu sudah terkonfirmasi, tanpa membuka mutasi dan tanpa meminta bukti transfer. Kapan notifikasi dashboard cukup dan kapan perlu webhook dibahas di notifikasi dashboard atau webhook.
Dengan integrasi: webhook, bukan polling mutasi
Untuk developer, konfirmasi datang sebagai event payment.paid yang dikirim ke URL webhook saat pembayaran terkonfirmasi, dan payment.expired serta payment.failed untuk tagihan yang tidak jadi dibayar. Detail yang penting untuk sistem yang mengandalkan status pembayaran:
- Bertanda tangan. Setiap pengiriman ditandatangani HMAC-SHA256 atas timestamp dan body mentah, di header
Kasera-Signature-V1, jadi endpoint bisa memastikan event benar-benar berasal dari Kasera Pay sebelum memproses isinya. - At-least-once. Event yang sama bisa terkirim lebih dari sekali dan selalu membawa id yang sama, jadi dedupe berdasarkan id event. Kalau endpoint sempat tumbang, pengiriman dicoba ulang dengan exponential backoff hingga tujuh kali dalam sekitar 33 jam.
- Bisa dicek ulang kapan saja. Status terbaru selalu bisa diambil lewat
GET /v1/transactions/{id}, untuk rekonsiliasi atau sekadar memastikan. - Tidak dobel dari sisi pembuatan. Permintaan pembayaran dibuat dengan header
Idempotency-Key, jadi permintaan yang terkirim dua kali karena jaringan tidak menjadi dua tagihan.
Detail payload dan contoh verifikasi signature ada di dokumentasi webhook.
Langkah berikutnya
Untuk QRIS statis yang sudah terpasang, mulai dari notifikasi di ponsel kasir dan kebiasaan mengecek riwayat di aplikasi merchant. Untuk berhenti mencocokkan sama sekali, pindahkan tagihan ke QRIS dinamis per transaksi; caranya tanpa website ada di panduan menerima QRIS tanpa website. Akun Kasera Pay bisa dibuat gratis, dengan biaya QRIS 0,7% + Rp 250 per pembayaran yang berhasil sampai Rp 1.000.000.