Dokumentasi API
Dokumentasi lengkap untuk integrasi API layanan Pulsa Plus
Getting Started
Base URL
https://api.pulsaplus.co.idJabber ID
info@pulsaplus.co.idOID Center
019008Whatsapp Center
085888444608📞 Hubungi Kami
Untuk informasi lebih lanjut tentang API, silakan hubungi tim kami di info@pulsaplus.co.id
API Endpoints
/trxMelakukan transaksi (Asynchronous)
Query Parameters:
product Kode produk (contoh: DN50)qty Quantity/jumlah (default: 1)dest Nomor tujuanrefID Reference ID unik dari AndamemberID Member ID Andasign (Opsional) Signature untuk keamananpin (Jika tidak pakai sign) PIN memberpassword (Jika tidak pakai sign) Password memberResponse Success:
status=1&message=Transaksi DN50.081234567890 Harga=50.090 akan diproses..
Response Callback (Success):
?t=190554&refid=44474&status=20&price=0&message=DN50.081234567890 SUKSES. SN/Ref: DNID AISXX/50000/2025101410121481030100166869912144199.. Saldo 14.324.472 - 50.090 = 14.274.382
Response Callback (Failed):
?t=190554&refid=44474&status=40&price=0&message=DC12.081234567890 GAGAL. . Saldo 1.244.692. @19.06.42
/balanceMengecek saldo dan informasi akun member
Query Parameters:
memberID Member ID Andasign Signature untuk keamananResponse Success:
Informasi Akun Anda Nama : John Doe ID Agen : AGT123456 Saldo : 14.324.472 Bonus : 250.000 Debet : 0
/ticketRequest tiket deposit dengan informasi rekening bank
Query Parameters:
memberID Member ID Andaamount Jumlah deposit yang diinginkansign Signature untuk keamananResponse Success:
Silahkan Transfer Sesuai Nominal Rp.1.002.154 BCA : 2453913333 PT.Pulsa Plus BNI : 2020211038 PT.Pulsa Plus BRI : 008401003726300 PT.Pulsa Plus MANDIRI : 1630004353028 PT.Pulsa Plus
Format Whatsapp
Tiket Deposit
TIKET.[nominal].[pin]Format untuk request tiket deposit
Cek Saldo
SALDOFormat untuk request cek saldo
Cek Harga
CH.[kodeproduk]Format untuk request cek harga
Ubah PIN
GP.[pinbaru].[pinlama]Format untuk request ubah PIN
Ubah Password
PASSIP*[oldpassword]*[newpassword]*[pin]Format untuk request ubah password
Ubah Alamat IP
IPADDRESS*[newip]*[pin]Format untuk request ubah alamat IP
Ubah URL Callback
REPORTURL*[newurl]*[pin]Format untuk request ubah URL callback
Generate Signature
Signature untuk Keamanan Transaksi
Signature digunakan untuk meningkatkan keamanan transaksi. Jika tidak menggunakan signature, gunakan parameter pin dan password.
PHP - Generate Signature untuk Transaksi:
<?php
// For transaction
$str = 'OtomaX|' . $memberId . '|' . $product . '|' . $dest . '|' . $refID . '|' . $pin . '|' . $password;
$sign = str_replace('/', '_', str_replace('+', '-' , rtrim(base64_encode(sha1($str, true)), '=')));
echo $sign;
// result $sign = 'vlrN9Yuu4xHAT8_bXIUHKw2NjHo'
?>Signature untuk Operasi Lainnya:
<?php // For deposit ticket // $str = 'OtomaX|ticket|' . $memberId . '|' . $pin . '|' . $password . '|' . $amount; // For check balance // $str = 'OtomaX|CheckBalance|' . $memberId . '|' . $pin . '|' . $password; ?>
Contoh Request
Transaksi dengan Signature (PHP)
<?php
$memberId = 'YOUR_MEMBER_ID';
$product = 'DN50';
$dest = '085934284792';
$refID = 'TRX' . time();
$pin = 'YOUR_PIN';
$password = 'YOUR_PASSWORD';
// Generate signature
$str = 'OtomaX|' . $memberId . '|' . $product . '|' . $dest . '|' . $refID . '|' . $pin . '|' . $password;
$sign = str_replace('/', '_', str_replace('+', '-' , rtrim(base64_encode(sha1($str, true)), '=')));
// Build URL
$url = "https://api.pulsaplus.co.id/trx?product=" . $product . "&qty=1&dest=" . $dest .
"&refID=" . $refID . "&memberID=" . $memberId . "&sign=" . $sign;
$response = file_get_contents($url);
echo $response;
?>Transaksi tanpa Signature (dengan PIN & Password)
<?php
$url = "https://api.pulsaplus.co.id/trx?product=DN50&qty=1&dest=085934284792" .
"&refID=TRX123456&memberID=YOUR_MEMBER_ID" .
"&pin=YOUR_PIN&password=YOUR_PASSWORD";
$response = file_get_contents($url);
echo $response;
?>JavaScript (Fetch API)
const params = new URLSearchParams({
product: 'DN50',
qty: '1',
dest: '085934284792',
refID: 'TRX' + Date.now(),
memberID: 'YOUR_MEMBER_ID',
pin: 'YOUR_PIN',
password: 'YOUR_PASSWORD'
});
fetch(`https://api.pulsaplus.co.id/trx?${params}`)
.then(response => response.text())
.then(data => console.log(data))
.catch(error => console.error(error));Cek Saldo (PHP)
<?php
$memberId = 'YOUR_MEMBER_ID';
$pin = 'YOUR_PIN';
$password = 'YOUR_PASSWORD';
// Generate signature untuk check balance
$str = 'OtomaX|CheckBalance|' . $memberId . '|' . $pin . '|' . $password;
$sign = str_replace('/', '_', str_replace('+', '-' , rtrim(base64_encode(sha1($str, true)), '=')));
$url = "https://api.pulsaplus.co.id/balance?memberID=" . $memberId . "&sign=" . $sign;
$response = file_get_contents($url);
echo $response;
/* Response:
Informasi Akun Anda
Nama : John Doe
ID Agen : AGT123456
Saldo : 14.324.472
Bonus : 250.000
Debet : 0
*/
?>Request Tiket Deposit (PHP)
<?php
$memberId = 'YOUR_MEMBER_ID';
$pin = 'YOUR_PIN';
$password = 'YOUR_PASSWORD';
$amount = '1000000'; // Jumlah deposit
// Generate signature untuk deposit ticket
$str = 'OtomaX|ticket|' . $memberId . '|' . $pin . '|' . $password . '|' . $amount;
$sign = str_replace('/', '_', str_replace('+', '-' , rtrim(base64_encode(sha1($str, true)), '=')));
$url = "https://api.pulsaplus.co.id/ticket?memberID=" . $memberId . "&amount=" . $amount . "&sign=" . $sign;
$response = file_get_contents($url);
echo $response;
/* Response:
Silahkan Transfer Sesuai Nominal Rp.1.002.154
BCA : 2453913333
PT.Pulsa Plus
BNI : 2020211038
PT.Pulsa Plus
BRI : 008401003726300
PT.Pulsa Plus
MANDIRI : 1630004353028
PT.Pulsa Plus
*/
?>Transaksi dengan cURL
# Transaksi tanpa signature (dengan pin & password) curl "https://api.pulsaplus.co.id/trx?product=DN50&qty=1&dest=081234567890&refID=TRX123456&memberID=YOUR_MEMBER_ID&pin=YOUR_PIN&password=YOUR_PASSWORD" # Cek Saldo curl "https://api.pulsaplus.co.id/balance?memberID=YOUR_MEMBER_ID&sign=YOUR_SIGNATURE" # Request Tiket Deposit curl "https://api.pulsaplus.co.id/ticket?memberID=YOUR_MEMBER_ID&amount=1000000&sign=YOUR_SIGNATURE"
cURL dengan HTTPS (Lengkap)
# Transaksi dengan parameter lengkap curl -X GET "https://api.pulsaplus.co.id/trx" \ -G \ --data-urlencode "product=DN50" \ --data-urlencode "qty=1" \ --data-urlencode "dest=081234567890" \ --data-urlencode "refID=TRX123456" \ --data-urlencode "memberID=YOUR_MEMBER_ID" \ --data-urlencode "pin=YOUR_PIN" \ --data-urlencode "password=YOUR_PASSWORD" # Response: # status=1&message=Transaksi DN50.081234567890 Harga=50.090 akan diproses..
Cara Menangkap Response
Gunakan regex pattern berikut untuk parsing response dari callback. Setiap response memiliki format yang berbeda, pastikan Anda menggunakan pattern yang sesuai.
Regex Pattern:
Transaksi (?<kodeproduk>\w+)\.(?<tujuan>\d+) Harga=(?<harga>[.,\d]+) akan diproseskodeproduktujuanharga
status=1&message=Transaksi DN50.081234567890 Harga=10.000 akan diproses..
Regex Pattern:
(?<kodeproduk>\w+)\.(?<tujuan>\d+) SUKSES\. SN/Ref: (?<sn>.+?)\. Saldo (?<saldolama>[.,\d]+) - (?<harga>[.,\d]+) = (?<saldo>[.,\d]+)\s+#(?<namaproduk>.+)kodeproduktujuansnsaldolamahargasaldonamaproduk
DN50.081234567890 SUKSES. SN/Ref: DNID AISXX/50000/2025101410121481030100166869912144199. Saldo 14.324.472 - 10.000 = 14.314.472 #Telkomsel
Regex Pattern:
Trx(?<kodeproduk>\w+)\.(?<tujuan>\d+) SUKSES\. SN/Ref: (?<sn>.+?)\. Saldo (?<saldolama>[.,\d]+)-(?<harga>[.,\d]+)=(?<saldo>[.,\d]+) @(?<now>.+)kodeproduktujuansnsaldolamahargasaldonow
TrxDN50.081234567890 SUKSES. SN/Ref: DNID AISXX/50000/202510. Saldo 14.324.472-10.000=14.314.472 @14.10.25
Regex Pattern:
(?<kodeproduk>\w+)\.(?<tujuan>\d+) GAGAL\. (?<keterangan>.+?)\. Saldo (?<saldo>[.,\d]+)\. @(?<systime>.+)kodeproduktujuanketerangansaldosystime
DN50.081234567890 GAGAL. Nomor tidak terdaftar. Saldo 1.244.692. @19.06.42
Regex Pattern:
(?<kodeproduk>\w+)\.(?<tujuan>\d+) pd (?<waktu>.+?) gagal, dibatalkan\. Saldo refund (?<harga>[.,\d]+)\. Sal (?<saldo>[.,\d]+)kodeproduktujuanwaktuhargasaldo
DN50.081234567890 pd 19.06.42 gagal, dibatalkan. Saldo refund 10.000. Sal 1.254.692
Regex Pattern:
R#(?<refid>\d+) (?<namaproduk>.+?) (?<kodeproduk>\w+)\.(?<tujuan>\d+) GAGAL karena timeout\. Saldo (?<saldo>[.,\d]+) @(?<systime>.+)refidnamaprodukkodeproduktujuansaldosystime
R#44474 Telkomsel DN50.081234567890 GAGAL karena timeout. Saldo 1.244.692 @19.06.42
Regex Pattern:
(?<namaproduk>.+?) (?<kodeproduk>\w+)\.(?<tujuan>\d+) GAGAL\. Nomor tidak dapat diproses, mohon coba lagi besok\. Saldo (?<saldo>[.,\d]+)namaprodukkodeproduktujuansaldo
Telkomsel DN50.081234567890 GAGAL. Nomor tidak dapat diproses, mohon coba lagi besok. Saldo 1.244.692
Regex Pattern:
(?<kodeproduk>\w+)\.(?<tujuan>\d+) GAGAL\. Saldo tidak cukup, Sisa Saldo Anda Rp\. (?<saldo>[.,\d]+),Silakan isi saldokodeproduktujuansaldo
DN50.081234567890 GAGAL. Saldo tidak cukup, Sisa Saldo Anda Rp. 1.244.692,Silakan isi saldo anda terlebih dahulu
Regex Pattern:
Trx (?<kodeproduk>\w+)\.(?<tujuan>\d+) sdh Terjadi Pada:(?<waktu>.+?), sts (?<status>\w+) SN: (?<sn>.+?)\. saldo=(?<saldo>[.,\d]+)kodeproduktujuanwaktustatussnsaldo
Trx DN50.081234567890 sdh Terjadi Pada:19.06.42, sts SUKSES SN: DNID123. saldo=1.244.692
Regex Pattern:
Transaksi\.(?<kodeproduk>\w+)\.(?<tujuan>\d+) masih dalam proseskodeproduktujuan
Transaksi.DN50.081234567890 masih dalam proses. Mohon ditunggu!!
Regex Pattern:
Yth (?<namareseller>.+?),Transaksi\.(?<kodeproduk>\w+)\.(?<tujuan>\d+) masih dalam prosesnamaresellerkodeproduktujuan
Yth John Doe,Transaksi.DN50.081234567890 masih dalam proses. Mohon ditunggu!!
Contoh Parsing Response dengan PHP:
<?php
$response = "DN50.081234567890 SUKSES. SN/Ref: DNID AISXX/50000/2025101410. Saldo 14.324.472 - 10.000 = 14.314.472 #Telkomsel";
// Check status transaksi
if (strpos($response, 'SUKSES') !== false) {
// Transaksi Non Fisik Sukses
$pattern = '/(?<kodeproduk>\w+)\.(?<tujuan>\d+) SUKSES\. SN\/Ref: (?<sn>.+?)\. Saldo (?<saldolama>[.,\d]+) - (?<harga>[.,\d]+) = (?<saldo>[.,\d]+)\s+#(?<namaproduk>.+)/';
if (preg_match($pattern, $response, $matches)) {
echo "Kode Produk: " . $matches['kodeproduk'] . "\n";
echo "Tujuan: " . $matches['tujuan'] . "\n";
echo "Serial Number: " . $matches['sn'] . "\n";
echo "Saldo Lama: " . $matches['saldolama'] . "\n";
echo "Harga: " . $matches['harga'] . "\n";
echo "Saldo: " . $matches['saldo'] . "\n";
echo "Nama Produk: " . $matches['namaproduk'] . "\n";
}
} elseif (strpos($response, 'GAGAL') !== false) {
// Transaksi Gagal
$pattern = '/(?<kodeproduk>\w+)\.(?<tujuan>\d+) GAGAL\. (?<keterangan>.+?)\. Saldo (?<saldo>[.,\d]+)\. @(?<systime>.+)/';
if (preg_match($pattern, $response, $matches)) {
echo "Kode Produk: " . $matches['kodeproduk'] . "\n";
echo "Tujuan: " . $matches['tujuan'] . "\n";
echo "Keterangan: " . $matches['keterangan'] . "\n";
echo "Saldo: " . $matches['saldo'] . "\n";
echo "System Time: " . $matches['systime'] . "\n";
}
} elseif (strpos($response, 'akan diproses') !== false) {
// Transaksi Masuk Antrian
$pattern = '/Transaksi (?<kodeproduk>\w+)\.(?<tujuan>\d+) Harga=(?<harga>[.,\d]+) akan diproses/';
if (preg_match($pattern, $response, $matches)) {
echo "Kode Produk: " . $matches['kodeproduk'] . "\n";
echo "Tujuan: " . $matches['tujuan'] . "\n";
echo "Harga: " . $matches['harga'] . "\n";
}
} elseif (strpos($response, 'timeout') !== false) {
// Transaksi Timeout
$pattern = '/R#(?<refid>\d+) (?<namaproduk>.+?) (?<kodeproduk>\w+)\.(?<tujuan>\d+) GAGAL karena timeout\. Saldo (?<saldo>[.,\d]+) @(?<systime>.+)/';
if (preg_match($pattern, $response, $matches)) {
echo "Ref ID: " . $matches['refid'] . "\n";
echo "Nama Produk: " . $matches['namaproduk'] . "\n";
echo "Kode Produk: " . $matches['kodeproduk'] . "\n";
echo "Tujuan: " . $matches['tujuan'] . "\n";
echo "Saldo: " . $matches['saldo'] . "\n";
}
}
?>⚠️Penting - Harap Dibaca:
- Response bersifat asynchronous - transaksi akan diproses dan hasilnya dikirim via callback
- Response callback akan dikirim ke URL yang Anda daftarkan ke Admin
- Gunakan
refIDyang unik untuk setiap transaksi - Pastikan Regex sudah anda test dengan response yang dikirim oleh API
- Status response: 1 = diproses, 20 = sukses, 40 = gagal
- Disarankan menggunakan signature untuk keamanan yang lebih baik