Skip to main content

Stop Polling, Mulai Webhook: Notifikasi Transaksi Real-Time di IsiKuota

ยท 2 min read
Tim Developer IsiKuota
Backend & Platform Engineering

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โ€‹

PollingWebhook
Cara kerjaAnda terus bertanya "sudah selesai?"IsiKuota memberi tahu saat selesai
Beban serverBoros requestEfisien
Kecepatan infoTerlambat (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);
}
Jangan skip verifikasi

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โ€‹

PersyaratanDetail
ProtokolHTTPS (wajib di production)
MethodPOST
ResponseHTTP 2xx dalam 15 detik

Jika gagal, IsiKuota retry hingga 3 kali dengan jeda 10s, 30s, lalu 60s.

Best Practicesโ€‹

  1. Verifikasi signature sebelum apa pun.
  2. Balas HTTP 200 segera, proses di background/queue.
  3. Idempoten โ€” gunakan event_id atau ref_id untuk mendeteksi pengiriman ganda sebelum update database.
  4. Log setiap callback untuk audit & debugging.
  5. Test dulu dengan Webhook Tester di Dashboard.

Mulai Integrasiโ€‹

  1. Daftarkan URL webhook di Pengaturan โ†’ Webhook
  2. Implementasikan verifikasi signature
  3. Test dengan transaksi mode testing

โ†’ Dokumentasi lengkap: Webhook Overview ยท Setup Webhook ยท Daftar Events.


Butuh bantuan? Lihat FAQ Developer & API atau hubungi [email protected].