Selain webhook, Qrisy SDK menyediakan polling helper untuk cek status transaksi secara otomatis.
Block sampai transaksi paid/cancel/expired/timeout. Resolve saat paid, reject bila cancel/expired.
try {
const paid = await qrisy.waitForPayment(trx.transactionId, {
interval: 3000, // 3 seconds
timeout: 900000, // 15 minutes
});
console.log('Paid at:', paid.paidAt);
} catch (err) {
console.error('Failed:', err.message);
}try:
paid = qrisy.wait_for_payment(trx.transaction_id, interval=3.0, timeout=900.0)
print(f"Paid at: {paid.paid_at}")
except Exception as e:
print(f"Failed: {e}")
# Async (asyncio)
async def main():
paid = await qrisy.async_wait_for_payment(trx.transaction_id)
import asyncio
asyncio.run(main())try {
$paid = $qrisy->waitForPayment(
$trx->transactionId,
intervalMs: 3000,
timeoutMs: 900000,
);
echo "Paid at: {$paid->paidAt}";
} catch (\Qrisy\Exception\QrisyException $e) {
echo "Failed: {$e->getMessage()}";
}Poll dengan callback yang dipanggil setiap status berubah. Return stop function.
const stop = qrisy.watchPayment(trx.transactionId, {
interval: 3000,
timeout: 900000,
onStatusChange: (status, response) => {
console.log(`Status: ${status}`, response.data);
},
onError: (err) => console.error(err),
});
// Stop manual
stop();stop = qrisy.watch_payment(
trx.transaction_id,
interval=3.0,
on_status_change=lambda status, data: print(f"Status: {status}"),
on_error=lambda err: print(f"Error: {err}"),
)
# Stop manual
stop()| Aspect | Webhook | Polling |
|---|---|---|
| Latency | <3 seconds (push) | 3-5 seconds (interval) |
| Server required | Ya (public URL) | Tidak |
| Reliability | 5x retry + DLQ | Maks errors 5 |
| Best for | Backend integration | Scripts, CLI, testing |
Untuk production, gunakan webhook (push-based). Polling cocok untuk testing atau script satu-shot.