Blog · Terbit · Diperbarui

Menerima pembayaran toko top up game dan voucher: ID pemain yang dicek sebelum ditagih, top up yang dikirim setelah Dibayar, dan pengiriman otomatis yang tidak mengisi dua kali

Toko top up game menjual barang yang tidak bisa ditarik kembali. Diamond yang sudah masuk ke akun pemain tidak bisa dibatalkan, dan saldo di pemasok sudah terpakai saat itu juga. Karena itu urutannya tidak boleh terbalik: ID dan server pemain dicocokkan lebih dulu, tagihan dibuat dengan nominal final, top up baru dikirim setelah status Dibayar, dan setiap pembayaran hanya boleh memicu satu pengiriman. Biaya QRIS-nya 0,7% + Rp 250 per pembayaran, jadi paket Rp 50.000 kena Rp 350 ditambah Rp 250, yaitu Rp 600.

ID pemain dicek sebelum tagihan dibuat, bukan sesudahnya

Kesalahan yang paling mahal di toko top up bukan pembayaran palsu, tetapi ID yang salah ketik. Pembayaran QRIS dan Virtual Account yang sudah berhasil tidak bisa di-refund lewat Kasera Pay. Kalau penjual memutuskan mengganti, uangnya ditransfer dari rekening sendiri, biaya transaksinya tidak kembali, dan saldo pemasok yang terlanjur terpakai juga hilang. Satu salah ketik pada paket Rp 50.000 bisa menghapus untung dari puluhan pesanan.

Yang bisa dilakukan sebelum tagihan dibuat:

Jualan lewat WhatsApp: satu tagihan per pesanan

Penjual tanpa website membuat permintaan pembayaran dari dashboard atau aplikasi Kasera Pay di Android atau iPhone untuk setiap pesanan: isi Nominal, pilih QRIS di Metode, dan isi Keterangan dengan paket dan ID pemain, misalnya 86 diamond, ID 12345678 (2011). Tautannya dikirim ke pembeli, dan tagihan dari dashboard berlaku 60 menit. Langkahnya dirinci di panduan menerima pembayaran tanpa coding.

Keterangan itulah yang membuat pekerjaan berikutnya mekanis. Saat status berubah menjadi Dibayar, penjual membaca ID dari tagihan itu sendiri, bukan dari riwayat chat yang sudah bergulir puluhan pesan, lalu mengirim top up dari aplikasi pemasok. Satu pembeli yang memesan tiga kali untuk tiga akun mendapat tiga tagihan, bukan satu tagihan gabungan, sehingga setiap pembayaran menunjuk tepat satu ID.

Kalau biaya ingin ditanggung pembeli, centang Terima utuh di formulir. Nominal yang diketik menjadi yang diterima penjual, dan pembeli melihat total yang lebih besar sebelum membayar: tagihan Terima utuh Rp 10.000 menjadi Rp 10.323 bagi pembeli. Bukti yang dipegang tetap status di dashboard; pola pemalsuan bukti yang biasa dipakai dibahas di tulisan tentang bukti transfer palsu.

Toko web otomatis: tiga penjaga agar top up tidak terkirim dua kali

Toko yang mengirim top up otomatis membuat transaksi lewat API saat pembeli menekan bayar, menunggu webhook payment.paid, lalu memanggil API pemasok. Setiap langkah itu bisa terulang: pembeli menekan tombol dua kali, koneksi putus lalu dicoba lagi, dan webhook dikirim at-least-once sehingga event yang sama bisa tiba lebih dari sekali. Pengulangan di dua langkah pertama hanya mengganggu. Pengulangan di langkah ketiga menghabiskan saldo pemasok.

  1. Satu Idempotency-Key per pesanan. Key dibuat sekali saat pesanan dibuat, disimpan di baris pesanan, dan dikirim ulang di setiap percobaan create. Nomor pesanan di external_id tidak mencegah duplikat; hanya header itu yang mencegahnya. Alasannya dibahas di tulisan tentang idempotency untuk pembayaran.
  2. Dedupe id event sebelum pemasok dipanggil. Simpan id event dengan primary key di transaksi database yang sama dengan perubahan status pesanan, dan panggil pemasok hanya kalau barisnya baru. Cocokkan juga amount di event dengan total pesanan. Bentuk kodenya ada di panduan integrasi Express.
  3. Nomor pesanan sebagai referensi di pemasok. Kalau API pemasok menerima referensi unik per transaksi, kirim nomor pesanan yang sama. Pemanggilan ulang setelah timeout lalu ditolak pemasok sebagai duplikat, bukan diproses sebagai pesanan kedua.

Untuk paket kecil, kirim payment_methods: ["qris"] saat create agar pembeli langsung diarahkan ke QR. Status pesanan di toko berpindah ke lunas hanya dari webhook yang tanda tangannya sah, atau dari pembacaan status transaksi di server, tidak pernah dari halaman kembali setelah membayar.

Pembayaran yang masuk setelah tagihan kedaluwarsa

Tagihan yang kedaluwarsa masih bisa dibayar kalau QR-nya sudah terlanjur dipindai. Pembayaran seperti itu tetap dihitung, statusnya berubah menjadi berhasil, dan webhook payment.paid tetap dikirim. Toko yang membatalkan pesanan saat menerima payment.expired harus bisa menghidupkannya kembali: kirim top up-nya, atau kalau harga di pemasok sudah berubah dan paketnya tidak tersedia, hubungi pembeli dan kembalikan uangnya dengan transfer. Masa berlaku tagihan API bisa dipendekkan lewat expires_in_minutes, tetapi pembayaran yang terlambat tetap mungkin.

Kalau pemasok gagal setelah pembeli membayar

Pembeli sudah membayar, lalu pemasok menjawab gangguan atau saldo deposit tidak cukup. Pembayarannya sudah tercatat berhasil di Kasera Pay, dan yang tertunda hanya pengirimannya. Antrekan pesanan itu sebagai “dibayar, belum terkirim”, coba lagi dengan referensi yang sama, dan beri tahu pembeli kalau pengirimannya lebih lama dari biasanya. Kalau paketnya benar-benar tidak bisa dikirim, uangnya dikembalikan dengan transfer dari rekening penjual, dan biaya transaksi yang sudah terpotong tidak kembali. Deposit di pemasok yang cukup untuk jam ramai, biasanya malam hari dan akhir pekan, mencegah sebagian besar kasus ini.

Biaya per nominal

Tarif default saat tulisan ini diperbarui: QRIS 0,7% (dibulatkan ke atas) + Rp 250 per pembayaran berhasil di nominal berapa pun, Virtual Account Rp 5.000 per pembayaran berhasil, pencairan ke rekening Rp 3.000 per pencairan, tanpa biaya bulanan. Contoh dengan biaya ditanggung penjual:

NominalBiaya QRISBiaya Virtual Account
Rp 5.000Rp 35 + Rp 250 = Rp 285 (5,7%)Di bawah minimum Rp 10.000
Rp 20.000Rp 140 + Rp 250 = Rp 390 (2%)Rp 5.000
Rp 50.000Rp 350 + Rp 250 = Rp 600 (1,2%)Rp 5.000
Rp 100.000Rp 700 + Rp 250 = Rp 950Rp 5.000
Rp 150.000Rp 1.050 + Rp 250 = Rp 1.300Rp 5.000
Rp 500.000Rp 3.500 + Rp 250 = Rp 3.750Rp 5.000

Yang perlu dibaca dari tabel itu: di toko top up, Rp 250 tetap per pembayaran adalah bagian terbesar dari biaya paket kecil, jadi yang paling terasa adalah paket termurah. Sebagai ilustrasi, paket yang modalnya Rp 4.600 di pemasok dan dijual Rp 5.000 menyisakan Rp 400 sebelum biaya. Setelah biaya Rp 285, yang tersisa hanya Rp 115. Paket seperti itu dijual dengan Terima utuh, digabung menjadi paket yang lebih besar, atau harganya dinaikkan. Virtual Account baru lebih murah daripada QRIS antara sekitar Rp 678.600 dan Rp 1.000.000 per pembayaran, nominal yang jarang muncul di toko top up. Cara memasukkan biaya ke harga ada di tulisan tentang harga jual setelah biaya transaksi.

Sebelum pesanan pertama

Penjual perorangan bisa mendaftar tanpa badan usaha; verifikasi pemilik memakai KTP dan selfie. Sebelum verifikasi selesai, akun bisa membuat 10 permintaan pembayaran dengan total Rp 1.000.000. Toko top up melewati sepuluh pesanan dalam satu malam yang ramai, jadi selesaikan verifikasi sebelum promosi pertama. Batas nominal lainnya dirinci di dokumentasi batas transaksi, dan rate limit API untuk toko yang ramai saat event gim ada di dokumentasi rate limit. Kebijakan penggunaan Kasera Pay melarang judi, taruhan, dan undian dalam bentuk apa pun. Untuk produk yang ragu-ragu berada di sisi mana, misalnya chip gim bertema kasino, tanyakan ke [email protected] sebelum menjualnya.

Pertanyaan yang sering muncul

Pembeli salah menulis ID pemain dan diamond-nya masuk ke akun orang lain. Uangnya bisa dikembalikan lewat Kasera Pay?

Tidak. Pembayaran QRIS dan Virtual Account yang sudah berhasil tidak bisa di-refund lewat Kasera Pay, baik oleh penjual maupun oleh Kasera. Kalau penjual memutuskan mengganti, nominalnya ditransfer dari rekening sendiri, dan biaya transaksi yang sudah terpotong tidak kembali. Saldo pemasok yang terpakai juga tidak kembali. Karena itu ID dan server dibacakan ulang ke pembeli, atau nama akunnya dicek, sebelum tagihan dibuat.

Pembeli mengirim tangkapan layar bukti bayar sebelum status berubah. Top up boleh dikirim?

Tunggu status Dibayar di dashboard atau webhook payment.paid. Tangkapan layar bisa diedit atau diambil dari transaksi lain, dan top up yang sudah masuk ke akun gim tidak bisa ditarik kembali. Biasanya statusnya berubah dalam hitungan detik setelah pembayaran dikonfirmasi.

Bisakah pembeli membayar paket Rp 5.000 lewat Virtual Account?

Tidak. Nominal minimum Virtual Account Rp 10.000, dan biayanya Rp 5.000 tetap per pembayaran, jadi untuk paket kecil Virtual Account tidak masuk akal. QRIS menerima mulai Rp 1.000 dengan biaya 0,7% + Rp 250, jadi paket Rp 5.000 kena Rp 35 ditambah Rp 250, yaitu Rp 285. Batasi metode ke QRIS untuk paket kecil, lewat pilihan Metode di dashboard atau payment_methods di API.

Panduan per jenis usaha

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