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
email 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_id benar-benar unique untuk setiap transaksi baru
  • Simpan client_trx_id dan kokinpay_trx_id untuk 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