SimolawP API Documentation
Dokumentasi resmi REST API SimolawP untuk integrasi PPOB pada Website menggunakan JSON, Laravel maupun PHP Native.
Authentication
Seluruh endpoint menggunakan HTTP Header berikut.
Content-Type: application/json
X-API-KEY: your_api_key
X-SECRET-KEY: your_secret_key
X-TIMESTAMP: contoh: Unix Timestamp (UTC), contoh: 1751710000
X-SIGNATURE: hash_hmac('sha256', API_KEY + TIMESTAMP + RAW_JSON_BODY, SECRET_KEY)
1. Non Transaksi API
Deskripsi
Melihat saldo API yang tersedia.
Endpoint
POST /ppob/saldo
Request JSON
{}
Response JSON
{
"success": true,
"balance":5000000
}
Laravel
$response=$client->balance()->get();
return response()->json($response);
PHP Native
$response=$client->balance()->get();
print_r($response);
Deskripsi
Mengambil daftar produk PPOB terbaru.
Endpoint
POST /products
Request JSON
{}
Response JSON
{
"success":true,
"data":[
{
"code":"PLN20",
"name":"Token PLN 20.000",
"price":20500,
}
]
}
Laravel
$response=$client->products()->get();
return response()->json($response);
PHP Native
$response=$client->products()->get();
print_r($response);
Deskripsi
Digunakan oleh pemilik API untuk mengajukan deposit saldo PPOB ke server SimolawP. Endpoint ini tidak melakukan transaksi PPOB dan hanya membuat permohonan penambahan saldo.
Endpoint
POST /ppob/saldo/request
Parameter Request
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
| amount | Integer | Ya | Nominal deposit |
| bank | String | Ya | Kode bank tujuan transfer |
Request JSON
{
"amount":100000,
"bank":"BCA"
}
Response JSON
{
"success":true,
"message":"Deposit request created.",
"amount":100000,
"bank":"BCA"
}
Laravel
$response = $client->deposit()->request([
'amount' => 100000,
'bank' => 'BCA'
]);
return response()->json($response);
PHP Native
$response = $client->deposit()->request([
'amount' => 100000,
'bank' => 'BCA'
]);
print_r($response);
Catatan
- Tidak mengurangi saldo API.
- Transfer dilakukan setelah request dibuat.
- Saldo akan masuk setelah diverifikasi administrator.
Deskripsi
Mengambil daftar rekening tujuan deposit yang tersedia.
Endpoint
GET /ppob/bank/list
Request JSON
{}
Response JSON
{
"success":true,
"data":[
{
"code":"BCA",
"name":"Bank Central Asia"
},
{
"code":"BRI",
"name":"Bank Rakyat Indonesia"
}
]
}
Laravel
$response = $client->bank()->list();
return response()->json($response);
PHP Native
$response = $client->bank()->list();
print_r($response);
2. Transaksi API
Deskripsi
Melakukan pengecekan tagihan pelanggan sebelum pembayaran.
Endpoint
POST /ppob/inquiry
Parameter Request
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
| produk | String | Ya | Kode Produk PPOB |
| idpel | String | Ya | ID Pelanggan |
Request JSON
{
"produk":"PLNPASCA",
"idpel":"1234567890"
}
Response JSON
{
"status":"success",
"nama":"BUDI",
"tagihan":152500,
"ref1":"TRX000001"
}
Laravel
$response = $client->inquiry()->send([
'produk' => 'PLNPASCA',
'idpel' => '1234567890'
]);
PHP Native
$response = $client->inquiry()->send([
'produk' => 'PLNPASCA',
'idpel' => '1234567890'
]);
print_r($response);
Deskripsi
Melakukan inquiry pembelian Token PLN Prabayar.
Endpoint
POST /ppob/inquiry
Request JSON
{
"produk":"PLNPRA",
"idpel":"1234567890",
"nominal":100000
}
Response JSON
{
"status":"success",
"nama":"BUDI",
"ref1":"TRX000002"
}
Laravel
$response = $client->inquiry()->send([
'produk' => 'PLNPRA',
'idpel' => '1234567890',
'nominal' => 100000
]);
PHP Native
$response = $client->inquiry()->send([
'produk' => 'PLNPRA',
'idpel' => '1234567890',
'nominal' => 100000
]);
print_r($response);
Deskripsi
Melakukan pembayaran tagihan setelah proses Inquiry berhasil dilakukan. Gunakan nilai ref1 yang diperoleh dari endpoint Inquiry.
Endpoint
POST /ppob/payment
Parameter Request
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
| produk | String | Ya | Kode Produk |
| idpel | String | Ya | ID Pelanggan |
| nominal | Integer | Ya | Total tagihan |
| ref1 | String | Ya | Reference hasil Inquiry |
| type | String | Ya | tagihan |
Request JSON
{
"produk":"PLNPASCA",
"idpel":"1234567890",
"nominal":152500,
"ref1":"TRX000001",
"type":"tagihan"
}
Response JSON
{
"status":"success",
"message":"Transaction Process"
}
Laravel
$response = $client->payment()->send([
'produk' => 'PLNPASCA',
'idpel' => '1234567890',
'nominal' => 152500,
'ref1' => 'TRX000001',
]);
return response()->json($response);
PHP Native
$response = $client->payment()->send([
'produk' => 'PLNPASCA',
'idpel' => '1234567890',
'nominal' => 152500,
'ref1' => 'TRX000001',
]);
print_r($response);
Deskripsi
Melakukan pembelian Token PLN Prabayar menggunakan hasil Inquiry.
Endpoint
POST /ppob/payment
Request JSON
{
"produk":"PLNPRA",
"idpel":"1234567890",
"nominal":100000,
"ref1":"TRX000002",
"type":"token"
}
Response JSON
{
"status":"success",
"message":"Transaction Process"
}
Laravel
$response = $client->payment()->send([
'produk' => 'PLNPRA',
'idpel' => '1234567890',
'nominal' => 100000,
'ref1' => 'TRX000002',
'type' => 'token'
]);
PHP Native
$response = $client->payment()->send([
'produk' => 'PLNPRA',
'idpel' => '1234567890',
'nominal' => 100000,
'ref1' => 'TRX000002',
'type' => 'token'
]);
print_r($response);
Endpoint
POST /ppob/payment
Request JSON
{
"produk":"TSEL10",
"idpel":"081234567890",
"ref1":"TRX000004",
"type":"pulsa"
}
Response JSON
{
"status":"success",
"message":"Transaction Process"
}
Laravel
$response = $client->payment()->send([
'produk' => 'TSEL10',
'idpel' => '081234567890',
'ref1' => 'TRX000004',
'type' => 'pulsa'
]);
PHP Native
$response = $client->payment()->send([
'produk' => 'TSEL10',
'idpel' => '081234567890',
'ref1' => 'TRX000004',
'type' => 'pulsa'
]);
print_r($response);
Deskripsi
Digunakan untuk mengetahui status terbaru transaksi berdasarkan nomor referensi (ref1).
Endpoint
GET /ppob/status
Parameter Request
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
| ref1 | String | Ya | Nomor referensi transaksi |
Request JSON
{
"ref1":"TRX000001"
}
Response JSON
{
"status":"SUCCESS",
"sn":"123456789",
"token":"1234-5678-9012-3456"
}
Keterangan Field
| Field | Keterangan |
|---|---|
| status | Status transaksi |
| sn | Serial Number (jika tersedia) |
| token | Token PLN (khusus token listrik) |
Laravel
$response = $client->status()->get([
'ref1' => 'TRX000001'
]);
return response()->json($response);
PHP Native
$response = $client->status()->get([
'ref1' => 'TRX000001'
]);
print_r($response);
3. Callback API
Method
POST
Content Type
Content-Type: application/json
Authentication
Callback Body
{
"ref1":"TRX000001",
"status":"SUCCESS",
"nominal":152500,
"note":{
"wp_user_id":1
},
"signature":"9c6a0d4d4f1bxxxxxxxxxxxxxxxxxxxxxxxx"
}
Keterangan Field
| Field | Tipe | Keterangan |
|---|---|---|
| ref1 | String | Nomor Referensi Transaksi |
| status | String | SUCCESS, PENDING, FAILED |
| nominal | Number | Total Nominal Transaksi |
| note.wp_user_id | Integer | ID User pada website |
| signature | String | Signature Callback |
Payload Signature
Signature dibuat menggunakan algoritma HMAC SHA256 dengan payload berikut.
{
"ref1":"TRX000001",
"status":"SUCCESS",
"nominal":152500
}
Laravel Validation
$payload = [
'ref1' => $request->ref1,
'status' => $request->status,
'nominal' => $request->nominal,
];
$signature = hash_hmac(
'sha256',
json_encode($payload),
env('WP_CALLBACK_SECRET')
);
if($signature !== $request->signature){
return response()->json([
'status'=>'error',
'message'=>'Invalid Signature'
],403);
}
Response Website
Website wajib mengembalikan HTTP Status 200 OK apabila Callback berhasil diproses.
{
"success":true
}
Status Callback
| Status | Keterangan |
|---|---|
| SUCCESS | Transaksi Berhasil |
| PENDING | Transaksi Sedang Diproses |
| FAILED | Transaksi Gagal |
Catatan
- Callback dikirim otomatis ketika status transaksi berubah.
- Callback tidak menggunakan API Key maupun Secret Key.
- Pastikan URL Callback dapat diakses melalui HTTPS.
- Selalu lakukan validasi Signature sebelum memproses transaksi.
- Simpan ref1 sebagai referensi utama transaksi.
- Apabila Website tidak merespon HTTP 200, server dapat mengirim ulang Callback sesuai kebijakan retry.
4. Error Code
| HTTP Code | Status | Keterangan |
|---|---|---|
| 200 | SUCCESS | Request berhasil diproses. |
| 400 | BAD REQUEST | Format request tidak valid. |
| 401 | UNAUTHORIZED | API Key atau Secret Key salah. |
| 403 | FORBIDDEN | Signature tidak valid. |
| 404 | NOT FOUND | Endpoint atau produk tidak ditemukan. |
| 422 | VALIDATION ERROR | Parameter request belum lengkap. |
| 429 | TOO MANY REQUESTS | Terlalu banyak request dalam waktu singkat. |
| 500 | SERVER ERROR | Terjadi kesalahan pada server. |
| 503 | SERVICE UNAVAILABLE | Layanan sedang dalam pemeliharaan. |
Contoh Error Response
{
"success":false,
"message":"Invalid API Key"
}
5. Flow Integrasi API
Tagihan (PLN Pascabayar, PDAM, BPJS, dll)
1. Login Website
│
▼
2. Inquiry
│
▼
3. Mendapat ref1
│
▼
4. Payment
│
▼
5. Status
│
▼
6. Callback
│
▼
7. Transaksi Selesai
Token PLN
Inquiry
│
▼
Payment
│
▼
Status
│
▼
Callback
Pulsa & Paket Data
Payment
│
▼
Status
│
▼
Callback
6. Best Practice
- Simpan API Key dan Secret Key pada file environment (.env).
- Gunakan HTTPS pada seluruh endpoint.
- Selalu lakukan Inquiry sebelum Payment untuk produk tagihan.
- Gunakan nilai ref1 sebagai referensi utama transaksi.
- Jangan mengirim Payment dua kali dengan ref1 yang sama.
- Gunakan Callback sebagai sumber status transaksi yang paling valid.
- Lakukan validasi Signature pada Callback sebelum memproses data.
- Simpan seluruh request dan response sebagai log transaksi.
- Gunakan endpoint Status apabila Callback belum diterima.
- Batasi request menggunakan Rate Limiter.
7. Security
- Jangan membagikan API Key kepada pihak lain.
- Secret Key hanya boleh digunakan pada sisi server.
- Seluruh request harus menggunakan Signature HMAC SHA256.
- Gunakan Timestamp untuk mencegah Replay Attack.
- Batasi IP Address apabila memungkinkan.
- Gunakan HTTPS/TLS.
- Verifikasi seluruh Callback menggunakan Signature.
8. Support
| Layanan | Keterangan |
|---|---|
| Pendaftaran API | 08563363188 |
| API Server | https://api.simolawp.com/api |
🚀 Tidak Mau Repot? Gunakan Plugin Saja atau Laravel!
Tidak perlu koding sendiri. Cukup install plugin, masukkan API Key dan Secret Key, kemudian PPOB siap digunakan.
Download Plugin PPOB Dokumentasi LaravelVersion 1.0
© 2026 SimolawP. All Rights Reserved.


