Skip to main content

Autentikasi & Signature

Setiap request ke API IsiKuota harus menyertakan 3 parameter ini di dalam body:

ParameterKeterangan
api_idID unik akun API Anda
timestampWaktu sekarang dalam format Unix (detik)
signatureKode validasi yang dibuat dari kombinasi API key Anda

Cara Mendapatkan API Key

  1. Login ke Dashboard IsiKuota
  2. Buka Pengaturan → API
  3. Salin api_id, api_key, dan secret_key
danger

Jangan pernah membagikan api_key dan secret_key kepada siapapun. Simpan di environment variable, bukan di kode.


Cara Membuat Signature

Signature berfungsi seperti tanda tangan digital — membuktikan bahwa request benar-benar dikirim oleh Anda dan isinya tidak diubah di perjalanan.

Ringkasan Alur

1. Ambil parameter request (selain api_id, timestamp, signature)
2. Urutkan nama parameternya dari A ke Z
3. Jadikan JSON string
4. Hitung SHA-256 dari JSON tersebut → body_hash
5. Gabungkan: api_id|api_key|timestamp|body_hash
6. Hitung HMAC-SHA256 dari gabungan tadi → signature

Penjelasan Per Langkah

Langkah 1 — Pisahkan parameter bisnis

Ambil semua parameter kecuali api_id, timestamp, dan signature.

Contoh: Anda ingin order pulsa dengan body:

{
"api_id": "abc123",
"timestamp": 1748678400,
"signature": "...",
"cmd": "prepaid",
"code": "TSEL21",
"customer_no": "08123456789"
}

Parameter bisnisnya adalah:

{
"cmd": "prepaid",
"code": "TSEL21",
"customer_no": "08123456789"
}

Langkah 2 — Urutkan dari A ke Z (ksort)

cmd, code, customer_no ✓ sudah urut
warning

Urutan ini harus sama antara aplikasi Anda dan server IsiKuota. Jika urutannya berbeda, signature akan salah.


Langkah 3 — Jadikan JSON string

{"cmd":"prepaid","code":"TSEL21","customer_no":"08123456789"}

Jika tidak ada parameter bisnis (seperti saat cek saldo), gunakan string kosong "".


Langkah 4 — Hitung body_hash

body_hash = SHA256( JSON string tadi )

Langkah 5 — Gabungkan dengan tanda |

stringToSign = api_id | api_key | timestamp | body_hash

Contoh:

abc123|key456|1748678400|e3b0c44298fc1c...

Langkah 6 — Hitung signature

signature = HMAC-SHA256( stringToSign, secret_key )

Contoh Kode Lengkap

<?php
$api_id = 'your_api_id';
$api_key = 'your_api_key';
$secret_key = 'your_secret_key';
$timestamp = time();

// Parameter bisnis (tanpa api_id, timestamp, signature)
$businessParams = [
'cmd' => 'prepaid',
'code' => 'TSEL21',
'customer_no' => '08123456789',
];

// Urutkan A ke Z
ksort($businessParams);

// Jadikan JSON (kosong jika tidak ada parameter bisnis)
$canonicalBody = empty($businessParams)
? ''
: json_encode($businessParams, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

// Hitung signature
$bodyHash = hash('sha256', $canonicalBody);
$stringToSign = implode('|', [$api_id, $api_key, $timestamp, $bodyHash]);
$signature = hash_hmac('sha256', $stringToSign, $secret_key);

// Kirim request
$payload = array_merge($businessParams, [
'api_id' => $api_id,
'timestamp' => $timestamp,
'signature' => $signature,
]);

$ch = curl_init('https://api.isikuota.com/v1/order');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payload),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);

Cek Saldo (Tanpa Parameter Bisnis)

Untuk endpoint yang tidak punya parameter tambahan, canonicalBody cukup diisi string kosong:

$bodyHash = hash('sha256', ''); // string kosong
$stringToSign = implode('|', [$api_id, $api_key, $timestamp, $bodyHash]);
$signature = hash_hmac('sha256', $stringToSign, $secret_key);

Signature Salah? Cek Ini

ErrorPenyebab Umum
INVALID_SIGNATUREParameter bisnis tidak diurutkan A–Z, atau secret_key salah
UNAUTHORIZEDapi_id tidak ditemukan
INVALID_API_KEYapi_key salah
TIMESTAMP_EXPIREDTimestamp sudah lewat 5 menit
Checklist debugging
  • Parameter bisnis sudah diurutkan A ke Z (ksort)
  • api_key yang dipakai di stringToSign, bukan api_id
  • timestamp dalam detik, bukan milidetik
  • JSON tidak ada spasi tambahan (JSON_UNESCAPED_SLASHES)