Dokumentasi API
Panduan integrasi pembayaran AraaXZ untuk website, aplikasi, dan bot Node.js.
Base URL: https://pg.ciparage.web.id/v1
Autentikasi: Authorization: Bearer YOUR_API_KEY
Simpan API key di backend atau environment variable bot. Jangan menaruh key di frontend, repository publik, atau membagikannya kepada pengguna.
1. Membuat pembayaran QRIS
/create-qris.phpHeader: Content-Type: application/json dan Authorization: Bearer YOUR_API_KEY.
Request body
{
"MERCHANT_ID": "merchant-anda",
"JUMLAH": 10000,
"REFERENSI": "INV-2026-0001",
"KADALUARSA": 15
}MERCHANT_ID dipertahankan untuk kompatibilitas API lama. JUMLAH adalah nominal dasar dalam rupiah, REFERENSI adalah referensi unik dari sistem pemanggil, dan KADALUARSA adalah menit masa berlaku (1–1440).
Respons sukses
{
"status": "200",
"message": "success",
"data": [{
"trx_id": "ARX0123456789ABCDEF",
"merchant_ref": "INV-2026-0001",
"qris_string": "000201...",
"qris_url": "",
"status": "pending",
"amount": 10000,
"fee": 300,
"total_amount": 10317,
"date": "2026-10-26",
"time": "10:00:00",
"expired": "2026-10-26 10:15:00",
"payment_no": "provider-transaction-reference"
}]
}Nilai di atas hanya contoh format, bukan transaksi nyata. Gunakan qris_string dari respons untuk menampilkan QR Code. qris_url dapat kosong jika penyedia tidak mengembalikan URL gambar.
2. Memeriksa status
/cekstatus.php?trx_id=ARX0123456789ABCDEFGunakan header autentikasi yang sama. Endpoint melakukan sinkronisasi status ke sumber pembayaran saat status lokal masih menunggu.
{
"status": "200",
"message": "success",
"data": [{
"trx_id": "ARX0123456789ABCDEF",
"status": "paid",
"total_amount": 10317,
"date": "2026-10-26",
"time": "10:00:00",
"expired_at": "2026-10-26 10:15:00",
"paid_at": "2026-10-26 10:04:21"
}]
}Status yang mungkin: pending, paid, canceled, expired. Jangan mengirim produk atau saldo sebelum status terkonfirmasi paid.
3. Membatalkan transaksi
/cancel.phpRequest body
{ "TRX_ID": "ARX0123456789ABCDEF" }Transaksi hanya dapat dibatalkan dari status lokal pending. Respons gagal dikembalikan jika transaksi tidak ditemukan atau sudah diproses.
4. Contoh integrasi bot Node.js
Contoh menggunakan Node.js 18+ (built-in fetch). Simpan API key di environment variable ARAA_API_KEY.
const API_BASE = 'https://pg.ciparage.web.id/api';
const API_KEY = process.env.ARAA_API_KEY;
async function api(path, options = {}) {
const response = await fetch(`${API_BASE}${path}`, {
...options,
headers: {
Authorization: `Bearer ${API_KEY}`,
'Content-Type': 'application/json',
...(options.headers || {})
}
});
const result = await response.json();
if (!response.ok || result.status !== '200') {
throw new Error(result.message || `HTTP ${response.status}`);
}
return result.data;
}
async function buatPembayaran({ merchantId, amount, reference }) {
const rows = await api('/create-qris.php', {
method: 'POST',
body: JSON.stringify({
MERCHANT_ID: merchantId,
JUMLAH: amount,
REFERENSI: reference,
KADALUARSA: 15
})
});
const trx = rows[0];
return {
id: trx.trx_id,
total: trx.total_amount,
qrString: trx.qris_string,
expired: trx.expired,
status: trx.status
};
}
async function cekPembayaran(trxId) {
const rows = await api(`/cekstatus.php?trx_id=${encodeURIComponent(trxId)}`);
return rows[0];
}
// Contoh pemakaian di handler bot:
// const payment = await buatPembayaran({
// merchantId: 'merchant-anda', amount: 10000,
// reference: `ORDER-${Date.now()}`
// });
// Kirim payment.qrString sebagai QRIS yang dirender bot.
// Periksa status dengan cekPembayaran(payment.id).
// Berikan produk hanya ketika hasil.status === 'paid'.Jangan tandai pembayaran lunas berdasarkan gambar QR, pesan pengguna, atau screenshot. Status harus berasal dari endpoint status terautentikasi.
5. Format error
Parameter hilang atau JSON tidak valid.
API key tidak valid atau tidak dikirim.
Transaksi tidak ditemukan untuk akun tersebut.
Layanan pembayaran gagal atau respons tidak valid.
6. Praktik keamanan dan operasional
- Gunakan HTTPS dan simpan API key di server.
- Jangan pernah menaruh kredensial pembayaran pada kode bot yang dibagikan atau frontend.
- Gunakan referensi unik untuk setiap pesanan dan simpan
trx_idyang dikembalikan. - Jadikan pembaruan status idempoten agar callback atau pemeriksaan berulang tidak menggandakan pemenuhan pesanan.
- Uji transaksi bernominal kecil dan pastikan listener pembayaran aktif sebelum digunakan untuk produksi.
- Jika status belum dapat dipastikan karena koneksi gagal, pertahankan status terakhir; jangan menganggapnya lunas.