Panduan: Membuat Transaksi
Diperbarui 15 Okt 2026
API ini aktif untuk gateway.astrapay.biz.id (Base URL: https://gateway.astrapay.biz.id). Auth memakai header x-api-key: pk_live_xxx per project. Rate limit 100/menit per API Key.
Persyaratan
Untuk membuat transaksi, Anda harus memiliki akun dan Proyek di AstraPay Gateway. Dari proyek tersebut, Anda mengambil slug, api_key, dan webhook_secret-nya.
Jika belum memiliki, silakan daftar, login, lalu buat project di dashboard → Project. API key hanya tampil sekali saat dibuat. Project nonaktif / key salah → 401. Key sandbox pk_test_* ditolak di live → 403.
Cara Kerja Pembayaran (Untuk Pemula)
AstraPay Gateway memudahkan Anda menerima pembayaran QRIS tanpa verifikasi manual slip transfer:
- Membuat Order: Toko Anda membuat tagihan melalui API atau tombol Buat Transaksi di dashboard.
- Mendapatkan QRIS & Kode Unik: Sistem menerbitkan QRIS dengan nominal yang ditambahkan kode unik kecil (contoh: tagihan Rp 50.000 menjadi Rp 50.123). Kode unik ini yang menjadi penanda otomatis transaksi Anda.
- Customer Membayar: Customer memindai QRIS memakai aplikasi apa saja (BCA, Mandiri, BRI, BNI, GoPay, OVO, Dana, ShopeePay, dll) dan membayar nominal tepat sampai 3 digit terakhir.
- Otomatis Lunas: Sistem membaca mutasi masuk secara instan (1–3 detik). Transaksi otomatis berubah status menjadi
paid, saldo toko Anda langsung bertambah, dan webhook otomatis diteruskan ke server toko Anda.
Pengaturan Biaya (Fee Payer)
Biaya QRIS adalah 0.7%. Di detail proyek, Anda bebas memilih siapa yang menanggung biaya:
- Buyer (Customer menanggung): Customer membayar nominal produk + biaya layanan (contoh: barang 50.000 → bayar 50.350 + unik). Toko Anda menerima saldo bersih utuh Rp 50.000.
- Seller (Toko menanggung): Customer membayar nominal asli produk. Biaya 0.7% dipotong dari saldo yang masuk ke toko Anda.
API
API ini memakai 1 QRIS pusat di gateway.astrapay.biz.id. Selalu kirim reference unik (misal INV-001) agar rekonsiliasi pesanan Anda mudah dilacak.
Rate Limit
- 100 request per menit per API key (melebihi limit → HTTP
429).
Endpoint
POST https://gateway.astrapay.biz.id/api/orders/{slug}
GET https://gateway.astrapay.biz.id/api/orders/{slug}?status=pending&per_page=15
GET https://gateway.astrapay.biz.id/api/orders/{slug}/k7x2m9qd4zp-1760524800
Wajib: {slug} = slug project kamu + header x-api-key milik slug tersebut. Key project lain ditolak walau valid.
Request
curl --request POST \
--url https://gateway.astrapay.biz.id/api/orders/tokosaya \
--header 'Content-Type: application/json' \
--header 'x-api-key: pk_live_xxx' \
--data '{
"amount": 50000,
"reference": "INV-001",
"webhook_url": "https://tokomu.com/webhook",
"redirect_url": "https://tokomu.com/thanks",
"expires_in": 600
}'
Body Parameter
| Property | Type | Required | Keterangan |
amount | integer | Ya | Nominal rupiah. min 100, max 100.000.000. QRIS praktis ±10jt/scan ikut limit regulasi BI. |
reference | string | Tidak | No. invoice kamu, max 100 char. |
webhook_url | string | Tidak | Estafet notifikasi order.paid saat transaksi lunas. Max 255 char. |
redirect_url | string | Tidak | URL redirect customer setelah pembayaran berhasil/batal. Max 500 char. |
expires_in | integer | Tidak | Detik kedaluwarsa. min 300, max 600, default 600. QRIS selalu expired 10 menit (WIB). |
Metode pembayaran yang didukung:
Response
Response sukses (HTTP 201 Created):
{
"ok": true,
"data": {
"id": "k7x2m9qd4zp-1760524800",
"reference": "INV-001",
"base_amount": 50000,
"fee_qris": 350,
"service_fee": 351,
"credit_amount": 50000,
"pay_amount": 50351,
"redirect_url": "https://tokomu.com/thanks",
"status": "pending",
"is_sandbox": false,
"qris": "000201010212...",
"checkout_url": "https://gateway.astrapay.biz.id/pay/k7x2m9qd4zp-1760524800",
"expires_at": "2026-10-15T12:15:00+07:00",
"paid_at": null
}
}
fee_qris = round(amount × 0.7%) (50.000 → 350). pay_amount = amount + fee_qris + kode_unik. Kode unik = bilangan terkecil mulai dari 1 yang belum dipakai order pending lain; otomatis bebas dipakai lagi setelah order lama paid/expired/cancelled. Customer membayar persis total ini.
Payment link (Halaman Bayar Siap Pakai)
1. Pakai Link Checkout Langsung (Tanpa Koding)
Jika Anda tidak ingin membuat antarmuka sendiri, cukup berikan link checkout_url (contoh: https://gateway.astrapay.biz.id/pay/k7x2m9qd4zp-1760524800) kepada pembeli. Halaman ini sudah otomatis memeriksa status pembayaran tiap 2 detik dan menampilkan countdown waktu.
2. Tampilkan QR Sendiri di Website Kamu
Ambil field qris dari response JSON lalu render menjadi gambar QR di website Anda menggunakan library QRCode generator apa saja. Customer scan pakai GoPay / ShopeePay / m-banking apa saja.
3. Redirect & Cek Publik Tanpa API Key
Kirim redirect_url saat buat order (atau tempel ?redirect=https://tokomu.com/thanks di checkout_url). Setelah paid, buyer otomatis kembali ke web merchant dalam 10 detik. Frontend Anda juga bisa mengecek status tanpa API Key:
GET https://gateway.astrapay.biz.id/pay/k7x2m9qd4zp-1760524800/status
{"status":"pending","pay_amount":50351,"expires_at":"..."}
Status Transaksi
Detail order bisa dicek kapan saja dari backend Anda menggunakan ID order sistem ATAU nomor invoice/reference Anda:
GET https://gateway.astrapay.biz.id/api/orders/{slug}/k7x2m9qd4zp-1760524800
GET https://gateway.astrapay.biz.id/api/orders/{slug}/INV-001
Wajib menyertakan header x-api-key: pk_live_xxx.
Webhook (Notifikasi Otomatis ke Server Kamu)
Saat pembayaran berhasil diterima, server AstraPay Gateway akan mengirimkan request HTTP POST ke webhook_url Anda:
POST ke webhook_url kamu saat transaksi status paid:
{
"event": "order.paid",
"data": {
"id": "k7x2m9qd4zp-1760524800",
"reference": "INV-001",
"base_amount": 50000,
"fee_qris": 350,
"pay_amount": 50351,
"status": "paid",
"paid_at": "2026-10-15T12:05:00+07:00"
}
}
Notifikasi ditandatangani memakai Webhook Secret project kamu (dapat dilihat di dashboard → detail proyek → Integrasi):
x-pg2-signature: v1=HMAC-SHA256(secret, timestamp + "." + rawBody)
x-pg2-timestamp: 1760524800
Verifikasi signature di server kamu lalu balas dengan HTTP response 200 OK. Untuk keamanan ekstra, Anda tetap dapat memverifikasi ulang via GET https://gateway.astrapay.biz.id/api/orders/{slug}/{order} (header x-api-key) sebelum melepas barang/jasa.
Error & Rate Limit
| Kode | Arti | Aksi / Solusi |
401 | Key kosong / salah / bukan milik slug ini | Gunakan API key dari project yang slug-nya dipanggil |
403 | pk_test ditolak di mode live | Ganti dengan API key live (pk_live_*) |
404 | Slug project tidak ditemukan / nonaktif | Cek penulisan slug di dashboard Proyek |
404 | Order tidak ditemukan (atau beda project) | Cek id order / invoice reference + slug project yang sesuai |
422 | amount <100 / URL tidak valid / expires_in di luar 300–600 | Perbaiki format dan nilai data payload request |
429 | Lebih dari 100 request per menit per API key | Beri jeda pada panggilan API (retry dengan backoff) |
502 | Mesin lokal gagal (provider-service belum aktif / nomor GoPay pusat terputus) | Pastikan koneksi GoPay pusat terhubung di panel admin |
Metode Pembayaran
| Kode | Nama | Minimal | Maksimal |
payment_link | Payment Link | Rp 100 | Rp 100.000.000 |
qris | QRIS (Semua Bank & e-Wallet) | Rp 100 | Rp 100.000.000 |
Contoh Kode Integrasi
PHP (cURL)
<?php
$ch = curl_init("https://gateway.astrapay.biz.id/api/orders/tokosaya");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
'Content-Type: application/json',
'x-api-key: pk_live_xxxxxxxxxxxxxxxxxxxxxxxx',
],
CURLOPT_POSTFIELDS => json_encode([
'amount' => 50000,
'reference' => 'INV-001',
'webhook_url' => 'https://tokomu.com/webhook',
'redirect_url' => 'https://tokomu.com/thanks',
'expires_in' => 600,
]),
]);
$res = json_decode(curl_exec($ch), true);
curl_close($ch);
if ($res['ok'] ?? false) {
header('Location: ' . $res['data']['checkout_url']);
exit;
}
Node.js / JavaScript (Fetch)
const response = await fetch('https://gateway.astrapay.biz.id/api/orders/tokosaya', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-api-key': 'pk_live_xxxxxxxxxxxxxxxxxxxxxxxx',
},
body: JSON.stringify({
amount: 50000,
reference: 'INV-001',
webhook_url: 'https://tokomu.com/webhook',
redirect_url: 'https://tokomu.com/thanks',
expires_in: 600,
}),
});
const result = await response.json();
console.log(result.data.checkout_url);
Python (Requests)
import requests
res = requests.post(
"https://gateway.astrapay.biz.id/api/orders/tokosaya",
headers={"x-api-key": "pk_live_xxxxxxxxxxxxxxxxxxxxxxxx"},
json={
"amount": 50000,
"reference": "INV-001",
"webhook_url": "https://tokomu.com/webhook",
"redirect_url": "https://tokomu.com/thanks",
"expires_in": 600,
}
)
print(res.json()["data"]["checkout_url"])