Blog · Terbit · Diperbarui

Membatalkan tagihan yang terlanjur dibuat: bedanya dengan membiarkannya kedaluwarsa, dan QR yang tetap bisa dibayar

Nominalnya salah satu digit, tautannya sudah terkirim ke chat pembeli, dan sekarang ada dua tombol yang sama-sama menutup tagihan itu: membatalkannya sekarang, atau membiarkan masa berlakunya habis sendiri. Keduanya menutup halaman pembayarannya, tetapi berhenti pada status yang berbeda, dan perbedaannya nyata pada tiga hal: apa yang terjadi kalau pembeli tetap membayar, berapa jatah sebelum verifikasi yang kembali, dan kalimat apa yang dibaca pembeli kalau tautannya terlanjur dibuka.

Ringkasnya, dan sisanya adalah penjelasan dari tiga baris ini. Membatalkan menutup halaman pembayaran seketika, tetapi tidak menarik kembali QR atau nomor Virtual Account yang sudah terbit: kalau pembeli tetap membayarnya, status canceled berubah menjadi succeeded. Membiarkan kedaluwarsa menyisakan pintu yang sama: status expired masih bisa berubah menjadi succeeded kalau ternyata uangnya sudah diterima sebelum waktunya habis. Dan pada akun yang belum terverifikasi, hanya pembatalan yang mengembalikan slot jumlah permintaan yang sudah terpakai.

Perbedaannya dalam satu tabel

DibatalkanDibiarkan kedaluwarsa
Status akhircanceledexpired
Masih bisa menjadi lunasBisa, kalau pembeli tetap membayar QR atau Virtual Account yang sudah terbitBisa, kalau uangnya diterima sebelum waktunya habis
Kapan berhentiSeketika, saat tombolnya ditekanSaat masa berlaku habis, standarnya 60 menit
Jatah 10 permintaan sebelum verifikasiSlotnya kembaliSlotnya tetap terpakai
Jatah nominal Rp 1.000.000 sebelum verifikasiNominalnya kembali seketikaNominalnya kembali setelah kedaluwarsa
Yang dibaca pembeli“Pembayaran dibatalkan”“Tautan kedaluwarsa”

Pintu yang tetap terbuka setelah tagihan ditutup

Sebuah tagihan yang kedaluwarsa belum tentu selesai. Kalau pembayarannya sebenarnya sudah diterima beberapa detik sebelum penghitung waktu berhenti, dan konfirmasinya baru sampai setelahnya, tagihan itu tetap berpindah dari expired menjadi succeeded. Uangnya menang atas jam, dan alasannya sederhana: memberi tahu penjual bahwa dirinya tidak dibayar padahal uangnya sudah masuk adalah kesalahan yang jauh lebih mahal daripada menutup tagihan terlambat.

Pembatalan punya pintu yang sama. Membatalkan hanya mengubah status tagihan di Kasera Pay. QR atau nomor Virtual Account yang sudah terbit di penyedia jasa pembayaran berlisensi tidak ikut ditarik, jadi pembeli yang menyimpan QR-nya atau sudah mencatat nomor Virtual Account-nya masih bisa membayar. Kalau itu terjadi, tagihan berpindah dari canceled menjadi succeeded. Karena itu membatalkan tidak pernah menjamin tidak ada uang yang masuk. Selama masih ada kemungkinan pembeli sedang berada di depan layar pembayaran, membiarkannya kedaluwarsa tetap lebih aman, karena tidak memancing pembeli membayar ulang lewat tautan pengganti.

Kalau uangnya tetap datang ke tagihan yang sudah dibatalkan

Uang itu diakui seperti pembayaran lunas lainnya. Statusnya berubah menjadi succeeded, nominalnya masuk saldo, dan pemberitahuan lunas berjalan seperti biasa, termasuk webhook payment.paid. Status Dibatalkan yang sempat terlihat di daftar transaksi karena itu bukan bukti bahwa tidak ada uang yang masuk. Yang menentukan adalah status terbaru di menu Transaksi.

Sesudahnya ada dua jalan. Kalau pesanannya masih bisa dipenuhi, kirim seperti pesanan lunas lain. Kalau pesanannya memang sudah batal, kembalikan uangnya seperti pengembalian dana biasa: untuk QRIS dan Virtual Account, penjual mentransfernya dari rekening sendiri, lengkapnya di halaman pengembalian dana.

Karantina tetap ada untuk nominal yang tidak cocok pada tagihan yang masih menunggu. Konfirmasi lunas untuk tagihan yang sudah gagal, sejak 13 Oktober 2026, diterapkan sama seperti pada tagihan yang kedaluwarsa atau dibatalkan, karena status gagal bisa muncul saat kode QR-nya sebenarnya masih bisa dibayar. Arti status gagal diuraikan di tulisan tentang pembayaran yang gagal di sisi pembeli. Nominal yang tidak cocok tidak dikreditkan otomatis dan ditahan untuk dicek tim Kasera.

Jatah sebelum verifikasi, satu-satunya alasan operasional untuk membatalkan

Akun yang sudah terverifikasi tidak punya batas jumlah maupun total nominal per hari, jadi pada akun itu membatalkan tidak mengembalikan apa pun karena memang tidak ada yang perlu dikembalikan. Akun yang verifikasinya belum selesai berbeda: jatahnya 10 permintaan dan Rp 1.000.000 untuk seumur akun, lengkapnya di halaman batas transaksi. Dua sisi jatah itu tidak diperlakukan sama.

Sisi jumlah hanya mengecualikan canceled. Tagihan yang kedaluwarsa, yang gagal, yang masih menunggu, dan yang sudah lunas semuanya tetap terhitung, jadi menerbitkan ulang tautan yang kedaluwarsa tidak pernah mengembalikan slotnya. Sisi nominal hanya menghitung tagihan yang masih menunggu dan yang sudah lunas, sehingga nominal tagihan yang dibatalkan kembali seketika, dan nominal tagihan yang dibiarkan kedaluwarsa kembali begitu waktunya habis.

Akibatnya paling terasa pada penjual baru yang membiasakan diri menerbitkan tautan baru setiap kali pembeli lambat membayar. Sepuluh tautan untuk satu pesanan yang sama menghabiskan seluruh jatah jumlah seumur akun, walaupun sembilan di antaranya tidak pernah dibuka. Membatalkan yang lama sebelum menerbitkan yang baru adalah satu-satunya cara menghentikan penumpukan itu, dan menyelesaikan verifikasi menghapus persoalannya sepenuhnya.

Yang dibaca pembeli, kata per kata

Tautan yang sudah ditutup tetap bisa dibuka. Halamannya tidak menghilang, tidak menjadi halaman kosong, dan tidak menampilkan kode kesalahan. Yang berubah hanya isinya, dan isinya berbeda tergantung jalan mana yang dipakai:

Perbedaannya kecil di layar dan besar di percakapan. Kalimat kedaluwarsa sudah mengandung instruksi berikutnya, sehingga pembeli tahu harus meminta tautan baru. Kalimat pembatalan menunjuk penjual sebagai pihak yang memutuskan, tanpa memberi tahu apa yang harus dilakukan sesudahnya. Kalau tagihan dibatalkan karena akan diganti dengan nominal yang benar, tautan penggantinya sebaiknya dikirim lebih dulu, atau menyusul dalam hitungan detik, supaya kalimat itu tidak dibaca sebagai penolakan.

Cara membatalkannya, dan satu batasan yang perlu diketahui developer

Pembatalan dilakukan dari dashboard, pada halaman detail transaksi, dan tombolnya hanya muncul selama tagihannya masih menunggu. Sisi lain dari kalimat itu penting bagi yang sedang membangun integrasi: API publik tidak memiliki jalur pembatalan. Yang tersedia di sana adalah membuat transaksi, membaca satu transaksi, membaca daftar transaksi, membaca daftar metode pembayaran, serta membuat dan membaca pengembalian dana, seperti tertulis di dokumentasi API. Sebuah sistem yang menerbitkan tagihan secara otomatis karena itu tidak bisa menariknya kembali secara otomatis. Yang tersisa baginya ada dua: menetapkan masa berlaku yang pendek sejak awal, atau menyerahkan pembatalannya kepada manusia yang membuka dashboard.

Menetapkan masa berlaku sejak awal adalah jalan yang lebih baik dari keduanya, dan cara memilih angkanya dibahas di tulisan tentang masa berlaku tagihan. Standarnya 60 menit dengan batas 24 jam.

Permintaan pembatalan yang datang terlambat ditolak dengan tegas, bukan diterima diam-diam. Tagihan yang sudah lunas, sudah kedaluwarsa, atau sudah dibatalkan sebelumnya menghasilkan penolakan not_cancelable dengan keterangan bahwa hanya permintaan yang masih menunggu yang bisa dibatalkan. Menekan tombolnya dua kali karena layar terasa lambat juga aman: percobaan kedua ditolak, bukan menghasilkan pembatalan kedua yang membingungkan. Daftar kode penolakan selengkapnya ada di halaman kode kesalahan.

Satu keadaan tempat membatalkan justru menciptakan masalah

Pembeli mengirim pesan “sudah saya bayar”, tetapi daftar transaksi masih menunjukkan menunggu. Godaan pertama adalah membatalkan tagihan itu lalu menerbitkan yang baru supaya rapi. Itu justru urutan yang paling berisiko, karena dua hal bisa terjadi bersamaan: konfirmasi pembayaran pertama menyusul dan mengubah tagihan yang sudah dibatalkan menjadi lunas, sementara pembeli membayar tautan kedua karena merasa yang pertama ditolak. Hasil akhirnya satu pesanan dengan dua pembayaran lunas, dua kali biaya transaksi, dan satu pengembalian dana yang harus dikirim sendiri, dengan langkah yang diuraikan di tulisan tentang pesanan yang dibayar dua kali.

Urutan yang benar adalah menunggu. Tagihan yang berstatus menunggu akan berhenti sendiri pada masa berlakunya, dan kalau uangnya memang sudah diterima lebih dulu, statusnya berubah menjadi lunas tanpa perlu dibantu. Membatalkan baru masuk akal setelah jelas tidak ada pembayaran yang sedang berjalan, misalnya karena pembeli menyatakan batal membeli atau karena nominalnya salah dan belum ada yang membukanya.

Aturan yang bisa dipakai hari ini

Pada rekap akhir hari, tagihan yang dibatalkan dan yang kedaluwarsa sama-sama muncul dengan namanya sendiri dan tidak ikut terhitung sebagai penjualan, kecuali yang kemudian berubah menjadi lunas. Baris seperti itulah yang perlu dicocokkan dengan pesanan, karena sempat terbaca batal sebelum uangnya datang.

Mulai sekarang

Terima pembayaran pertama minggu ini.

Daftar gratis, buat payment link atau pakai API, dan lihat statusnya berubah otomatis. Tanpa biaya bulanan, biaya transaksi hanya untuk pembayaran yang berhasil.

Dapatkan di Google PlayDownload di App Store