Menangani pembayaran kedaluwarsa dan status pending yang terlalu lama
Berapa lama pembayaran QRIS dan USDT terbuka, apa yang dilakukan saat kedaluwarsa, kenapa percobaan ulang butuh merchant_reference baru, dan cara menangani pembayaran yang terlambat.
Terbit 11 Oktober 2026 3 menit baca
Setiap pembayaran PAYWISE dimulai dengan status pending dan berakhir di satu status akhir: paid, expired, atau failed. Biasanya ini berlangsung cepat. Tapi pelanggan bisa terdistraksi, baterai HP habis, dan jaringan lambat. Panduan ini menjelaskan apa yang perlu dilakukan saat pembayaran kedaluwarsa, atau terlihat pending terlalu lama.

Berapa lama pembayaran terbuka
| Metode | Bisa dibayar selama | Diatur dengan |
|---|---|---|
| QRIS | 20 menit (bawaan) | expires_in: 60 sampai 1.200 detik |
| USDT (BEP20) | 60 menit | tetap |
Waktu pastinya ada di expires_at pada respons API. Tampilkan hitungan mundur di halaman Anda (halaman pembayaran PAYWISE sudah melakukannya), supaya pelanggan tahu sisa waktunya.
Setelah waktu itu habis, PAYWISE mengecek pembayaran sekali lagi lalu menandainya expired. Anda menerima webhook payment.expired kalau Anda berlangganan event itu.
"Pending" lama: mana yang wajar?
- QRIS: pembayaran yang masih pending beberapa menit setelah pelanggan bilang sudah bayar itu tidak biasa. Buka di dashboard lalu tekan Cek status sekarang: PAYWISE menanyakan langsung ke penyedia pembayaran.
- USDT: pembayaran blockchain butuh konfirmasi, jadi jeda beberapa menit antara mengirim dan paid itu wajar.
Kalau server Anda mengecek berkala, pakai GET /api/v1/transactions/{reference}, tapi jangan setiap detik: API membatasi 60 request per menit per key. Menunggu webhook adalah cara yang lebih baik. Lihat callback vs redirect.
Saat pembayaran kedaluwarsa
- Jangan kirim barang. Tidak ada uang yang masuk.
- Simpan pesanannya, tandai sebagai "pembayaran kedaluwarsa", jangan dihapus.
- Tawarkan pembayaran baru dengan tombol yang jelas seperti "Bayar lagi".
Percobaan ulang butuh merchant_reference baru
merchant_reference juga berfungsi sebagai idempotency key. Kalau Anda membuat pembayaran lagi dengan referensi dan nominal yang sama, PAYWISE mengembalikan pembayaran yang lama, yang sudah kedaluwarsa. Untuk percobaan baru, pakai referensi baru:
$attempt = $order->payment_attempts + 1;
$payment = $paywise->createTransaction([
'merchant_reference' => 'ORDER-' . $order->id . '-' . $attempt, // ORDER-1042-2
'amount' => $order->total,
'payment_method' => 'QRIS',
'customer_id' => (string) $order->user_id,
]);
Simpan setiap reference PAYWISE dari pesanan itu, supaya webhook dari percobaan mana pun tetap menemukan pesanan yang benar. Baca juga tentang idempotency.
Pembayaran terlambat: saat "expired" berubah jadi "paid"
Kadang pelanggan membayar di detik terakhir, atau konfirmasi dari jaringan pembayaran datang terlambat. Kalau penyedia memastikan pelanggan benar-benar sudah membayar, PAYWISE menandai pembayaran itu paid, walaupun sebelumnya sudah expired, lalu mengirim payment.paid. Untuk USDT, deposit yang datang setelah 60 menit tetap dikonfirmasi.
Jadi toko Anda harus siap menerima payment.paid untuk pesanan yang sudah dianggap kedaluwarsa:
- Kalau pesanan masih bisa dipenuhi, proses pesanannya.
- Kalau tidak bisa (misalnya pelanggan sudah membayar lagi lewat percobaan baru, atau barangnya habis), tandai untuk refund yang Anda lakukan sendiri. Lihat refund dan komplain pelanggan.
Pembayaran USDT yang kurang dari nominal pasti tidak ditandai paid. Kalau pelanggan bilang sudah mengirim USDT tapi pembayarannya kedaluwarsa, buka tiket di menu Bantuan dengan nomor referensi PAYWISE.
Checklist
- Tampilkan hitungan mundur, dan tombol "Bayar lagi" setelah kedaluwarsa.
- Pakai
merchant_referencebaru untuk setiap percobaan baru. - Tangani
payment.expireddanpayment.failed, bukan hanyapayment.paid. - Terima
payment.paidyang datang setelah kedaluwarsa, lalu putuskan: proses atau refund. - Untuk pembayaran yang lama pending, pakai Cek status sekarang sebelum menghubungi pelanggan.
- Uji ketiga hasil di sandbox.

