dokumentasi api

 

SimolawP API Documentation

Dokumentasi resmi REST API SimolawP untuk integrasi PPOB pada Website menggunakan JSON, Laravel maupun PHP Native.

Non Transaksi API digunakan untuk mengambil data dari server dan tidak melakukan pemotongan saldo.
Transaksi API digunakan untuk mengambil data dari server dan membutuhkan saldo.

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

💰 Saldo 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);
📦 Daftar Produk
+

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);
🏦 Request Deposit
+

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.
🏛 Bank List
+

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

Endpoint pada bagian ini digunakan untuk melakukan transaksi PPOB. Saldo API akan dipotong sesuai nominal transaksi apabila transaksi diproses.
🔍 Inquiry Tagihan
+

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);
⚡ Inquiry Token PLN
+

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);
💳 Payment Tagihan
+

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);
⚡ Payment Token PLN
+

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);
📱 Pulsa & Paket Data
+
Pulsa dan Paket Data tidak memerlukan proses Inquiry. Transaksi dilakukan langsung melalui endpoint Payment.

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);
📊 Status Transaksi
+

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

Server SimolawP akan mengirimkan Callback secara otomatis ke URL Website yang telah didaftarkan apabila status transaksi berubah.
🔔 Callback Notification
+

Method

POST

Content Type



Content-Type: application/json

Authentication

Callback tidak menggunakan API Key maupun Secret Key. Keaslian Callback diverifikasi menggunakan Signature HMAC SHA256 dengan WP_CALLBACK_SECRET.

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

Seluruh endpoint API menggunakan format response JSON yang konsisten. Apabila terjadi kesalahan, server akan mengembalikan HTTP Status beserta pesan error.
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

🔄 Alur Integrasi PPOB
+

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

✅ Rekomendasi Integrasi
+
  • 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

🔒 Keamanan API
+
  • 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

Apabila mengalami kendala integrasi API, silakan menghubungi tim SimolawP.
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 Laravel

SimolawP API Documentation
Version 1.0
© 2026 SimolawP. All Rights Reserved.