High-Performance, Secure, & Scalable. Sistem checkout produk digital berbasis Node.js Express yang terintegrasi penuh dengan Payment Gateway Flowix. Dirancang khusus dengan lapisan keamanan tingkat lanjut untuk menangani transaksi QRIS secara real-time.
- Arsitektur & Logika Sistem
- Fitur Utama
- Teknologi & Dependensi
- Struktur Proyek
- Instalasi & Konfigurasi
- API Reference (Internal Proxy)
- Keamanan & Best Practices
- Kontribusi & Lisensi
Aplikasi ini mengimplementasikan pola Backend-for-Frontend (BFF) untuk memastikan kredensial sensitif seperti API_KEY dan MERCHANT_ID tidak pernah bocor ke sisi klien.
- Request Initiation: Frontend mengirimkan request ke endpoint internal Express dengan proteksi CSRF Token.
- Server-Side Proxy:
server.jsmenerima request, menyuntikkan API Key dari.env, dan melakukan handshake ke Flowix Gateway API v1. - Dynamic Rendering: Response berupa data QRIS dikirim kembali ke klien untuk dirender secara dinamis.
- Real-time Polling: Sistem melakukan verifikasi status otomatis setiap beberapa detik hingga pembayaran terdeteksi sukses oleh server.
- CSRF Protection: Mencegah serangan Cross-Site Request Forgery pada setiap endpoint mutasi.
- XSS Mitigation: Menggunakan middleware Helmet untuk mengatur header HTTP yang aman.
- Rate Limiting: Proteksi bawaan terhadap serangan Brute Force pada API pembayaran.
- Express EJS Engine: Rendering sisi server yang cepat dengan integrasi data yang mulus.
- Clean Architecture: Pemisahan konfigurasi, logika server, dan aset publik.
- Mobile Optimized: Tampilan yang sepenuhnya responsif untuk transaksi via smartphone.
- Runtime: Node.js (v18+)
- Framework: Express.js
- View Engine: EJS (Embedded JavaScript templates)
- Core Libraries:
axios: Handling HTTP requests ke gateway.csurf: Middleware proteksi CSRF.helmet: Pengamanan header HTTP.express-rate-limit: Pembatasan trafik API.dotenv: Manajemen variabel lingkungan.
/project-root
βββ public/ # Static assets (Images, CSS, JS)
β βββ images/ # Asset gambar produk
βββ views/ # EJS Templates (Frontend UI)
β βββ index.ejs
βββ .env # Environment Variables (PRIVATE)
βββ config.js # Centralized Configuration Logic
βββ server.js # Main Entry Point & API Routes
βββ package.json # Project Metadata & Dependencies
βββ README.md # Dokumentasi
Pastikan Anda sudah menginstall Node.js (versi LTS sangat disarankan).
git clone https://github.com/dani-techno/script-market-node.git
cd script-market-node
npm install
Buat file .env di root direktori dan sesuaikan dengan kredensial dari Dashboard Flowix Anda:
PORT=3000
# API Configuration
API_BASE_URL=https://flowix.web.id
API_KEY=sk-xxxx-xxxx-xxxx
MERCHANT_ID=MID-XXXX
# Product Details
PRODUCT_TITLE=Script Bot WhatsApp
PRODUCT_DESC=Otomatisasi pesan pelanggan dengan fitur AI dan integrasi API lengkap.
PRODUCT_PRICE=5000
DOWNLOAD_URL=https://your-storage.com/file.zip
Mode Produksi:
npm start
Mode Pengembangan (Auto-reload):
npm run dev
Akses aplikasi di: http://localhost:3000
Semua endpoint dilindungi oleh middleware csrfProtection.
| Endpoint | Method | Fungsi |
|---|---|---|
/ |
GET |
Render halaman utama (Checkout Page) |
/api/payment/create |
POST |
Inisiasi transaksi & Generate QRIS |
/api/payment/status |
POST |
Cek status pembayaran (Polling) |
/api/payment/cancel |
POST |
Pembatalan transaksi manual |
/api/download |
POST |
Mendapatkan link download aman setelah sukses |
Sebagai Senior Engineer, saya merekomendasikan langkah berikut untuk tahap produksi:
- SSL/HTTPS: Selalu jalankan aplikasi di balik SSL (Nginx Reverse Proxy atau Certbot) untuk mengamankan cookie CSRF.
- Session Store: Untuk skala besar, ganti default cookie-parser dengan session store berbasis Redis atau Database.
- Environment Security: Pastikan
.envmasuk ke dalam.gitignore. Jangan pernah melakukan commit file.envke repositori publik. - Logging: Implementasikan library logging seperti
winstonataupinountuk memantau error transaksi secara real-time.
- Lead Developer: Dani Joest, S.M.T., C.P.M.
- Company: PT INOVIXA TECHNOLOGIES SOLUTION
- License: MIT License - Lihat file
LICENSEuntuk detailnya.
Build with β€οΈ by Mr. Dani Joest.