Request Transaksi
587.043 request sukses
Endpoint ini digunakan untuk melakukan request transaksi pembelian produk digital seperti pulsa, paket data, token listrik, dan produk lainnya.
Informasi Penting: Sistem kami hanya memproses request yang valid dan sesuai dengan spesifikasi yang ditentukan. Kami sangat menyarankan Anda untuk mempelajari dengan seksama cara melakukan request yang benar. Segala kendala yang timbul akibat implementasi yang tidak sesuai dokumentasi menjadi tanggung jawab developer.
Whitelist IP: Sistem menerapkan whitelist IP untuk keamanan transaksi. Pastikan IP statis Anda sudah terdaftar pada pengaturan koneksi akun. Request dari IP yang tidak terdaftar akan otomatis ditolak.
Endpoint
POST
/v1/transaction
https://api.kokinpay.com/v1/transaction
Request Parameters
Berikut adalah parameter yang diperlukan untuk melakukan request transaksi:
| Parameter | Type | Status | Deskripsi |
|---|---|---|---|
| api_key | string | Required | API Key yang digunakan untuk autentikasi request |
| product_code | string | Required | Kode produk yang akan dibeli. Lihat daftar produk untuk kode yang tersedia |
| target | string | Required | Tujuan transaksi (nomor HP, nomor meter, nomor pelanggan, dll). Jika pembelian produk game yang menggunakan server, silahkan gabungkan id dan servernya di parameter target. Misalnya id nya 12345 dan servernya 678 maka isi paremeter target dengan 12345678. |
| client_trx_id | string | Required | ID transaksi unik dari sistem Anda. Harus unique untuk setiap transaksi baru |
| string | Optional | Email untuk pengiriman invoice. Jika dikosongkan invoice akan dikirimkan ke email terdaftar pada akun Anda | |
| sign | string | Required | Signature untuk validasi request. Format: MD5(api_key + client_trx_id) |
Catatan Penting tentang client_trx_id: Jika Anda mengirim request dengan
client_trx_id yang sama dengan transaksi sebelumnya, sistem akan mengembalikan response dari transaksi yang sudah pernah dilakukan (tidak membuat transaksi baru).
Cara Membuat Signature
Signature dibuat dengan menggabungkan api_key dan client_trx_id kemudian di-hash menggunakan MD5.
Formula Signature
sign = MD5(api_key + client_trx_id)
Contoh Pembuatan Signature (PHP)
$api_key = "your-api-key-here"; $client_trx_id = "TRX20250129001"; $sign = md5($api_key . $client_trx_id); echo $sign; // hasil hash MD5
Contoh Pembuatan Signature (JavaScript/Node.js)
const crypto = require('crypto');
const api_key = "your-api-key-here";
const client_trx_id = "TRX20250129001";
const sign = crypto.createHash('md5')
.update(api_key + client_trx_id)
.digest('hex');
console.log(sign); // hasil hash MD5
Contoh Pembuatan Signature (Python)
import hashlib api_key = "your-api-key-here" client_trx_id = "TRX20250129001" sign = hashlib.md5((api_key + client_trx_id).encode()).hexdigest() print(sign) # hasil hash MD5
Request Example
Berikut contoh request body dalam format JSON:
Request Body
{
"api_key": "your-api-key-here",
"product_code": "TSEL10",
"target": "081234567890",
"client_trx_id": "TRX20250129001",
"sign": "a3d5f8e9c1b2d4e6f7a8b9c0d1e2f3a4"
}
cURL Example
curl -X POST https://api.kokinpay.com/v1/transaction \
-H "Content-Type: application/json" \
-d '{
"api_key": "your-api-key-here",
"product_code": "TSEL10",
"target": "081234567890",
"client_trx_id": "TRX20250129001",
"sign": "a3d5f8e9c1b2d4e6f7a8b9c0d1e2f3a4"
}'
Response
API akan mengembalikan response dalam format JSON dengan struktur sebagai berikut:
Response Sukses (200 OK)
{
"status": true,
"data": {
"client_trx_id": "TRX20250129001",
"kokinpay_trx_id": "KKP2025012900001",
"product_code": "TSEL10",
"product_name": "Telkomsel 10.000",
"price": 10500,
"target": "081234567890",
"sn": "1234567890123456",
"client_last_balance": 489500,
"status": "pending"
}
}
| Field | Type | Deskripsi |
|---|---|---|
| status | boolean | Status response. true jika berhasil, false jika gagal |
| client_trx_id | string | ID transaksi dari sistem client |
| kokinpay_trx_id | string | ID transaksi dari sistem KokinPay |
| product_code | string | Kode produk yang dibeli |
| product_name | string | Nama produk yang dibeli |
| price | integer | Harga produk dalam Rupiah (IDR) |
| target | string | Tujuan transaksi |
| sn | string | Serial Number / kode voucher (jika ada) |
| client_last_balance | integer | Saldo terakhir client setelah transaksi dalam Rupiah (IDR) |
| status | string | Status transaksi: pending, success, atau failed |
Response Error
Jika terjadi error, API akan mengembalikan response dengan format berikut:
Error - IP Tidak Terdaftar (403 Forbidden)
{
"status": false,
"message": "IP address tidak dikenali. Harap daftarkan IP Anda pada whitelist di pengaturan koneksi akun"
}
Error - Produk Masa Cut Off (400 Bad Request)
{
"status": false,
"message": "Produk sedang dalam masa cut off. Silakan coba beberapa saat lagi"
}
Error - Saldo Tidak Cukup (402 Payment Required)
{
"status": false,
"message": "Saldo tidak mencukupi untuk melakukan transaksi"
}
Error - Produk Tidak Tersedia (404 Not Found)
{
"status": false,
"message": "Produk tidak tersedia atau kode produk tidak valid"
}
Error - Multi Transaksi Tidak Diizinkan (409 Conflict)
{
"status": false,
"message": "Multi transaksi ke tujuan yang sama dalam satu hari tidak diperbolehkan untuk produk ini"
}
Error - Signature Tidak Valid (401 Unauthorized)
{
"status": false,
"message": "Invalid signature"
}
Error - Gagal Memproses Request (500 Internal Server Error)
{
"status": false,
"message": "Gagal memproses transaksi. Silakan hubungi support jika masalah berlanjut"
}
HTTP Status Code
| Status Code | Deskripsi |
|---|---|
| 200 | Request berhasil diproses |
| 400 | Parameter tidak lengkap atau produk dalam masa cut off |
| 401 | Signature tidak valid atau API Key tidak ditemukan |
| 402 | Saldo tidak mencukupi |
| 403 | IP address tidak terdaftar di whitelist |
| 404 | Produk tidak ditemukan atau tidak tersedia |
| 409 | Multi transaksi ke tujuan yang sama tidak diizinkan |
| 500 | Terjadi kesalahan pada server |
Contoh Implementasi
Contoh Implementasi PHP
<?php
$api_key = "your-api-key-here";
$product_code = "TSEL10";
$target = "081234567890";
$client_trx_id = "TRX" . date('YmdHis') . rand(1000, 9999);
// Generate signature
$sign = md5($api_key . $client_trx_id);
$data = [
'api_key' => $api_key,
'product_code' => $product_code,
'target' => $target,
'client_trx_id' => $client_trx_id,
'sign' => $sign
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.kokinpay.com/v1/transaction");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$result = json_decode($response, true);
if($result['status']) {
echo "Transaksi Berhasil\n";
echo "KokinPay TRX ID: " . $result['data']['kokinpay_trx_id'] . "\n";
echo "Produk: " . $result['data']['product_name'] . "\n";
echo "Target: " . $result['data']['target'] . "\n";
echo "Harga: Rp " . number_format($result['data']['price'], 0, ',', '.') . "\n";
echo "Sisa Saldo: Rp " . number_format($result['data']['client_last_balance'], 0, ',', '.') . "\n";
} else {
echo "Error: " . $result['message'];
}
?>
Contoh Implementasi JavaScript (Fetch API)
const crypto = require('crypto');
const api_key = "your-api-key-here";
const product_code = "TSEL10";
const target = "081234567890";
const client_trx_id = `TRX${Date.now()}${Math.floor(Math.random() * 10000)}`;
// Generate signature
const sign = crypto.createHash('md5')
.update(api_key + client_trx_id)
.digest('hex');
const data = {
api_key: api_key,
product_code: product_code,
target: target,
client_trx_id: client_trx_id,
sign: sign
};
fetch('https://api.kokinpay.com/v1/transaction', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
})
.then(response => response.json())
.then(result => {
if(result.status) {
console.log('Transaksi Berhasil');
console.log('KokinPay TRX ID:', result.data.kokinpay_trx_id);
console.log('Produk:', result.data.product_name);
console.log('Target:', result.data.target);
console.log('Harga: Rp', result.data.price.toLocaleString('id-ID'));
console.log('Sisa Saldo: Rp', result.data.client_last_balance.toLocaleString('id-ID'));
} else {
console.log('Error:', result.message);
}
})
.catch(error => console.error('Error:', error));
Best Practice:
- Pastikan
client_trx_idbenar-benar unique untuk setiap transaksi baru - Simpan
client_trx_iddankokinpay_trx_iduntuk tracking - Lakukan pengecekan saldo sebelum melakukan transaksi
- Handle semua kemungkinan error response dengan baik
- Implementasikan retry mechanism untuk status
pending - Pastikan IP statis sudah terdaftar di whitelist sebelum go-live