Gunakan status sebagai sumber keputusan
Setiap transaksi dimulai dengan status pending, lalu berakhir sebagai paid atau expired. Jangan membuat versi status pembayaran sendiri di aplikasi Anda. Simpan status KiPay dan status order sebagai dua data yang terhubung, tetapi tetap terpisah.
| Status | Terminal | Tindakan aplikasi |
|---|---|---|
| pending | Tidak | Tampilkan QR dan tunggu konfirmasi |
| paid | Ya | Verifikasi, lalu penuhi order |
| expired | Ya | Tutup checkout dan buat transaksi baru bila diperlukan |
pending
QR sudah tersedia, tetapi jaringan belum mengonfirmasi pembayaran. Pelanggan masih dapat membayar selama waktu pada expires_at belum terlewati.
Jangan membatalkan order hanya karena status belum berubah setelah beberapa detik. Gunakan expires_at sebagai batas yang pasti.
paid
Pembayaran telah cocok dengan transaksi. Field matched_at mencatat waktu pencocokan, sedangkan provider menunjukkan sumber konfirmasi.
- Terima event transaction.paid
- Verifikasi transaksi dari backend
- Pastikan order belum pernah dipenuhi
- Ubah status order menjadi paid secara idempotent
expired
Masa berlaku pembayaran telah berakhir. Jangan gunakan kembali QR dari transaksi ini untuk checkout baru. Buat transaksi baru agar nominal, masa berlaku, dan pelacakan tetap konsisten.