Dokumentasi API
Integrasi GoPay dan ShopeePay menggunakan satu API key dengan endpoint terpisah per provider.
Base URL: Header: X-Api-KeyGoPay: /gopay/*ShopeePay: /shopee/*
1. Mulai Integrasi
Simpan Base URL dan API Key di environment backend aplikasi. Pilih provider melalui prefix endpoint. Seluruh request pembayaran harus dilakukan dari server/backend agar API Key tidak terekspos ke frontend.
RSTORE_BASE_URL=https://rsdigitalpayment.site RSDIGITAL_API_KEY=rsg_live_xxxxxxxxx
2. Authentication
Kirim API Key aktif pada setiap request menggunakan header berikut.
X-Api-Key: rsg_live_API_KEY_ANDA
Jangan menaruh API Key di JavaScript frontend, URL, query string, repository publik, atau aplikasi client yang mudah diekstrak.
3. Flow Order yang Direkomendasikan
Untuk otomatisasi pembayaran gunakan endpoint /orders. Sistem membuat QRIS, menghasilkan order_sn, lalu melakukan polling transaksi di background. Status juga dapat dipoll manual menggunakan order_sn.
order_sn adalah ID unik yang dibuat Rsdigital Payment untuk mengidentifikasi order API. Source GoPay/Shopee yang digunakan tidak mengembalikan order_sn provider pada saat QRIS static diubah menjadi QRIS dinamis. Verifikasi akhir tetap dikunci menggunakan transaction ID provider.
Anti nominal kembar: endpoint Orders membuat pay_amount unik untuk order aktif pada provider dan akun yang sama. Contoh request Rp10.000 dapat menghasilkan pembayaran Rp10.137. Gunakan pay_amount yang dikembalikan response sebagai nominal yang harus dibayar.
Jangan campur flow: untuk satu pembayaran, gunakan endpoint Orders dari awal sampai selesai. Jangan membuat order melalui /orders lalu mengecek pembayaran yang sama melalui endpoint legacy /check-payment.
| Langkah | Proses |
|---|---|
| 1 | POST /{provider}/orders dengan amount. |
| 2 | Simpan order_sn, tampilkan QRIS, dan gunakan pay_amount. |
| 3 | Poll GET /{provider}/orders/{order_sn}. |
| 4 | Jika status PAID, simpan provider_transaction_id dan selesaikan order lokal. |
API GoPay
GoPay — Create Order
POST/gopay/orders
curl -X POST "{{BASE}}/gopay/orders" \
-H "X-Api-Key: rsg_live_API_KEY_ANDA" \
-H "Content-Type: application/json" \
-d '{"amount":10000}'Response
{
"success": true,
"data": {
"order_sn": "RSG-GP-20260929-ABC123",
"provider": "gopay",
"requested_amount": 10000,
"pay_amount": 10137,
"status": "PENDING",
"qris_code": "000201...",
"status_url": "https://rsdigitalpayment.site/gopay/orders/RSG-GP-..."
}
}Poll Status
GET/gopay/orders/{order_sn}
curl "{{BASE}}/gopay/orders/RSG-GP-ORDER_SN" \
-H "X-Api-Key: rsg_live_API_KEY_ANDA"GoPay — Token Status
GET/gopay/token-status
curl "{{BASE}}/gopay/token-status" -H "X-Api-Key: rsg_live_API_KEY_ANDA"GoPay — Endpoint Dasar
Endpoint berikut tetap tersedia untuk kompatibilitas. Untuk order otomatis dan nominal kembar, endpoint Orders lebih direkomendasikan.
| Method | Endpoint | Fungsi |
|---|---|---|
| POST | /gopay/create-qris | Buat QRIS dengan nominal exact. |
| POST | /gopay/check-payment | Cek transaksi berdasarkan amount + waktu + scope trx_id. |
| GET | /gopay/transactions | Daftar transaksi. |
| GET | /gopay/transactions/all | Daftar transaksi bulan berjalan. |
API ShopeePay
ShopeePay — Create Order
POST/shopee/orders
curl -X POST "{{BASE}}/shopee/orders" \
-H "X-Api-Key: rsg_live_API_KEY_ANDA" \
-H "Content-Type: application/json" \
-d '{"amount":10000}'Poll Status
GET/shopee/orders/{order_sn}
curl "{{BASE}}/shopee/orders/RSG-SP-ORDER_SN" \
-H "X-Api-Key: rsg_live_API_KEY_ANDA"ShopeePay — Token Status
GET/shopee/token-status
curl "{{BASE}}/shopee/token-status" -H "X-Api-Key: rsg_live_API_KEY_ANDA"ShopeePay — Endpoint Dasar
| Method | Endpoint | Fungsi |
|---|---|---|
| POST | /shopee/create-qris | Buat QRIS dengan nominal exact. |
| POST | /shopee/check-payment | Cek transaksi berdasarkan amount + waktu. |
| GET | /shopee/transactions | Daftar transaksi. |
| GET | /shopee/transactions/all | Daftar transaksi bulan berjalan. |
HTTP Status & Error
| Status | Arti |
|---|---|
| 200 | Request berhasil. |
| 201 | Order berhasil dibuat. |
| 400 | Parameter atau body tidak valid. |
| 401 | API Key tidak valid atau expired. |
| 404 | order_sn atau resource tidak ditemukan. |
| 409 | Provider belum siap, binding konflik, atau slot nominal unik sementara penuh. |
| 502 | Upstream provider gagal merespons. |
| 503 | Worker GoPay belum siap. |
Contoh Integrasi
const BASE = '{{BASE}}';
const KEY = process.env.RSDIGITAL_API_KEY;
async function createOrder(provider, amount) {
const r = await fetch(`${BASE}/${provider}/orders`, {
method: 'POST',
headers: {'Content-Type':'application/json','X-Api-Key':KEY},
body: JSON.stringify({ amount })
});
const j = await r.json();
if (!r.ok) throw new Error(j.message || 'Create order gagal');
return j.data;
}
async function getStatus(provider, orderSn) {
const r = await fetch(`${BASE}/${provider}/orders/${encodeURIComponent(orderSn)}`, {
headers: {'X-Api-Key':KEY}
});
return r.json();
}
const order = await createOrder('gopay', 10000);
console.log(order.order_sn, order.pay_amount);<?php
$base = '{{BASE}}';
$key = getenv('RSDIGITAL_API_KEY');
$provider = 'shopee';
$ch = curl_init($base . '/' . $provider . '/orders');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json','X-Api-Key: '.$key],
CURLOPT_POSTFIELDS => json_encode(['amount' => 10000]),
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($result);curl -X POST "{{BASE}}/gopay/orders" \
-H "X-Api-Key: rsg_live_API_KEY_ANDA" \
-H "Content-Type: application/json" \
-d '{"amount":10000}'