Daftar Events Webhook
IsiKuota mengirim 4 tipe event melalui webhook setiap kali status transaksi berubah.
Ringkasan Events
| Event | Kapan Dikirim |
|---|---|
order.created | Transaksi baru berhasil dibuat |
order.success | Transaksi selesai berhasil |
order.failed | Transaksi gagal |
order.sn_received | Serial number diterima dari provider |
order.created
Dikirim saat transaksi baru berhasil dibuat di sistem IsiKuota.
{
"event": "order.created",
"timestamp": "2025-01-15T14:29:55+07:00",
"data": {
"order_id": 12345,
"ref_id": "ORDER-2025-001",
"status": "Pending",
"product_code": "TSEL10",
"product_name": "Telkomsel 10.000",
"customer_number": "081234567890",
"price": 11500,
"sn": "",
"message": "Transaksi sedang diproses",
"created_at": "2025-01-15T14:29:55+07:00",
"updated_at": "2025-01-15T14:29:55+07:00"
}
}
order.success
Dikirim saat transaksi berhasil diproses oleh provider.
{
"event": "order.success",
"timestamp": "2025-01-15T14:30:00+07:00",
"data": {
"order_id": 12345,
"ref_id": "ORDER-2025-001",
"status": "Success",
"product_code": "TSEL10",
"product_name": "Telkomsel 10.000",
"customer_number": "081234567890",
"price": 11500,
"sn": "1234567890123456",
"message": "Transaksi berhasil",
"created_at": "2025-01-15T14:29:55+07:00",
"updated_at": "2025-01-15T14:30:00+07:00"
}
}
tip
Pada event ini, field sn sudah terisi dengan serial number produk. Simpan dan tampilkan ke user.
order.failed
Dikirim saat transaksi gagal. Saldo dikembalikan otomatis.
{
"event": "order.failed",
"timestamp": "2025-01-15T14:31:00+07:00",
"data": {
"order_id": 12346,
"ref_id": "ORDER-2025-002",
"status": "Failed",
"product_code": "TSEL10",
"product_name": "Telkomsel 10.000",
"customer_number": "081234567890",
"price": 11500,
"sn": "",
"message": "Transaksi gagal - nomor tidak aktif",
"created_at": "2025-01-15T14:30:50+07:00",
"updated_at": "2025-01-15T14:31:00+07:00"
}
}
info
Field message berisi alasan kegagalan dari provider. Tampilkan ke user atau log untuk investigasi.
order.sn_received
Dikirim saat serial number diterima dari provider (biasanya bersamaan dengan order.success, tapi bisa terpisah pada produk tertentu).
{
"event": "order.sn_received",
"timestamp": "2025-01-15T14:30:05+07:00",
"data": {
"order_id": 12345,
"ref_id": "ORDER-2025-001",
"status": "Success",
"product_code": "TSEL10",
"product_name": "Telkomsel 10.000",
"customer_number": "081234567890",
"price": 11500,
"sn": "1234567890123456",
"message": "Serial number diterima",
"created_at": "2025-01-15T14:29:55+07:00",
"updated_at": "2025-01-15T14:30:05+07:00"
}
}
Field Data Payload
| Field | Tipe | Keterangan |
|---|---|---|
event | string | Tipe event |
timestamp | string | Waktu event (ISO 8601, +07:00) |
data.order_id | integer | ID transaksi internal IsiKuota |
data.ref_id | string | ID referensi dari sistem Anda |
data.status | string | Pending / Success / Failed |
data.product_code | string | Kode produk |
data.product_name | string | Nama produk |
data.customer_number | string | Nomor tujuan transaksi |
data.price | integer | Harga transaksi (Rp) |
data.sn | string | Serial number (kosong jika belum ada) |
data.message | string | Pesan status dari provider |
data.created_at | string | Waktu transaksi dibuat |
data.updated_at | string | Waktu update terakhir |
Contoh Handler Berdasarkan Event
<?php
$payload = json_decode(file_get_contents('php://input'), true);
switch ($payload['event']) {
case 'order.success':
$refId = $payload['data']['ref_id'];
$sn = $payload['data']['sn'];
// Update status order di DB, kirim SN ke user
updateOrder($refId, 'success', $sn);
notifyUser($refId, $sn);
break;
case 'order.failed':
$refId = $payload['data']['ref_id'];
$message = $payload['data']['message'];
// Update status, notifikasi user gagal
updateOrder($refId, 'failed');
notifyUserFailed($refId, $message);
break;
case 'order.sn_received':
$refId = $payload['data']['ref_id'];
$sn = $payload['data']['sn'];
// Simpan SN jika belum tersimpan
saveSN($refId, $sn);
break;
}
http_response_code(200);
echo json_encode(['status' => 'ok']);