Dokumen ini menjelaskan cara instalasi, konfigurasi, dan penggunaan backend PHP Native untuk aplikasi Cemilan KasirPOS. Backend ini adalah opsi utama yang direkomendasikan untuk pengguna shared hosting (cPanel) karena kemudahan deployment dan kompatibilitas yang luas.
Sebelum memulai, pastikan Anda telah menginstal:
- PHP (v8.0 atau lebih baru disarankan)
- MySQL Database (melalui Laragon, XAMPP, atau instalasi standalone)
- Web Server (Apache/Nginx) atau bisa menggunakan PHP Built-in Server
Backend terletak di dalam folder php_server di root proyek.
cd php_serverBackend menggunakan file .env untuk menyimpan konfigurasi sensitif.
-
Salin file
.env.examplemenjadi.env:cp .env.example .env # atau di Windows: copy .env.example .env -
Buka file
.envdan sesuaikan konfigurasinya:# Database Configuration DB_HOST=localhost DB_NAME=cemilankasirpos_php_v02 DB_USER=root DB_PASS= # Security Configuration # Ganti dengan string acak yang panjang untuk Production! JWT_SECRET=rahasia_super_aman_12345 # CORS Configuration (Production) ALLOWED_ORIGINS=https://tokocemilan.com
Catatan: File
config.phpakan otomatis memuat file.envini. Anda tidak perlu mengeditconfig.phpatauauth.phpsecara langsung kecuali ingin mengubah logika intinya.
Untuk pengembangan lokal tanpa web server eksternal (seperti Apache/Nginx), Anda bisa menggunakan server bawaan PHP:
cd php_server
php -S localhost:8000Server akan berjalan di http://localhost:8000.
- Pindahkan atau symlink folder
php_serverke direktorihtdocs(XAMPP) atauwww(Laragon). - Akses melalui URL, misalnya:
http://localhost/cemilan-kasirpos/php_server/index.php.
Frontend React perlu tahu ke mana harus mengirim request API. Edit file .env di root project (bukan di folder server):
Jika menggunakan PHP Built-in Server:
VITE_API_URL=http://localhost:8000Catatan: Jika error 404, coba http://localhost:8000/index.php
Jika menggunakan XAMPP/Laragon:
VITE_API_URL=http://localhost/path/ke/php_server/index.php/apiphp_server/
├── .env # File konfigurasi (TIDAK DITRACK GIT)
├── .env.example # Template konfigurasi environment
├── .htaccess # Routing Apache & Security Rules
├── config.php # Handler Konfigurasi (.env loader + CORS)
├── index.php # Router Utama (API Gateway)
├── auth.php # Middleware (JWT & Role Check)
├── login.php # Endpoint Autentikasi
├── logic.php # Business Logic Layer (Transaksi/Stok)
├── validator.php # Helper Validasi/Sanitasi Input
├── rate_limit.php # Logic Rate Limiting (Brute-Force Protection)
└── php_error.log # Log error server (tersembunyi dari publik)
Backend PHP ini dirancang untuk menyediakan API yang dibutuhkan oleh frontend React.
Backend menangani logika bisnis krusial untuk menjaga integritas data:
- Transaksi Penjualan:
- Mengurangi stok produk secara otomatis.
- Mencatat arus kas masuk (Cash In).
- Mendukung pembayaran parsial (Tempo) dan multi-payment history.
- Pembelian Stok:
- Menambah stok produk otomatis.
- Mencatat arus kas keluar (Cash Out) atau hutang supplier.
- Stock Opname:
- Menggunakan tabel
stock_adjustmentsuntuk melacak koreksi stok manual (selisih stok fisik vs sistem).
- Menggunakan tabel
- Batch Operations:
- Endpoint khusus untuk insert data dalam jumlah besar (Bulk Import) dengan validasi per item.
- JWT Authentication: Token JWT ditandatangani dengan algoritma HS256. Mendukung lewat Header
Authorization: BeareratauHttpOnly Cookies. - RBAC (Role-Based Access Control):
SUPERADMIN: Akses penuh.OWNER: Akses manajemen tapi tidak bisa hapus user critical.- HSTS (Automatic):
config.phpotomatis mendeteksi HTTPS dan mengaktifkan header Strict-Transport-Security untuk mencegah downgrade attacks.
- Secure Cookies: Token autentikasi disimpan dalam cookie dengan flag
HttpOnly,Secure(jika HTTPS), danSameSite=Lax. - Data Isolation: User dengan role
CASHIERhanya dapat mengakses data transaksi yang mereka buat sendiri. - Rate Limiting:
rate_limit.phpmenggunakan mekanisme file locking (flock) padalogin_attempts.jsonuntuk mencegah brute-force login tanpa race condition. - Input Validation: Semua input JSON dibersihkan (
strip_tags) dan divalidasi dengan whitelist schema.
- Error: "CORS Policy Blocked"
- Pastikan
config.phpsudah mengatur headerAccess-Control-Allow-Origindengan benar. - Pastikan URL frontend sesuai dengan yang diizinkan (atau
*untuk development).
- Pastikan
- Error: "Database connection failed"
- Cek kredensial di
config.phpatau file.env. - Pastikan ekstensi
pdo_mysqlaktif diphp.ini.
- Cek kredensial di
- Error: "Route not found" atau 404
- Jika menggunakan Apache, pastikan
.htaccessaktif danmod_rewritedinyalakan. - Jika menggunakan PHP Built-in Server, pastikan menjalankannya dari dalam folder
php_server.
- Jika menggunakan Apache, pastikan
- Tidak bisa akses Log Error di Browser
- Ini adalah fitur keamanan. File
.logdan.jsondiblokir dari akses browser. - Silakan buka file
php_error.logsecara manual lewat File Explorer atau File Manager cPanel.
- Ini adalah fitur keamanan. File
Dibuat untuk Cemilan KasirPOS Nusantara