Transaction lifecycle
Setiap order bergerak melalui status yang jelas. Pahami transisinya agar logika bisnis Anda (stok, email, refund) berjalan tepat.
Diagram status
text
Created ──► Success ──► (settlement) ──► isSettlement = true
│
├──► Expired (melewati expiredAt tanpa pembayaran)
├──► Invalid (pembayaran tidak valid / dibatalkan sistem)
└──► Underpaid (dana masuk kurang dari totalAmount)Daftar status
| Status | Arti | Tindakan yang disarankan |
|---|---|---|
Created | Order dibuat, menunggu pembayaran | Tampilkan QR & nominal ke pelanggan |
Success | Pembayaran terverifikasi on-chain | Tandai lunas, kirim barang, catat dari webhook |
Expired | Batas waktu expiredAt terlewat | Batalkan pesanan atau minta pelanggan membuat order baru |
Invalid | Pembayaran tidak dapat diproses | Hubungi pelanggan; dana tidak dikreditkan |
Underpaid | Dana masuk kurang dari totalAmount | Hubungi pelanggan untuk melunasi selisih atau refund manual |
Settlement
Settlement bukan status order, melainkan flag isSettlement:
false— dana masih di alamat deposit (menunggu sweep).true— dana sudah dipindahkan ke wallet settlement Anda.
Lihat Settlement untuk jadwal dan cara memicu manual.
Menangani status di sistem Anda
Contoh handler webhook
switch (event.data.status) {
case "Success":
await markOrderPaid(event.data.order_no, {
paid: event.data.final_amount,
txHash: event.data.tx_hash,
});
break;
default:
// Underpaid/Invalid ditangani lewat polling getOrder bila perlu.
break;
}Order kedaluwarsa
- QR memiliki
expiredAt(umumnya 15 menit). - Bila lewat, minta pelanggan memulai order baru — kurs bisa berbeda.
- Payment link dapat memiliki masa berlaku sendiri (
date_expired).