Dokumentasi Integrasi AriesPay
Panduan resmi integrasi pembayaran QRIS untuk merchant AriesPay. Dilengkapi spesifikasi endpoint, verifikasi webhook signature, dan Node.js SDK.
Gunakan HTTPS untuk seluruh panggilan server-to-server.
Header x-merchant-id & x-secret-key atau parameter signature MD5.
Mendukung channel pembayaran QRIS Realtime Nasional (BCA, BRI, Mandiri, BNI, GoPay, OVO, DANA, ShopeePay).
1. AriesPay Node.js SDK
Pustaka klien resmi AriesPay untuk aplikasi backend berbasis server-side JavaScript / Node.js.
// 1. Inisialisasi AriesPay SDK
const AriesPay = require('@ariespay/sdk');
const client = new AriesPay('AP_MERCHANT_ID', 'sk_live_SECRET_KEY');
// 2. Buat Transaksi QRIS
async function main() {
const invoice = await client.createOrder({
reff_id: 'ORDER-' + Date.now(),
amount: 50000,
customer_name: 'Budi Santoso',
customer_email: 'budi@example.com',
kode_channel: 'QRIS'
});
console.log('ID Transaksi AriesPay:', invoice.data.trx_id);
console.log('Raw String QRIS:', invoice.data.qr_string);
console.log('URL Checkout:', invoice.data.pay_url);
}
main();2. Daftar Endpoint REST API v1
Membuat tagihan transaksi pembayaran baru dengan kode QRIS instan.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
| merchant_id | String | Ya | ID Merchant AriesPay Anda (e.g. AP_M24001...) |
| reff_id | String | Ya | Nomor invoice atau ID order unik dari sistem Anda |
| amount | Integer | Ya | Nominal pembayaran dalam rupiah (minimal Rp 1.000) |
| kode_channel | String | Tidak | Default: 'QRIS' |
| signature | String | Ya* | md5(merchant_id:secret_key:reff_id) jika tanpa header secret |
Memeriksa status pembayaran transaksi berdasarkan trx_id atau ref_id.
Mengambil saldo tersedia, saldo tertahan, dan akumulasi penerimaan pembayaran.
Mengajukan penarikan dana (Payout) ke rekening bank terdaftar. Minimal Rp 25.000 dengan biaya transfer Rp 2.500 flat.
3. Notifikasi Webhook Callback
Saat pembayaran QRIS sukses, server AriesPay mengirimkan HTTP POST ke Webhook URL Anda. Server Anda wajib merespons dengan JSON: { "status": true }.
// Express.js Webhook Receiver Handler
const express = require('express');
const crypto = require('crypto');
const app = express();
app.use(express.json());
app.post('/webhook/ariespay', (req, res) => {
const { status, reference, reff_id, signature, data } = req.body;
const MY_MERCHANT_ID = 'AP_MERCHANT_ID';
const MY_SECRET_KEY = 'sk_live_SECRET_KEY';
// 1. Verifikasi Signature: md5(merchant_id:secret_key:reff_id)
const expectedSig = crypto
.createHash('md5')
.update(MY_MERCHANT_ID + ':' + MY_SECRET_KEY + ':' + reff_id)
.digest('hex');
if (signature.toLowerCase() !== expectedSig.toLowerCase()) {
console.error('Signature Webhook tidak valid!');
return res.status(400).json({ status: false, message: 'Invalid Signature' });
}
// 2. Proses Pembayaran Sukses
if (status === 'Success') {
console.log('Order ' + reff_id + ' lunas! Nominal bersih: Rp ' + data.total_diterima);
// TODO: Update status pesanan di database Anda menjadi Lunas / Paid
}
// 3. WAJIB Mengembalikan status true
return res.status(200).json({ status: true });
});
app.listen(3000, () => console.log('Webhook server running on port 3000'));