Skip to main content

Setup & Konfigurasi Webhook

1. Daftarkan URL Webhook​

  1. Login ke Dashboard IsiKuota
  2. Buka Pengaturan → API → Webhook
  3. Masukkan URL endpoint server Anda (harus HTTPS di production)
  4. Klik Simpan

Contoh URL webhook:

https://yourdomain.com/webhook/isikuota
warning

URL webhook harus dapat diakses publik dari internet. Tidak bisa menggunakan localhost atau IP private di production.


2. Implementasi Handler Webhook​

Satu URL, dua jenis event

Contoh di bawah menangani payload berdasarkan data.status untuk event transaction.updated. URL webhook yang sama juga menerima event deposit.updated (field event berbeda, struktur data juga berbeda — termasuk status tambahan expired/cancelled yang tidak dipakai transaksi). Cek payload.event lebih dulu sebelum switch berdasarkan status. Detail lengkap & contoh payload tiap event ada di Events.

<?php
// webhook.php

$secret = $_ENV['ISIKUOTA_SECRET_KEY'];
$rawBody = file_get_contents('php://input');
$sigHeader = $_SERVER['HTTP_X_ISIKUOTA_SIGNATURE'] ?? '';

// Verifikasi signature (nilai header berformat "sha256=<hex>")
$expected = 'sha256=' . hash_hmac('sha256', $rawBody, $secret);
if (!hash_equals($expected, $sigHeader)) {
http_response_code(401);
exit(json_encode(['error' => 'Invalid signature']));
}

$payload = json_decode($rawBody, true);
$data = $payload['data'];
$refId = $data['ref_id'];

// Cek idempoten — jangan proses ulang yang sudah diproses
if (alreadyProcessed($payload['event_id'])) {
http_response_code(200);
exit(json_encode(['status' => 'already_processed']));
}

// Proses berdasarkan status
switch ($data['status']) {
case 'success':
updateOrderStatus($refId, 'success', $data['sn']);
sendNotificationToUser($refId);
break;

case 'failed':
updateOrderStatus($refId, 'failed');
sendFailureNotification($refId, $data['message']);
break;

case 'pending':
updateOrderStatus($refId, 'pending');
break;
}

// Selalu balas 200 dengan cepat
http_response_code(200);
echo json_encode(['status' => 'ok']);

3. Test Webhook​

Gunakan fitur Webhook Tester di Dashboard untuk mengirim dummy payload ke URL webhook Anda:

  1. Login ke Dashboard, buka halaman API Documentation
  2. Pilih tab Webhook Tester
  3. Isi data dummy (ref_id, status, produk, dll)
  4. Klik Test Webhook dan periksa log server Anda

Payload & signature yang dikirim Webhook Tester identik dengan production, sehingga aman untuk menguji handler Anda.


Checklist Setup Webhook​

  • URL webhook terdaftar di Dashboard
  • Server dapat diakses via HTTPS
  • Verifikasi X-Isikuota-Signature diimplementasikan (dengan prefix sha256=)
  • Menggunakan timing-safe comparison (hash_equals / timingSafeEqual)
  • Server membalas HTTP 2xx dalam 15 detik
  • Proses berat dikerjakan di background/queue
  • Implementasi idempoten (cek event_id sebelum proses)
  • Cek field event untuk membedakan transaction.updated vs deposit.updated sebelum memproses data
  • Log setiap callback tersimpan

→ Lihat daftar Events →