Dokumentasi Developer

Onboarding produk baru menerima pembayaran dalam kurang dari 30 menit: daftar, tanda tangani request, panggil Charge API, terima webhook.

Quickstart (< 30 menit)

1. Daftarkan produk

Buat produk di dashboard PaySwitch. Kamu menerima product_id, api_key, dan webhook_secret. Daftarkan juga callback URL (harus HTTPS).

2. Tanda tangani request

Setiap panggilan API ditandatangani HMAC (lihat panduan Signature di bawah). Kirim header `X-Product-Id`, `X-Timestamp`, dan `X-Signature`.

3. Buat charge

Panggil `POST /v1/charges` dengan header `Idempotency-Key`. Respons berisi `checkout_url` / VA / token sesuai provider yang dipilih routing.

4. Terima webhook

PaySwitch mengirim satu webhook seragam ber-signature ke callback URL-mu untuk tiap perubahan status. Verifikasi `X-PaySwitch-Signature` dengan resep yang sama, lalu balas `200` cepat.

Panduan Signature

Semua request ditandatangani agar tak bisa di-replay. Bangun signing string:

```

<X-Timestamp>.<METHOD>.<path>.<rawBody>

```

lalu `X-Signature = hex( HMAC-SHA256(webhook_secret, signing string) )`. Server menolak signature yang salah (`401`) atau di luar jendela waktu (skew). `METHOD` huruf besar; `path` tanpa query; `rawBody` byte mentah persis seperti dikirim.

Contoh signing

X-Product-Id: prod_demo
X-Timestamp:  1700000000
Signing string: 1700000000.POST./v1/charges.{"amount":10000,"currency":"IDR"}
X-Signature:  a2953244d422279bbb4eed79f2db72b1232d5ebf3c812f55e9656e056e3a32ca
import { createHmac } from 'node:crypto';
const ts = String(Math.floor(Date.now() / 1000));
const signingString = `${ts}.${'POST'}.${'/v1/charges'}.${body}`;
const sig = createHmac('sha256', webhookSecret).update(signingString).digest('hex');
// headers: X-Product-Id, X-Timestamp: ts, X-Signature: sig

Sandbox (test mode)

Gunakan kredensial test untuk memakai sandbox di `https://sandbox.api.payswitch.efolusi.com`. Transaksi mode test terisolasi dari data live dan tidak memindahkan dana nyata. Header dan resep signature identik dengan production. Lihat referensi lengkap di OpenAPI: [/openapi.json](/openapi.json).

Referensi API (OpenAPI)