Semua yang kamu butuhkan untuk menerima pembayaran QRIS di aplikasimu — dari aktivasi hingga live di produksi.
Base URL/api/v1
pixpay bertindak sebagai jembatan antara QR pembayaran kamu dan sistem deteksi notifikasi. Dana selalu diterima langsung ke rekening e-wallet atau bank milikmu.
Mulai Pakai pixpay
Ikuti langkah-langkah ini agar sistem QRIS kamu siap menerima pembayaran nyata.
1
Aktifkan Akun & Pilih Paket
Masuk ke pixpay dan pilih paket yang sesuai skala bisnismu: Trial untuk coba-coba, atau Pro tanpa batas.
2
Daftarkan QRIS Kamu
Upload foto atau file QR statis dari e-wallet yang kamu gunakan (DANA, OVO, GoPay, ShopeePay, dll.) lewat menu QRIS di dashboard. Setelah diverifikasi, kamu akan mendapat ID QRIS unik.
3
Ambil API Key
Buka menu API Keys di dashboard, buat key baru, dan catat License Key serta Webhook Secret yang dihasilkan.
Kirim x-license-key di setiap header request. Webhook Secret hanya untuk server-side — jangan ditaruh di kode frontend yang bisa dilihat publik.
4
Pasang Aplikasi Android
Install APK pixpay, aktifkan izin baca notifikasi, masukkan License Key, lalu pilih QRIS yang akan digunakan untuk mendeteksi pembayaran masuk.
Agar pembayaran selalu terdeteksi real-time: set baterai ke Tanpa Batasan, aktifkan Autostart, dan jangan swipe-close aplikasi.
5
Hubungkan ke Aplikasimu
Panggil endpoint /generate/qris dari server-side aplikasimu, tampilkan qr_string sebagai gambar QR ke pembeli, lalu pantau status pembayaran via polling /generate/check-status.
Selalu gunakan totalAmount (bukan originalAmount) saat useUniqueCode aktif agar pembayaran terdeteksi dengan tepat.
Referensi API
Semua endpoint menggunakan header x-license-key sebagai autentikasi. Tidak perlu Bearer token untuk integrasi sisi server.
POST/generate/qrisBuat Transaksi QRIS
Membuat sesi pembayaran QRIS baru. Respons berisi qr_string yang siap dirender jadi gambar QR, dan transactionId untuk memantau status pembayaran.
• id — ID QRIS dari dashboard (yang sudah diverifikasi), bukan ID paket atau kategori.
• useUniqueCode — tambahkan angka unik ke nominal agar transaksi yang berjalan bersamaan tidak saling tertukar.
• Tampilkan totalAmount ke pembeli. Jika pembeli membayar originalAmount saat useUniqueCode aktif, pembayaran bisa tidak terbaca oleh sistem.
• packageIds — daftar package name aplikasi e-wallet yang dipantau. Contoh DANA: ["id.dana"].
POST/generate/v2/qrisTransaksi QRIS v2
Versi yang lebih fleksibel dengan pilihan tipe QR (dynamic/static) dan metode pembayaran (qris/ewallet). Cocok untuk skenario pembayaran yang lebih beragam.
• Jika listener belum dibuat di dashboard, endpoint akan mengembalikan not found.
• Gunakan endpoint ini saat startup aplikasi Android untuk memastikan konfigurasi selalu terbaru.
Webhook & Security
Gunakan Webhook URL untuk menerima callback pembayaran. Verifikasi header X-PixPay-Signature dengan Webhook Secret agar callback tidak bisa dipalsukan.
Header Callback
X-PixPay-Signature = HMAC SHA256 dari raw body, dihitung dengan Webhook Secret.
X-License-Key = tetap dikirim untuk kompatibilitas sistem lama.
Checklist Implementasi Aman
• Simpan Webhook Secret di server env var, jangan di aplikasi frontend/mobile.
• Hitung signature dari raw body asli (bukan JSON yang sudah di-serialize ulang).
• Bandingkan signature dengan timing-safe compare, tolak jika tidak cocok.
• Balas HTTP 2xx jika payload valid; gunakan 4xx saat signature invalid.
Tip: isi data dengan qr_string dari respons API pixpay untuk menampilkan QR pembayaran yang lebih menarik ke customer.
Praktik Terbaik
Hal-hal yang perlu diperhatikan agar integrasi pixpay berjalan stabil dan aman di lingkungan produksi.
1
Lindungi Kredensial API
License key dan webhook secret adalah kunci aksesmu — jangan taruh di kode frontend atau repositori publik. Gunakan environment variable di sisi server.
2
Aktifkan Kode Unik
Saat useUniqueCode aktif, pixpay menambahkan angka kecil ke nominal agar setiap pembayaran bisa dibedakan. Pastikan kamu menampilkan totalAmount ke pembeli, bukan originalAmount.
3
Pahami Masa Berlaku
expiredInMinutes mengontrol kapan QR kamu kedaluwarsa di sisi UX. Namun pembayaran yang masuk setelah waktu habis bisa tetap diterima — gunakan status sebagai penjaga logika order, bukan waktu.
4
Jaga Aplikasi Tetap Aktif
Untuk deteksi pembayaran real-time, set baterai Android ke Tanpa Batasan, aktifkan Autostart, dan pinned di Recent Apps. Jika aplikasi tertutup, notifikasi tidak terbaca.
5
Alur Pembayaran yang Benar
① Buat transaksi dari server → ② Simpan transactionId dan totalAmount → ③ Render qr_string sebagai gambar QR → ④ Polling status tiap 3 detik → ⑤ Tandai order selesai saat status paid.
6
Polling yang Hemat Sumber Daya
Hentikan polling segera setelah status paid, expired, atau cancel. Interval di bawah 2 detik tidak diperlukan dan boros bandwidth. Gunakan exponential backoff saat koneksi bermasalah.