Stop Polling, Mulai Webhook: Notifikasi Transaksi Real-Time di IsiKuota
Kalau Anda masih melakukan polling berulang ke endpoint status hanya untuk tahu apakah transaksi sudah berhasil, ada cara yang jauh lebih efisien: webhook. Dengan webhook, IsiKuota yang akan memberitahu server Anda begitu status transaksi berubah.
Polling vs Webhookโ
| Polling | Webhook | |
|---|---|---|
| Cara kerja | Anda terus bertanya "sudah selesai?" | IsiKuota memberi tahu saat selesai |
| Beban server | Boros request | Efisien |
| Kecepatan info | Terlambat (tergantung interval) | Real-time |
Cara Kerja Webhookโ
Transaksi terjadi
โ โผ
IsiKuota memproses
โ โผ
Status berubah (success/failed)
โ โผ
IsiKuota POST ke URL webhook Anda
โ โผ
Server Anda balas HTTP 200
Contoh Payloadโ
{
"event": "transaction.updated",
"event_id": "evt_01J3K8M2N4P5Q6R7S8T9U0V1W2",
"timestamp": "2025-01-15T14:30:00+07:00",
"data": {
"ref_id": "ORDER-2025-001",
"status": "success",
"product_code": "TSEL5",
"customer_no": "081234567890",
"price": 11500,
"sn": "1234567890123456",
"balance": 489000
}
}
Tentukan tindakan Anda berdasarkan data.status, bukan cuma dari nama event. Contoh di atas untuk transaction.updated (order PPOB) โ ada juga event deposit.updated untuk notifikasi status deposit saldo via API, dikirim ke URL webhook yang sama. Detail struktur tiap event ada di Daftar Events.
WAJIB: Verifikasi Signatureโ
Setiap request webhook menyertakan header X-Isikuota-Signature: sha256=<hex>. Selalu verifikasi sebelum memproses, untuk memastikan request benar-benar dari IsiKuota:
function verifyWebhook(string $rawBody, string $signature, string $secret): bool
{
$expected = 'sha256=' . hash_hmac('sha256', $rawBody, $secret);
return hash_equals($expected, $signature);
}
Tanpa verifikasi signature, siapa pun bisa mengirim payload palsu ke endpoint Anda dan memicu pengiriman barang/saldo fiktif. Gunakan timing-safe comparison (hash_equals / timingSafeEqual).
Persyaratan Serverโ
| Persyaratan | Detail |
|---|---|
| Protokol | HTTPS (wajib di production) |
| Method | POST |
| Response | HTTP 2xx dalam 15 detik |
Jika gagal, IsiKuota retry hingga 3 kali dengan jeda 10s, 30s, lalu 60s.
Best Practicesโ
- Verifikasi signature sebelum apa pun.
- Balas HTTP 200 segera, proses di background/queue.
- Idempoten โ gunakan
event_idatauref_iduntuk mendeteksi pengiriman ganda sebelum update database. - Log setiap callback untuk audit & debugging.
- Test dulu dengan Webhook Tester di Dashboard.
Mulai Integrasiโ
- Daftarkan URL webhook di Pengaturan โ Webhook
- Implementasikan verifikasi signature
- Test dengan transaksi mode testing
โ Dokumentasi lengkap: Webhook Overview ยท Setup Webhook ยท Daftar Events.
Butuh bantuan? Lihat FAQ Developer & API atau hubungi [email protected].