Integrasikan pembayaran QRIS, DANA, OVO, dan ShopeePay ke website atau aplikasi Anda. Semua request memakai POST (form-urlencoded atau JSON), dan setiap request wajib ditandatangani.
| Item | Nilai |
|---|---|
| Base URL | https://idragonpay.com/pay/api |
| Format Request | POST — application/x-www-form-urlencoded atau JSON |
| Format Response | application/json |
| Kredensial | merchant_id + secret_key (diberikan saat pendaftaran) |
Setiap request API harus menyertakan parameter sign yang dihitung dengan algoritma:
1. Ambil semua parameter (KECUALI "sign")
2. Urutkan key secara ascending (ksort)
3. Gabung: key=value&key=value&...
(abaikan parameter yang kosong/null)
4. Tambahkan: key=SECRET_KEY di akhir
5. sign = MD5(string) dalam HURUF BESAR
Contoh dengan secret key MySecret123:
params = {merchant_id: "MER01", merchant_no: "INV-001", amount: "50000", channel: "QRIS"}
urutan: amount=50000&channel=QRIS&merchant_id=MER01&merchant_no=INV-001
string: amount=50000&channel=QRIS&merchant_id=MER01&merchant_no=INV-001&key=MySecret123
sign : strtoupper(md5(string))
function sign(array $params, string $key): string {
ksort($params);
$str = '';
foreach ($params as $k => $v) {
if ($v === '' || $v === null) continue;
$str .= $k . '=' . $v . '&';
}
$str .= 'key=' . $key;
return strtoupper(md5($str));
}
/create.phpMembuat order deposit baru dan mengembalikan URL pembayaran (cashier) untuk pelanggan.
| Parameter | Wajib | Keterangan |
|---|---|---|
merchant_id | Ya | ID merchant Anda |
merchant_no | Ya | Nomor order unik dari sistem Anda (tidak boleh duplikat) |
amount | Ya | Jumlah dalam IDR, minimal 10.000 |
channel | Tidak | QRIS (default), DANA, OVO, SHOPEEPAY, LINKAJA |
phone | Tidak | Nomor HP pelanggan (opsional) |
name | Tidak | Nama pelanggan (opsional) |
email | Tidak | Email pelanggan (opsional) |
product_info | Tidak | Deskripsi produk |
sign | Ya | Signature (lihat bagian 2) |
Contoh request:
curl -X POST https://idragonpay.com/pay/api/create.php \
-d "merchant_id=MER01" \
-d "merchant_no=INV-20260811-001" \
-d "amount=50000" \
-d "channel=QRIS" \
-d "sign=ABC123..."
Contoh respons sukses:
{
"code": 0,
"msg": "success",
"data": {
"order_id": "R260811A1B2C3D4E5F6",
"merchant_no": "INV-20260811-001",
"amount": 50000,
"channel": "QRIS",
"qr_code": "",
"pay_url": "https://pre-g-idn-cashier.bestpay.uk/payment/idn/cashier/redirect?sn=...",
"status": "pending"
}
}
pay_url (halaman cashier) atau tampilkan qr_code untuk scan./query.php| Parameter | Wajib | Keterangan |
|---|---|---|
merchant_id | Ya | ID merchant |
order_id | * | Order ID dari sistem kami (atau pakai merchant_no) |
merchant_no | * | Nomor order Anda (atau pakai order_id) |
sign | Ya | Signature |
Respons: status = pending | paid | failed
/verify.phpSama seperti query, tapi hasilnya diverifikasi langsung ke upstream BestPay (sumber kebenaran). Berguna saat ada pelanggan mengklaim sudah bayar — sistem akan membuktikan status aslinya. Parameter sama dengan query.
/withdraw.php| Parameter | Wajib | Keterangan |
|---|---|---|
merchant_id | Ya | ID merchant |
amount | Ya | Jumlah ditarik (min 10.000) |
bank_name | Ya | Nama bank, contoh: BCA |
bank_account | Ya | Nomor rekening |
bank_holder | Ya | Atas nama rekening |
type | Tidak | bankcard (default) atau ewallet |
sign | Ya | Signature |
Biaya penarikan DANA flat Rp 3.000 per transaksi, bank/e-wallet lain Rp 5.000 + 0,3%, dipotong otomatis. Saldo dibekukan saat pengajuan dan dikembalikan penuh jika ditolak.
/balance.phpMengecek saldo merchant yang tersedia (belum termasuk penarikan yang diproses).
| Parameter | Wajib | Keterangan |
|---|---|---|
merchant_id | Ya | ID merchant Anda |
sign | Ya | Signature (lihat bagian 2) |
Contoh request:
curl -X POST https://idragonpay.com/pay/api/balance.php \
-d "merchant_id=MER01" \
-d "sign=ABC123..."
Contoh respons sukses:
{
"code": 0,
"msg": "sukses",
"merchant_id": "MER01",
"nama": "Nama Merchant",
"balance": "150000.00",
"balance_formatted": "Rp 150.000",
"today": {
"paid_amount": "50000.00",
"pending_amount": "0.00",
"paid_count": 2
}
}
balance = saldo tersedia (Rp). today = rekap transaksi hari ini (opsional, bisa diabaikan).Contoh kode PHP:
<?php
$merchant_id = 'Zonksyn99';
$secret_key = 'RAHASIA_ANDA';
// buat sign: urutkan parameter, gabung key=val&, tambah key=SECRET, md5 uppercase
$params = ['merchant_id' => $merchant_id];
ksort($params);
$str = '';
foreach ($params as $k => $v) { if ($v === '' || $v === null) continue; $str .= $k . '=' . $v . '&'; }
$str .= 'key=' . $secret_key;
$sign = strtoupper(md5($str));
$ch = curl_init('https://idragonpay.com/pay/api/balance.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['merchant_id' => $merchant_id, 'sign' => $sign]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($ch); curl_close($ch);
$data = json_decode($res, true);
if ($data['code'] === 0) {
echo 'Saldo Anda: ' . $data['balance_formatted'];
} else {
echo 'Error: ' . $data['msg'];
}
?>
/create_crypto.phpBuat tagihan yang dibayar dengan USDT (jaringan BEP20 / BNB Smart Chain atau TRC20 / Tron). Nominal tetap dalam IDR — pelanggan membayar USDT sejumlah ekuivalennya, saldo IDR Anda dikredit otomatis saat pembayaran terkonfirmasi.
/create_crypto.php langsung bisa dipakai (bisa dimatikan kapan saja).callback_url Anda sudah diisi agar notifikasi pembayaran terkirim. Auth & sign sama seperti endpoint lain. Fee ditanggung merchant (1,5%).| Parameter | Wajib | Keterangan |
|---|---|---|
merchant_id | Ya | ID merchant Anda |
merchant_no | Ya | Nomor order unik dari sistem Anda |
amount | Ya | Jumlah dalam IDR, minimal 10.000 |
network | Tidak | BEP20 (default) atau TRC20 |
phone / name / email / product_info | Tidak | Data pelanggan (opsional) |
sign | Ya | Signature (lihat bagian 2) |
Contoh request:
curl -X POST https://idragonpay.com/pay/api/create_crypto.php \
-d "merchant_id=MER01" \
-d "merchant_no=INV-20260811-050" \
-d "amount=50000" \
-d "network=BEP20" \
-d "sign=ABC123..."
Contoh respons sukses:
{
"code": 0,
"msg": "success",
"data": {
"crypto_no": "CX261007A9A140EEB0",
"merchant_no": "INV-20260811-050",
"amount_idr": 50000,
"charge_idr": 50000,
"pay_currency": "USDT",
"network": "BEP20",
"network_name": "Binance Smart Chain",
"pay_amount": 2.8514457,
"address": "0x1ac420D5...",
"qr_code": "https://...",
"rate_idr_usdt": 0.000056,
"expire_at": "2026-10-08 01:00:00",
"status": "new",
"checkout_url": "https://idragonpay.com/pay/crypto_pay.php?no=CX261007A9A140EEB0"
}
}
qr_code + address di halaman Anda, atau arahkan pelanggan ke checkout_url. Pelanggan mengirim USDT ke alamat tsb via jaringan network. Jangan kirim setelah expire_at.Fee: fee merchant 1,5% (ditanggung Anda) + margin kurs 2% (ditanggung pembeli). Contoh: tagihan Rp50.000 → pembeli bayar Rp51.000, fee Rp750, saldo Anda masuk Rp49.250.
Selain menarik saldo (WD), merchant bisa membelanjakan saldo langsung dari portal merchant → menu 💰 Saldo Belanja. Semua fitur di Fase ini via portal (belum ada endpoint API).
| Fitur | Keterangan |
|---|---|
| Belanja produk | Beli produk/layanan (mis. paket Credit Jamiahlabs) pakai saldo. Fee 0% (tanpa biaya QRIS). |
| Transfer saldo | Kirim saldo ke merchant iDragonPay lain via member_id tujuan. |
| QR Transfer | Merchant punya QR berisi link transfer (Member ID-nya). Pengirim scan → form transfer terisi otomatis (anti salah ketik). Bisa juga QR tagihan (nominal terisi). Link: index.php?page=wallet&to=MEMBERID&amt=NOMINAL |
| PIN transaksi | Set PIN 4–8 digit di portal. Setiap belanja/transfer wajib PIN. Salah 5× → terkunci 15 menit. |
| Mutasi | Riwayat semua pergerakan saldo dompet. |
Catatan: fitur ini closed-loop (hanya di dalam ekosistem iDragonPay). Belanja pakai saldo di QRIS merchant luar belum termasuk (butuh izin penerbit uang elektronik).
Setelah pelanggan membayar, kami mengirim notifikasi POST ke callback_url merchant Anda (didaftarkan saat pembuatan akun).
| Parameter | Keterangan |
|---|---|
orderId | Order ID sistem kami |
merchantNo | Nomor order Anda |
amount | Jumlah pembayaran (IDR) |
channel | Channel pembayaran (QRIS, DANA, dst. · CRYPTO untuk USDT) |
status | paid | failed |
tradeTime | Waktu transaksi |
sign | Signature — verifikasi dengan algoritma di bagian 2 (pakai secret key Anda) |
sign callback sebelum memproses — ini mencegah notifikasi palsu. Balas dengan teks OK atau SUCCESS. Jika callback gagal, kami retry otomatis hingga 5 kali.$raw = file_get_contents('php://input');
parse_str($raw, $p);
$sign = $p['sign'];
unset($p['sign']);
$calc = sign($p, $SECRET_KEY);
if (!hash_equals($calc, strtoupper($sign))) {
http_response_code(403); exit('bad sign');
}
// sign valid — proses order sesuai status
echo 'OK';
| Code | Keterangan |
|---|---|
0 | Sukses |
1411 | Fitur crypto belum diaktifkan untuk merchant |
1401 | merchant_id & sign wajib |
1402 | Parameter tidak valid / amount minimal 10.000 |
1403 | Signature tidak valid |
1404 | Merchant tidak ditemukan / nonaktif |
1406 | Order duplikat (merchant_no sudah dipakai) |
1407 | Order tidak ditemukan |
1429 | Terlalu banyak request (rate limit) |
1501 | Saldo tidak cukup (penarikan) |
Untuk keamanan ekstra, Anda bisa mendaftarkan whitelist IP ke admin. Setelah diaktifkan, hanya request dari IP terdaftar yang bisa memanggil API pay-in (create) dan payout (withdraw) — IP lain ditolak dengan kode 1410.
Format yang didukung (pisahkan dengan koma):
103.138.189.69103.138.0.0/16103.138.*Contoh: 103.138.189.69, 114.122.0.0/16, 202.62.*
Integrasi iDragonPay paling singkat: 4 langkah. Tidak perlu kartu kredit — daftar dapat langsung member_id + secret_key.
member_id dan secret_key.sandbox=1 di body. Sign tetap divalidasi, tapi tidak ada uang/order nyata; respons berisi "sandbox": true. Cocok untuk uji signature & parsing.sandbox dari body, lalu teruskan qr_code/pay_url ke pembeli.callback_url milikmu saat status berubah. Balas HTTP 200; jika tidak, kami kirim ulang otomatis.Tambah sandbox=1 (atau header X-Sandbox: 1) pada api/create.php / api/create_pg.php. Respons contoh:
{
"code": 0,
"msg": "success (SANDBOX — tidak ada order nyata)",
"sandbox": true,
"data": { "order_id": "SBX261012A1B2C3D4", "status": "pending", "pay_url": ".../docs.php#sandbox" }
}
>> Coba langsung tanpa kode: buka Playground Sandbox — pilih channel, isi nominal, klik Coba, dan lihat respons JSON aslinya (pakai kredensial demo).
# 1) Siapkan kunci
MERCHANT_ID="MCH-xxxx" # member_id kamu
SECRET="secret_key_kamu"
# 2) Susun sign: ksort param (tanpa sign) -> tambah key -> md5 -> UPPER
# Langkah ini biasanya dilakukan library kamu; lihat bagian "Skema Signature".
# 3) Uji SANDBOX (tidak ada uang nyata)
curl -s -X POST https://idragonpay.com/pay/api/create.php \
-d "merchant_id=$MERCHANT_ID" -d "merchant_no=TEST-001" \
-d "amount=10000" -d "channel=QRIS" -d "sandbox=1" -d "sign=$SIGN"
# 4) Kalau sukses -> hapus sandbox=1 -> order asli dibuat
Butuh bantuan integrasi? Hubungi kami via Telegram: @Jamiahfiver · Syarat & Ketentuan