| Status | Arti | Bisa berubah ke |
|---|---|---|
pending | Menunggu pembayaran, QR masih berlaku | paid, expired, cancelled |
paid | Lunas, saldo sudah bertambah | Final |
expired | Lewat batas waktu QR | paid (selama masa tenggang) |
cancelled | Dibatalkan oleh merchant | Final |
Masa tenggang pembayaran terlambat
QR di sisi gateway kadang masih bisa dibayar setelah batas waktu. Karena itu invoice expired tetap dicek ke gateway sampai 1 jam setelah expires_at. Bila pembayaran ditemukan, invoice menjadi paid dan webhook dikirim seperti biasa.
Siapa pemilik sebuah nominal?
Karena pencocokan memakai nominal, bila ada invoice lebih baru dengan nominal sama (menunggu, kedaluwarsa dalam masa tenggang, atau sudah lunas), invoice yang lebih lama tidak akan diklaim. Aturan ini mencegah satu pembayaran mengkredit dua invoice.
Kapan status diperbarui?
- Saat
GET /api/invoices/{id}dipanggil. - Saat halaman bayar dibuka atau disegarkan (polling oleh browser pelanggan).
- Saat halaman pertama
GET /api/invoicesdimuat (maksimal 10 invoice hidup disegarkan).
Pengecekan ke gateway dibatasi 30 kali per menit untuk tiap invoice.
Biaya dan saldo
Saat lunas, fee = round(amount × fee_percent / 100) dan saldo bertambah amount − fee. Pelunasan bersifat atomik dan idempoten: sebuah invoice tidak mungkin dikreditkan dua kali.