Skip to main content

Cek Status Transaksi

Endpoint untuk mengecek status transaksi yang telah dilakukan menggunakan ref_id.

Endpoint: POST /v1/status

tip

Lebih baik gunakan Webhook untuk notifikasi otomatis daripada polling endpoint ini. Jika harus polling, jangan lebih sering dari setiap 10 detik.

Parameter Request​

ParameterTipeWajibKeterangan
api_idstring✅API ID
timestampinteger✅Unix timestamp
signaturestring✅HMAC-SHA256 — lihat cara membuat signature
ref_idstring✅ID referensi transaksi yang ingin dicek

Contoh Request​

<?php
header('Content-Type: application/json');

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

// Business params
$businessParams = ['ref_id' => 'TRX12345asdxxx'];

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

$canonicalBody = json_encode($businessParams, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
$bodyHash = hash('sha256', $canonicalBody);
$stringToSign = implode('|', [$api_id, $api_key, $timestamp, $bodyHash]);
$signature = hash_hmac('sha256', $stringToSign, $secret_key);

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

$ch = curl_init('https://api.isikuota.com/v1/status');
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);
// print_r($response);
echo json_encode($response, JSON_PRETTY_PRINT);

Contoh Response​

code selalu ORDER_SUCCESS selama transaksi ditemukan

Endpoint ini mengembalikan code: ORDER_SUCCESS untuk setiap transaksi yang ditemukan, apapun status transaksinya. Baca data.status untuk mengetahui hasil transaksi sebenarnya (success / pending / failed). code: ORDER_NOT_FOUND (success: false) hanya muncul jika ref_id tidak ditemukan.

{
"success": true,
"code": "ORDER_SUCCESS",
"message": "Status transaksi berhasil didapatkan",
"data": {
"ref_id": "ORDER-2025-001",
"code": "TSEL10",
"name": "Telkomsel 10.000",
"customer_no": "081234567890",
"price": 10955,
"status": "success",
"created_at": "2024-01-15 14:30:00",
"sn": "1234-5678-9012-3456"
},
"errors": null,
"meta": null
}

Field Response​

FieldTipeKeterangan
ref_idstringID referensi transaksi
codestringKode produk
namestringNama produk
customer_nostringNomor tujuan transaksi
snstring/nullSerial Number / kode voucher (hanya tersedia jika status: success)
priceintegerHarga yang dibayarkan (Rp)
statusstringStatus transaksi
created_atstringWaktu transaksi dibuat
customer_namestringHanya muncul untuk transaksi pascabayar — nama pelanggan sesuai tagihan
adminintegerHanya muncul untuk transaksi pascabayar — biaya admin (Rp)

Status Transaksi​

StatusKeteranganTindakan
pendingSedang diprosesTunggu callback atau cek ulang dalam beberapa saat
successBerhasil — sn tersediaUpdate status di sistem Anda
failedGagal — saldo dikembalikanNotifikasi user, tawarkan coba lagi
Jangan langsung retry

Jika sebuah request timeout, cek status dulu via endpoint ini menggunakan ref_id sebelum membuat transaksi baru. Transaksi mungkin sudah berhasil meski response tidak diterima.

Cek Status via Request Ulang (Topup Ulang)​

Selain lewat endpoint /v1/status, status transaksi prabayar/game juga bisa dicek dengan mengirim ulang request POST /v1/transaction menggunakan ref_id yang sama dengan transaksi sebelumnya.

Sistem akan mengenali ref_id tersebut dan mengembalikan detail transaksi yang sudah tercatat. Saldo tidak dipotong lagi dan transaksi tidak dikirim ulang ke provider, jadi aman dilakukan berkali-kali.

Syaratnya, parameter berikut harus sama persis dengan request awal:

  • ref_id
  • customer_no
  • product_code

Jika ref_id sudah dipakai oleh request yang berbeda (misalnya customer_no atau product_code berbeda), sistem menolak dengan HTTP 409 (Reference ID sudah digunakan).

Pascabayar tidak berlaku

Untuk transaksi pascabayar (cmd: pay), request ulang dengan ref_id yang sama tidak mengembalikan status. Sesi inquiry hanya berlaku sekali pakai dan dihapus setelah pembayaran diproses, sehingga request ulang akan ditolak dengan pesan sesi inquiry telah kedaluwarsa. Gunakan endpoint /v1/status untuk mengecek status transaksi pascabayar.

Request ulang tetap melewati validasi

Request ulang diproses seperti request biasa, jadi validasi umum tetap berjalan lebih dulu: cut-off, maintenance, produk, PIN, dan saldo. Jika saldo Anda sudah tidak mencukupi untuk harga produk tersebut, Anda akan menerima error saldo tidak cukup meski transaksi sebelumnya sudah ada. Untuk pengecekan yang paling andal, tetap gunakan endpoint /v1/status.