Generate QRIS dinamis dengan nominal + kode unik otomatis dari QRIS statis Anda.
| Feature | v1 (/qris) | v2 (/v2/qris) |
|---|---|---|
| QR string | Selalu ada | Conditional (useQris) |
| QR type | dynamic (fixed) | dynamic | static |
| Payment method | qris (fixed) | qris | ewallet |
| Status field | — | pending |
| Expired in minutes | ✓ | ✓ |
Gunakan v2 untuk production. v1 retained untuk backward compatibility.
Qrisy menambahkan kode unik 1-999 ke nominal asli untuk membedakan transaksi dengan nominal sama. Contoh:
Amount: 15000
Unique nominal: 450
Total bayar: 15450 ← customer scan QR iniKode unik increment atomic per merchant (1, 2, 3, ..., 999, 1, 2, ...). Tidak akan collision antar transaksi concurrent.
SDK menyediakan shortcut per wallet:
// Node.js
const trx = await qrisy.wallets.generateQRDana(15000, { qr_id: 'uuid' });
const trx = await qrisy.wallets.generateQRGoPay(25000, { qr_id: 'uuid' });
const trx = await qrisy.wallets.generateQRShopee(50000, { qr_id: 'uuid' });# Python
trx = qrisy.wallets.generate_qr_dana(15000, qr_id="uuid")
trx = qrisy.wallets.generate_qr_gopay(25000, qr_id="uuid")
trx = qrisy.wallets.generate_qr_shopee(50000, qr_id="uuid")// PHP
$trx = $qrisy->wallets->generateQRDana(15000, ['qr_id' => 'uuid']);Atau generic via packageName:
const trx = await qrisy.wallets.generateQRWallet('com.shopee.id', 50000, { qr_id: 'uuid' });Default: 15 menit. Max: 60 menit. Saat expired, status berubah expired dan webhook expired dikirim.
// Polling (manual)
const status = await qrisy.checkStatus('txn_01ABC...');
// Polling (auto, recommended)
const paid = await qrisy.waitForPayment('txn_01ABC...', {
interval: 3000, // 3 seconds
timeout: 900000, // 15 minutes
});await qrisy.cancelTransaction('txn_01ABC...');Hanya bisa cancel transaksi dengan status pending. Status terminal (paid/cancel/expired) tidak bisa di-cancel.
{
"transactionId": "txn_01ABCDEF...",
"originalAmount": 15000,
"totalAmount": 15450,
"uniqueNominal": 450,
"useUniqueCode": true,
"packageIds": ["id.dana"],
"expiredInMinutes": 15,
"qrType": "dynamic",
"paymentMethod": "qris",
"useQris": true,
"status": "pending",
"qr_string": "00020101021226...",
"expiredAt": "2026-08-02T10:15:00.000Z"
}