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.
LangkahProses
1POST /{provider}/orders dengan amount.
2Simpan order_sn, tampilkan QRIS, dan gunakan pay_amount.
3Poll GET /{provider}/orders/{order_sn}.
4Jika 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.

MethodEndpointFungsi
POST/gopay/create-qrisBuat QRIS dengan nominal exact.
POST/gopay/check-paymentCek transaksi berdasarkan amount + waktu + scope trx_id.
GET/gopay/transactionsDaftar transaksi.
GET/gopay/transactions/allDaftar 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

MethodEndpointFungsi
POST/shopee/create-qrisBuat QRIS dengan nominal exact.
POST/shopee/check-paymentCek transaksi berdasarkan amount + waktu.
GET/shopee/transactionsDaftar transaksi.
GET/shopee/transactions/allDaftar transaksi bulan berjalan.

HTTP Status & Error

StatusArti
200Request berhasil.
201Order berhasil dibuat.
400Parameter atau body tidak valid.
401API Key tidak valid atau expired.
404order_sn atau resource tidak ditemukan.
409Provider belum siap, binding konflik, atau slot nominal unik sementara penuh.
502Upstream provider gagal merespons.
503Worker 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}'