Blog · Terbit
Pembayaran yang masuk saat toko tutup: tautan yang mati pukul sebelas malam padahal pembelinya baru bangun pukul enam, satu status kedaluwarsa yang masih bisa berubah menjadi berhasil, dan pemberitahuan yang memang tidak membangunkan siapa pun
Jawaban singkatnya lebih dulu: pembayaran yang masuk pukul dua pagi diproses sepenuhnya tanpa ada yang perlu berjaga. Status berubah sendiri, pembayarannya tercatat sendiri, dan surel serta webhook terkirim sendiri. Yang gagal semalam hampir tidak pernah pembayarannya.
Yang gagal adalah tautannya, karena tautan punya jam sendiri yang terus berjalan saat toko tutup. Tagihan yang dibuat pukul 21.40 dengan masa berlaku bawaan sudah mati pukul 22.40, dan pembeli yang membuka chat pukul 06.30 menemukan halaman yang tidak bisa dibayar. Tiga keputusan di bawah ini diambil sebelum tutup, bukan sesudah keluhannya masuk.
Keputusan pertama: masa berlaku, dan kolom yang tidak ada di dashboard
Masa berlaku bawaan sebuah tagihan adalah enam puluh menit sejak dibuat, dan angka itu dipilih untuk keadaan yang paling umum, yaitu pembeli yang membayar sambil percakapannya masih berlangsung. Di luar jam kerja keadaannya terbalik: jarak antara tagihan dikirim dan pembeli membukanya bisa sepuluh jam.
Hal yang jarang diketahui sebelum sempat menyakiti: masa berlaku tidak bisa diubah dari dashboard. Formulir pembuatan tagihan menampilkan angka bawaannya pada baris keterangan batas, tetapi tidak menyediakan kolom untuk menggantinya. Masa berlaku yang lebih panjang hanya bisa diminta lewat API, dengan menyertakan expires_in_minutes pada permintaan pembuatan tagihan. Plafon yang berlaku atasnya ada di dokumentasi batas transaksi, bersama galat 422 expiry_too_long yang muncul kalau permintaannya melewati plafon itu.
Artinya jalur yang benar berbeda menurut siapa yang menagih. Penjual yang punya integrasi menghitung mundur dari jam buka: tagihan yang terbit pukul 22.00 dan harus bertahan sampai pukul 09.00 memerlukan enam ratus enam puluh menit, dan angka itu dikirim apa adanya. Penjual yang menagih dari dashboard tidak punya tuas itu sama sekali, sehingga pilihannya tinggal dua: menunda penerbitan tautan sampai pagi, atau berhenti memakai tautan sekali pakai untuk penjualan di luar jam kerja.
Keputusan kedua: berhenti memakai tautan yang punya tenggat
Pilihan kedua itu yang biasanya benar, dan alasannya bukan kenyamanan melainkan cara jamnya dihitung. Halaman pembayaran yang dipakai berulang bersifat permanen: satu tautan yang sama dibagikan berkali-kali dan tidak pernah kedaluwarsa. Pembayaran yang lahir darinya tetap memakai jam enam puluh menit yang sama, tetapi jam itu baru mulai berjalan pada saat pembeli menekan tombol bayar, bukan pada saat penjual membagikan tautannya.
Perbedaan itu menghapus seluruh masalah semalaman. Tautan yang ditempel di bio Instagram atau dikirim ke grup pukul sepuluh malam tetap hidup pukul tiga pagi, dan pembeli yang memindainya saat itu mendapat enam puluh menit penuh miliknya sendiri. Yang ditukar adalah nominal: halaman permanen cocok untuk harga yang tetap atau nominal yang ditentukan pembayar, sedangkan pesanan dengan total yang berbeda tiap pembeli tetap menuntut tagihan sekali pakai. Untuk toko yang menagih keduanya, susunan yang biasanya benar adalah halaman permanen untuk katalog yang harganya tetap, dan tagihan sekali pakai hanya pada jam buka.
Kedaluwarsa masih bisa berubah. Dibatalkan tidak akan pernah
Satu aturan menyelamatkan banyak pagi, dan bunyinya berlawanan dengan dugaan. Pembayaran yang sudah berstatus expired masih bisa berubah menjadi succeeded. Kalau uang pembeli sudah diterima penyedia jasa pembayaran berlisensi sebelum penghitung waktu di sisi Kasera Pay berbunyi, konfirmasi yang datang terlambat tetap memindahkan pembayaran itu ke berhasil. Uang yang benar-benar masuk tidak pernah disembunyikan hanya karena tenggat internal lewat lebih dulu, dan ini satu-satunya perpindahan yang diizinkan keluar dari kedaluwarsa.
Pasangannya adalah peringatan. Tagihan yang dibatalkan tidak punya jalan pulang itu. Membereskan daftar sebelum tutup dengan membatalkan semua tagihan yang belum dibayar terasa rapi, tetapi menutup satu-satunya pintu yang tersisa bagi pembayaran yang sedang dalam perjalanan. Kebiasaan yang benar adalah membiarkan tagihan kedaluwarsa sendiri. Tidak ada yang perlu dirapikan pada daftar yang membersihkan dirinya sendiri.
Keputusan ketiga: siapa yang diberi tahu, dan mengapa bukan siapa-siapa
Tiga jalur membawa kabar pembayaran, dan penting untuk menerima bahwa tak satu pun dirancang membangunkan orang. Surel pembayaran berhasil hanya dikirim ke pemilik akun, sehingga kasir atau staf tidak menerimanya sama sekali. Notifikasi peramban melekat pada satu peramban di satu perangkat dan padam saat keluar dari akun. Daftar transaksi di dashboard selalu lengkap tetapi menunggu dibuka. Perbandingan penuh ketiganya ada di perbandingan notifikasi dashboard dan webhook.
Bahwa tidak ada alarm adalah rancangan yang benar untuk hampir semua usaha. Pesanan yang dibayar pukul dua pagi hampir tidak pernah perlu dikerjakan pukul dua pagi, dan usaha yang memaksakan kesiagaan dua puluh empat jam demi pemberitahuan biasanya sedang memecahkan masalah yang tidak dimilikinya. Pengecualiannya sempit dan jelas: penjualan yang aksesnya harus terbuka seketika, misalnya produk digital, nomor lisensi, atau tiket yang dipakai malam itu juga.
Untuk pengecualian itu, jawabannya bukan manusia yang menunggu bunyi melainkan sistem yang menerima payment.paid. Webhook adalah satu-satunya jalur yang bergerak sendiri pukul tiga pagi, dan kiriman yang gagal dicoba ulang berkali-kali selama lebih dari satu hari penuh. Akibat praktisnya menenangkan: server yang mati semalam tidak kehilangan kabar pembayarannya, karena percobaan berikutnya masih berjalan saat server itu hidup lagi. Mekanisme dan verifikasi tanda tangannya ada di dokumentasi webhook.
Pagi berikutnya: lima menit, bukan satu per satu
Kesalahan yang paling sering pada pagi hari adalah membuka tagihan satu per satu untuk memastikan. Urutan yang lebih cepat berangkat dari status, bukan dari tagihan:
- Saring daftar transaksi pada
succeededuntuk rentang semalam. Ini satu-satunya daftar yang menentukan pekerjaan hari ini, dan panjangnya biasanya pendek. - Saring pada
pending. Isinya adalah tagihan yang jamnya masih berjalan, dan satu-satunya yang mungkin menuntut tindakan adalah yang akan mati sebelum pembelinya bangun. - Saring pada
expired, lalu cocokkan dengan keluhan yang masuk. Hanya pembeli yang mengaku sudah membayar yang perlu ditelusuri, dan sebagian akan berpindah sendiri menjadi berhasil karena aturan konfirmasi terlambat di atas. - Terbitkan ulang tautan bagi pembeli yang tautannya mati, bukan perpanjangan. Masa berlaku menempel pada tagihan yang sudah terbit dan tidak bisa digeser setelahnya.
Urutan penutupan hari yang lebih lengkap, termasuk pencocokan ke mutasi bank, ada di panduan rekonsiliasi harian toko online. Untuk libur yang panjangnya berhari-hari dan pengaruhnya pada arus kas, pembahasannya terpisah di libur panjang dan arus kas.
Ringkasnya
Pembayaran tidak butuh penjaga; tautan butuh. Masa berlaku bawaan enam puluh menit hanya cocok untuk percakapan yang masih berlangsung, tidak bisa diubah dari dashboard, dan hanya bisa diperpanjang lewat API. Penjual tanpa kode yang menagih di luar jam kerja sebaiknya memakai halaman pembayaran permanen, yang jamnya baru mulai saat pembeli menekan bayar. Tagihan yang tidak dibayar dibiarkan kedaluwarsa sendiri dan tidak dibatalkan, karena kedaluwarsa masih bisa berubah menjadi berhasil sementara dibatalkan tidak. Dan kalau ada yang benar-benar harus bergerak tengah malam, yang dipasang adalah webhook, bukan jadwal jaga.
Pertanyaan yang sering muncul
Apakah pembayaran tetap diproses kalau dashboard tidak dibuka semalaman?
Ya, seluruhnya. Konfirmasi pembayaran datang dari penyedia jasa pembayaran berlisensi ke sistem Kasera Pay, bukan dari peramban yang sedang terbuka. Status berubah menjadi succeeded, pembayarannya tercatat pada daftar transaksi, dan surel serta webhook terkirim, tanpa ada yang perlu online. Yang tidak berjalan sendiri hanyalah pekerjaan yang memang dilakukan manusia, misalnya mengemas pesanan atau membuka akses kelas.
Masa berlaku tagihan bisa diperpanjang dari dashboard?
Tidak. Formulir pembuatan tagihan di dashboard menampilkan masa berlaku bawaan pada baris keterangan batasnya, tetapi tidak menyediakan kolom untuk mengubahnya. Masa berlaku yang lebih panjang hanya bisa diminta lewat API dengan expires_in_minutes, dengan plafon yang tercantum di dokumentasi batas transaksi. Penjual tanpa kode yang sering menagih di luar jam kerja sebaiknya memakai halaman pembayaran permanen, bukan tautan sekali pakai.
Tagihan sudah kedaluwarsa tetapi pembeli mengaku sudah membayar. Uangnya hilang?
Tidak, dan ini satu-satunya perpindahan status yang diizinkan keluar dari expired. Kalau uang pembeli sudah diterima sebelum penghitung waktu di sisi Kasera Pay berbunyi, konfirmasi yang datang terlambat tetap memindahkan pembayaran itu menjadi succeeded. Aturannya sengaja dibuat berat sebelah ke arah pembeli: uang yang benar-benar masuk tidak pernah disembunyikan hanya karena tenggat internal lewat lebih dulu.
Apakah tagihan yang tidak dibayar sebaiknya dibatalkan sebelum tutup toko?
Justru sebaiknya tidak, dan ini kebiasaan merapikan yang mahal. Pembayaran yang dibatalkan tidak bisa lagi berubah menjadi berhasil, sehingga uang yang terlanjur masuk atasnya menjadi urusan dukungan pelanggan dan bukan sesuatu yang selesai sendiri. Membiarkannya kedaluwarsa sendiri menyisakan satu jalan pulang; membatalkannya menutup jalan itu.
Kenapa pemberitahuan pembayaran tidak sampai ke ponsel kasir tengah malam?
Karena surel pembayaran hanya dikirim ke pemilik akun, sementara notifikasi peramban melekat pada satu peramban di satu perangkat dan padam saat keluar dari akun. Keduanya bukan alarm dan tidak dirancang menjadi alarm. Untuk usaha yang memang harus bergerak di luar jam kerja, jalur yang tepat adalah sistem yang menerima webhook, bukan manusia yang menunggu bunyi.