Konversi Static QRIS menjadi Dynamic QRIS dengan verifikasi pembayaran secara real-time & zero payment gateway fees.
Normalnya, Static QRIS mengharuskan customer input nominal secara manual, dan merchant harus cek mutasi via aplikasi m-banking/e-wallet untuk memastikan dana masuk. Qatch solve masalah ini:
- Mem-parsing string Static QRIS dan inject nominal transaksi untuk generate Dynamic QR Code.
- Menggunakan Android Notification Forwarder untuk intercept incoming payment notification di HP merchant.
- Mem-forward data notifikasi via HTTP POST ke endpoint webhook sistem ini.
- Melakukan auto-verification pada payload dan update status transaksi menjadi
PAID.
| Fitur | Deskripsi |
|---|---|
| 🔁 Dynamic QRIS Generator | Otomatis append nominal + kode unik ke base payload Static QRIS |
| 📡 Real-time Webhook | Endpoint siap menerima POST request dari Android Notification Forwarder |
| 🤖 Auto Verification | Parsing teks notifikasi untuk mencocokkan nominal & update status otomatis |
| 🔑 API Key & HMAC | Autentikasi aman untuk semua akses API |
| 🛡️ Webhook Filtering | Wildcard filter berdasarkan nama app, judul & isi notifikasi |
| 📊 Analytics Dashboard | Chart penggunaan harian, statistik, dan log transaksi terbaru |
| 👥 Multi-user & Roles | Manajemen user dengan role Superadmin dan User biasa |
| 💳 Subscription System | Manajemen paket berlangganan berbayar dan gratis, serta batasan limit |
| ⚡ Paywuz Integration | Pembayaran otomatis dengan Paywuz API (Virtual Account & QRIS) |
| 💰 Zero PG Fees | 100% self-hosted untuk proses Dynamic QRIS (kecuali langganan platform) |
[Merchant App] Ecommerce / Toko Topup / Dll
│
│ POST /api/v1/dynamic-qris
│ { qrisId, amount, feeType, expiredHours }
▼
[Qatch Server]
│ Generate QRIS string dinamis + kode unik
│ Simpan transaksi status: pending
▼
[QR Code] ──── Ditampilkan ke pembayar
│
│ Pembayar scan & bayar via m-banking/e-wallet
▼
[Notifikasi Masuk di HP Android Merchant]
│
│ Android Notification Forwarder forward ke:
│ POST /api/v1/dynamic-qris/callback
▼
[Qatch Server]
│ Cocokkan nominal di teks notifikasi
│ dengan `total` transaksi pending
│ Jika cocok → status: paid
▼
[Webhook ke Target URL]
POST https://your-app.com/webhook
{ event: "transaction.paid", data: {...} }
Semua endpoint membutuhkan header x-api-key untuk autentikasi.
| Method | Endpoint | Deskripsi |
|---|---|---|
GET |
/api/v1/static-qris |
Daftar semua QRIS statis (paginasi) |
POST |
/api/v1/static-qris |
Tambah QRIS statis baru |
GET |
/api/v1/static-qris/:id |
Detail QRIS statis |
PUT |
/api/v1/static-qris/:id |
Update QRIS statis |
DELETE |
/api/v1/static-qris/:id |
Hapus QRIS statis |
| Method | Endpoint | Deskripsi |
|---|---|---|
POST |
/api/v1/dynamic-qris |
Generate Qatch baru |
GET |
/api/v1/dynamic-qris/:id |
Cek status transaksi |
PUT |
/api/v1/dynamic-qris/:id |
Update status manual |
POST |
/api/v1/dynamic-qris/callback |
Webhook untuk notifikasi pembayaran |
POST /api/v1/dynamic-qris/callback
x-api-key: YOUR_API_KEY
{
"app_name": "Dana",
"notification_title": "Dana Masuk",
"notification_text": "Kamu menerima Rp 50.021 dari QRIS",
"timestamp_ms": 1720432800000
}- AdonisJS v7 — Backend framework (API, Webhook, Auth, Cron Jobs)
- Inertia.js + Vue.js 3 — Full-stack SPA tanpa REST overhead
- shadcn/vue — UI Component library
- Chart.js — Visualisasi data dashboard
- Android Notification Forwarder — Notification interceptor di sisi Android
- Paywuz SDK — Sistem pembayaran berlangganan platform
- Node.js >= 20
- NPM atau Yarn
- Database (SQLite untuk development, PostgreSQL/MySQL untuk production)
# 1. Clone repository
git clone https://github.com/karuhun-developer/qris-dinamis.git
cd qris-dinamis
# 2. Install dependencies
npm install
# 3. Copy file environment
cp .env.example .env
# 4. Generate app key
node ace generate:key
# 5. Jalankan migrasi database
node ace migration:run
# 6. (Opsional) Jalankan seeder
node ace db:seed
# 7. Start development server
npm run dev- Install Android Notification Forwarder di HP merchant.
- Login ke dashboard Qatch → menu Webhook & API.
- Copy URL Webhook yang tersedia.
- Paste URL tersebut ke konfigurasi Android Notification Forwarder.
- Atur Listen Apps (contoh:
Dana, Gopay, Shopeepay) dan Wildcard filter sesuai kebutuhan. - Setiap ada notifikasi pembayaran masuk, status transaksi akan otomatis ter-update.
├── app/
│ ├── controllers/
│ │ ├── api/v1/ # API Controllers (Static & Dynamic QRIS)
│ │ └── ... # Web Controllers (Dashboard, Auth, dll)
│ ├── middleware/
│ │ └── api_key_middleware.ts # Autentikasi via x-api-key
│ ├── models/ # Lucid ORM Models
│ └── services/ # Business logic (QRIS parsing, generation)
├── database/
│ └── migrations/ # Database schema migrations
├── inertia/
│ ├── pages/ # Vue.js pages (Dashboard, QRIS, Webhook, dll)
│ ├── components/ # Reusable Vue components
│ └── layouts/ # Layout templates
└── start/
├── routes.ts # Route definitions
└── kernel.ts # Middleware registration
Project ini terinspirasi dari verssache/qris-dinamis.
MIT License — bebas digunakan dan dimodifikasi.
Built with ❤️ by Karuhun Developer