Dua environment, satu pola integrasi
Mode project disalin ke transaksi saat transaksi dibuat. ID transaksi sandbox menggunakan prefiks SBX, sedangkan ID transaksi production menggunakan prefiks QRIS. Jangan mencampur ID, credential, atau data dari kedua environment.
| Perilaku | Sandbox | Production |
|---|---|---|
| Dana nyata | Tidak | Ya |
| Simulasi paid | Tersedia | Ditolak |
| Webhook | Dapat diuji | Aktif untuk pembayaran nyata |
| Prefiks transaksi | SBX | QRIS |
Kasus yang wajib diuji
- Transaksi berubah dari pending menjadi paid
- Transaksi berubah menjadi expired tanpa pembayaran
- Webhook yang sama diterima lebih dari sekali
- Webhook tiba setelah polling mendeteksi perubahan
- trx_id tidak ditemukan
- API key salah atau project dinonaktifkan
Checklist sebelum production
- 01Pisahkan konfigurasi
Gunakan environment variable yang berbeda untuk credential sandbox dan production, termasuk webhook secret masing-masing.
- 02Amankan webhook
Gunakan HTTPS, verifikasi X-Webhook-Signature, batasi ukuran payload, dan tetap baca ulang status transaksi dari backend.
- 03Buat operasi idempotent
Pemrosesan event paid untuk kedua kalinya tidak boleh memenuhi order lagi.
- 04Siapkan observability
Catat request, trx_id, event, dan hasil pemenuhan order tanpa merekam API key atau webhook secret.
Signature dan retry webhook
Verifikasi X-Webhook-Signature sebelum memproses payload — lihat panduan "Terima webhook". Kalau endpoint Anda gagal merespons 2xx, KiPay mencoba ulang hingga 6 kali dengan jeda meningkat (~10 detik sampai ~160 detik), lalu berhenti kalau tetap gagal. Perilaku retry ini masih bisa disesuaikan seiring waktu — jangan hardcode jumlah atau jeda persisnya, cukup pastikan handler Anda aman menerima event yang sama berkali-kali.