Dokumentasi · Build terkini

Dokumentasi PrizeX

Semua yang Anda butuhkan untuk memasang, mengonfigurasi, dan menjalankan PrizeX — platform PHP self-hosted di balik lelang, lotere, mystery box, permainan arcade, toko multi-penjual, dan ekonomi dompet/koin. Halaman ini mencerminkan basis kode sebagaimana dikirimkan, bukan ringkasan pemasaran.

PHP 7.4+ MySQL / MariaDB Composer 38 plugin payment gateway 5 tema storefront

Apa itu PrizeX

PrizeX adalah platform hadiah, gaming, dan marketplace berbasis PHP: lelang, lotere, mystery box, kluster permainan arcade, toko e-commerce multi-penjual, dan ekonomi dompet/koin — semuanya dalam satu aplikasi self-hosted. Produk ini hadir dengan arsitektur plugin/tema, panel admin, dan 38 plugin payment gateway yang mencakup kartu, dompet digital, crypto, serta prosesor regional, ditambah 3 metode pembayaran manual yang disemai langsung oleh kernel.

Tidak ada lock-in SaaS: Anda memasangnya di hosting sendiri, memiliki databasenya, dan mendapat update seumur hidup pada lisensi tersebut. Setiap vertikal (lelang, lotere, mystery box, permainan, toko) bisa dinyalakan atau dimatikan sendiri-sendiri dari panel admin — instalasi baru bisa berjalan sebagai produk satu vertikal saja atau sebagai suite lengkap.

Arsitektur
Digerakkan plugin & tema

Kode inti tidak pernah bergantung mati pada satu plugin. Setiap vertikal, payment gateway, dan login sosial adalah plugin di dalam plugins/ yang bisa diaktifkan, dinonaktifkan, atau dihapus tanpa merusak bagian situs lainnya.

Data
MySQL / MariaDB, mysqli mentah

Prefiks tabel tbl_, tanpa ORM, sebagian besar memakai prepared statement. Setiap plugin memiliki dan memigrasikan tabelnya sendiri lewat installer db_delta() yang idempoten.

Berjalan di atas apa

PrizeX berjalan di hosting shared standar atau VPS — tanpa konfigurasi server khusus selain server web yang mendukung rewrite.

Runtime
PHP 7.4+
Ekstensi GD & cURL
Database
MySQL / MariaDB
MariaDB wajib untuk migrasi*
Dependensi
Composer
Manajer paket PHP
Server web
Apache / LiteSpeed
nginx didukung lewat contoh konfigurasi

* Beberapa file di dalam database/migrations/ memakai ekstensi ADD COLUMN IF NOT EXISTS yang hanya ada di MariaDB. MySQL 8.0/8.4 biasa menolaknya — pakai MariaDB untuk databasenya, baik di development maupun production.

Menjalankan instalasi baru

Tidak ada wizard instalasi untuk penyiapan baru — Anda mengimpor skemanya langsung dan mengonfigurasi file environment.

  1. Pasang dependensi PHP:
    composer install
  2. Salin templat environment dan isi kredensial database Anda:
    cp .env.example .env
  3. Impor database/production.sql ke database yang Anda sebut di .env — langkah ini membuat skema lengkapnya.
  4. Ganti akun admin bawaan hasil seeding (lihat catatan di bawah), lalu masuk di /admin/.
Jangan masuk memakai akun bawaan hasil seeding. database/production.sql menyertakan satu baris tbl_admin (admin@wowcodes.in) yang hash password-nya sama persis di setiap instalasi. Hapus baris itu dan masukkan milik Anda sendiri sebelum situs live:
php -r "echo password_hash('your-password', PASSWORD_BCRYPT), \"\n\";"
DELETE FROM tbl_admin; INSERT INTO tbl_admin (username, email, password, image, status, permission_settings) VALUES ('yourname', 'you@example.com', '<hash from the command above>', '', 1, 1);

Untuk pengembangan lokal, server bawaan PHP jalan tanpa Apache: php -S localhost:8000 router.php — perlu dicatat, server ini mengabaikan .htaccess sepenuhnya, jadi router.php menerapkan ulang aturan routing yang sama secara manual (lihat Pengaturan server web).

Variabel environment

Semua pengaturan yang khusus per environment ada di .env, dimuat lewat vlucas/phpdotenv. Salin .env.example menjadi .env (diabaikan git) dan isi nilai sebenarnya untuk tiap environment — minimal kredensial database, sebelum skema diimpor.

Pengaturan seluruh situs yang tidak khusus per environment (nama aplikasi, mata uang, plugin aktif, tema aktif, dan sakelar per vertikal) tersimpan di database, pada tbl_settings, dan dikelola dari panel admin, bukan lewat file.

Pengaturan server web

Aturan routing dan keamanan — URL rapi, pemblokiran akses langsung ke .env/connection.php/log, dan pencegahan konten unggahan dieksekusi sebagai PHP — didefinisikan di file .htaccess yang tersebar di seluruh proyek. Apache dan LiteSpeed/OpenLiteSpeed membacanya secara native.

Di nginx, pakai nginx.conf.example, yang mencerminkan setiap aturan tadi sebagai blok server{} nginx — sesuaikan server_name, root, dan soket PHP-FPM dengan environment Anda.

Jaga ketiganya tetap sinkron. .htaccess (production), router.php (server dev php -S lokal), dan nginx.conf.example (nginx) masing-masing menerapkan ulang aturan routing yang sama secara terpisah. Menambah rute URL rapi yang baru berarti memperbarui ketiganya.

Arsitektur request

Setiap halaman storefront (index.php, item.php, …) di-boot lewat includes/header.php, dengan urutan berikut:

Geolokasi & bahasa connection.php themes.php hooks.php plugins.php routes.php menus.php assets.php plugins_load()

connection.php memulai sesi, menyambung lewat mysqli memakai kredensial .env, memuat tbl_settings ke dalam konstanta seperti APP_NAME dan CURRENCY, lalu melogin pengguna saat ini beserta satu baris sidik jari perangkat. plugins_load() mem-boot setiap plugin aktif dan memicu hook plugins_loaded — di titik inilah kumpulan vertikal aktif yang sebenarnya baru diketahui, dan itulah sebabnya header.php memeriksa ulang flag pengaturan lama (shop, multivendor, auction, lottery) terhadap status plugin yang benar-benar aktif sesudahnya.

Panel admin tidak menduplikasi bootstrap ini — admin/includes/connection.php menetapkan konfigurasi sesi/error khusus admin lalu meng-include includes/connection.php yang sama di root.

Sistem plugin

Sebuah plugin adalah plugins/<slug>/plugin.php — metadata berupa komentar header yang diurai tanpa mengeksekusi filenya — ditambah plugin.json opsional untuk info katalog yang lebih lengkap. Plugin aktif disimpan sebagai array JSON di tbl_settings.active_plugins.

  • Kepemilikan tabel — setiap plugin mendefinisikan includes/schema.php miliknya sendiri, yang dipanggil saat aktivasi, memakai helper db_delta() yang idempoten (CREATE TABLE IF NOT EXISTS + ALTER TABLE ADD COLUMN yang hanya menambah). Satu plugin tidak pernah menyentuh tabel milik plugin lain.
  • Registri dimuat lebih duluadd_admin_page, add_route, add_cron_job, add_api_route, dan register_module semuanya didefinisikan sebelum plugin mana pun dimuat, jadi pemanggilan di level teratas sebuah plugin tidak akan pernah fatal walaupun plugin itu ternyata tidak aktif.
  • Penghapusan bersih — menghapus plugin akan menjalankan uninstall.php miliknya dan membuang foldernya; tidak boleh ada apa pun di luar plugins/<slug>/ yang me-require filenya secara mati, jadi bagian situs lainnya tetap berjalan meski plugin itu sudah tidak ada.

Sistem tema

Sebuah tema berada di assets/themes/<slug>/ — berisi manifest.php, theme.css, functions.php untuk hook tema, dan components/ opsional. Tema aktif disimpan di tbl_settings.active_theme, dengan editorial sebagai cadangan kalau tidak ada yang disetel.

Pencarian komponen memeriksa, secara berurutan: folder components/ milik tema aktif, lalu direktori komponen yang dideklarasikan sebuah plugin lewat register_module(), lalu components/ bersama di root. Praktisnya, versi default bersama cukup ada sekali di components/, dan tema mana pun — atau plugin vertikal yang aktif — bisa menimpa jalur komponen tertentu dengan salinannya sendiri.

Database

Prefiks tabel tbl_, mysqli mentah, sebagian besar memakai prepared statement. File SQL, diurutkan menurut otoritasnya:

  • database/core-schema.sql — hanya tabel kernel yang dipelihara manual; tabel vertikal/plugin sengaja tidak disertakan.
  • database/production.sql — dihasilkan otomatis (skema inti + rutin instalasi milik setiap plugin, di-dump dari database kosong). Inilah yang Anda impor untuk instalasi baru.
  • database/sandbox.sql — dataset demo/awal untuk pengembangan lokal.
  • database/migration.sql — skrip upgrade yang idempoten dan sudah digabung untuk instalasi yang sudah berjalan.
  • database/migrations/<slug>/up.sql (+ down.sql kalau bisa dibalik) — satu file untuk setiap migrasi.

Modul

Setiap modul ikut dalam instalasi yang sama dan bisa dinyalakan atau dimatikan sendiri-sendiri dari panel admin.

Lelang

Bidding langsung dengan portal penjual multi-penjual dan mesin komisi. Plugin inti: plugins/auction.

auction-anti-snipeauction-autobidderauction-buy-nowauction-notify-meauction-premiumauction-shippingauction-unlock

Lotere

Undian bertiket dengan jadwal, hadiah, dan notifikasi pemenang yang bisa dikonfigurasi. Plugin inti: plugins/lottery.

lottery-live-tickerlottery-print-ticket

Mystery box

Pool hadiah yang bisa dikonfigurasi lengkap dengan animasi pembukaan — pengguna membeli kotak dan langsung melihat apa yang mereka menangkan. Plugin: plugins/mystery-box.

Permainan & hadiah

Kluster arcade di dalam games/ ditambah plugin keterlibatan/penghasilan:

2048bamboo-fortuneclick-speedemoji-funhex-burstodd-one-outword-search
earn-gamesearn-daily-bonusearn-offerwallsearn-watch-earn

Toko & marketplace

Lapisan e-commerce multi-penjual dengan perkakas promosi dan merchandising. Plugin inti: plugins/shop, plugins/multivendor.

couponsgift-cardsshop-abandoned-cartshop-b2bshop-flash-salesshop-merchandisingshop-opsshop-shippingdigital-assetsesim-store

Dompet, koin & investasi

Satu dompet untuk seluruh platform yang dipakai bersama oleh semua modul.

finance-coin-pricingfinance-exchange-ratesfinance-tax-settingswallet-transferinvestwithdrawals

Referral & hadiah

referralsreferrals-multilevel

Autentikasi, kepercayaan & kepatuhan

google-loginfacebook-loginapple-loginemail-otprecaptchafraud-preventionrolesmembershipuser-impersonation

Utilitas

blogcachetawk-chatinsightsmanual-gateway-buildermobile-app-settings

Panel admin

Panel admin berada di dalam admin/ dan tidak menduplikasi bootstrap storefront — ia menetapkan konfigurasi sesi/error khusus admin, lalu meng-include includes/connection.php yang sama di root. Halaman didaftarkan lewat add_admin_page(), yang mengurus entri sidebar, pembatasan hak akses, CSRF, dan kerangka autentikasi; aksi JSON khusus admin didaftarkan lewat add_admin_ajax() dan disalurkan melalui admin/ajax.php?action=<slug>.

Katalog & konten

Item, banner, halaman, menu, blog.

Pembayaran

Pengelolaan gateway otomatis & manual, peninjauan pembayaran manual, ekspor pencairan dana.

Pengguna & penjual

Grup pengguna, peran, detail penjual, impersonasi.

Laporan & log

Ekspor transaksi/pesanan/pengguna, log cron, pelacakan error, log aktivitas admin.

Pemasaran

Kampanye email, templat, newsletter, notifikasi push, log notifikasi.

Plugin, tema & SEO

Aktifkan/nonaktifkan plugin dan tema, pengaturan SEO per halaman, pengaturan seluruh situs.

Tema storefront

Lima tema disertakan di dalam assets/themes/ dan bisa diganti per instalasi dari panel admin. Setiap tema menyimpan salinannya sendiri atas komponen bersama di dalam folder components/ miliknya.

Classic

Tampilan sederhana dan modern dengan kartu putih dan bayangan lembut — pilihan aman dan serbaguna untuk hampir semua jenis toko.

Editorial

Tampilan bersih bergaya majalah dengan nuansa kertas hangat dan tipografi tajam, untuk storefront yang rapi dan terpercaya.

Tema cadangan bawaan
Casino

Tema gelap yang berani dan mewah dengan aksen emas — dirancang agar terasa seru dan kelas atas.

Bazaar

Tampilan hangat dengan ornamen kaya yang terinspirasi pasar tradisional, lengkap dengan dukungan bahasa kanan-ke-kiri.

Halloween

Tampilan musiman yang seram dan meriah — latar ungu pekat dengan sorotan oranye labu yang menyala.

Payment gateway

38 gateway otomatis dimiliki oleh plugin — masing-masing berada di folder plugins/gateway-<slug>/ sendiri dan mendaftarkan dirinya ke kernel lewat add_payment_gateway(). Mengaktifkan salah satunya langsung jalan; tidak ada apa pun di dispatcher checkout (payment_processor.php) yang dipaku ke gateway tertentu.

Kartu & prosesor global
2CheckoutAmazon PayAuthorize.NetBlueSnapCheckout.comMollieNMIPayPalPayeerSkrillStripeVenmoWise
Prosesor regional & lokal
AamarpayBkashCashfreeCashmaalFlutterwaveGoCardlessInstamojoInTouchMercado PagoMidtransM-PesaNagadOpenPixPaystackPaytmPayURazorpaySSLCommerz
Mata uang kripto
BinanceBlockchain.comCoinbase CommerceCoinGateCoinPaymentsMoonPayNOWPayments
Manual (berbasis instruksi / QR)
UPIBank TransferPayTM QR

3 metode manual adalah baris gateway_type = 'manual' yang disemai kernel, tanpa kode init/verify untuk dikonfigurasi — ketiganya hanya menampilkan instruksi pembayaran atau kode QR. Plugin manual-gateway-builder memungkinkan admin menambah metode pembayaran manual kustom lain tanpa menyentuh kode.

Sebagian gateway (Stripe, Razorpay, Midtrans, Venmo) juga mendaftarkan hook render untuk alur checkout yang butuh JS sisi klien — bootstrap Stripe Checkout, atau SDK Razorpay/Midtrans/Braintree yang perlu ID pesanan atau token dibuat lebih dulu di sisi server. Semua gateway lain berjalan tanpa penyambungan tambahan di kernel sama sekali.

Lapisan API & AJAX

  • api/v1/ — REST API terautentikasi JWT untuk aplikasi mobile dan konsumen eksternal. api/v1/middleware/*.php memvalidasi header Authorization: Bearer <token>. Plugin menambahkan endpoint miliknya sendiri lewat add_api_route().
  • ajax/ — AJAX internal terautentikasi cookie sesi untuk JS milik storefront sendiri (keranjang, kupon, notifikasi). Tidak ada lapisan token — ia mengandalkan sesi PHP yang disiapkan connection.php.
  • Folder api/ lepas di level teratas — endpoint serba-serbi tanpa versi seperti geo_location.php, exchange-rate.php, dan offerwall_postback.php.

Aplikasi mobile

mobile/ adalah proyek Capacitor + Ionic terpisah — pembungkus WebView di sekitar situs live, bukan SPA berdiri sendiri dan bukan pula sekadar konsumen api/v1. File capacitor.config.ts-nya mengarahkan server.url ke domain Anda. Proyek ini punya package.json sendiri dan tidak di-build dari root proyek:

cd mobile npm run sync npm run open:ios npm run open:android

Update & migrasi

Ambil snapshot sebelum menjalankan database/migration.sql atau database/migrations/<slug>/up.sql mana pun terhadap database live:

mysqldump --single-transaction -u<user> -p<pass> <db> > pre-deploy-$(date +%Y%m%d-%H%M%S).sql

Sebagian besar migrasi menyertakan down.sql pasangannya untuk membalik satu perubahan itu saja. Beberapa migrasi yang mengubah data yang sudah ada, bukan sekadar menambah struktur, justru menyertakan down.sql yang menjelaskan kenapa file itu tidak melakukan apa-apa — untuk kasus seperti itu, pulihkan dari dump sebelum deploy kalau Anda perlu rollback.

Catatan keamanan

  • Ganti kredensial admin bawaan hasil seeding segera setelah impor (lihat Instalasi).
  • .env, connection.php, dan file log diblokir dari akses HTTP langsung oleh aturan .htaccess / nginx yang disertakan — jangan hapus aturan-aturan itu.
  • Konten yang diunggah disajikan dengan cara yang mencegahnya dieksekusi sebagai PHP, dan itu ditegakkan di level konfigurasi server web, bukan di level aplikasi.
  • Kredensial payment gateway dikonfigurasi per gateway dari panel admin dan disimpan di sisi server — tidak pernah terekspos ke storefront.

Pengujian

Tidak ada suite PHPUnit. composer test menjalankan bin/run-probes.php, yang mengumpulkan setiap file probe_*.php di dalam includes/_probes/ dan folder _probes/ milik masing-masing plugin, menjalankan tiap file sebagai subproses CLI lalu memeriksa exit code-nya.

composer test # run every probe php plugins/<slug>/_probes/probe_*.php # run a single probe directly php bin/run-probes.php --all # also run destructive probes (skipped by default)

Pertanyaan umum

Tidak. Lelang, lotere, mystery box, permainan, dan toko/marketplace masing-masing adalah plugin yang berdiri sendiri — aktifkan hanya yang dibutuhkan bisnis Anda, lalu nyalakan yang lain belakangan tanpa perlu instal ulang.
Bisa. Menghapus plugin akan menjalankan uninstaller milik plugin itu sendiri dan hanya membuang tabel dan file miliknya — fungsi inti situs memang dirancang agar tidak pernah bergantung pada keberadaan plugin tertentu.
MariaDB. Sebagian file migrasi memakai sintaks SQL khas MariaDB yang ditolak MySQL 8 biasa — pakai MariaDB baik di development maupun production.
38 plugin gateway otomatis (kartu, dompet digital, crypto, dan prosesor regional) ditambah 3 metode manual — UPI, Bank Transfer, dan PayTM QR — yang disemai oleh skema inti. Plugin Manual Gateway Builder memungkinkan Anda menambah metode manual lain tanpa menulis kode.

Dukungan & sumber daya

Masih mentok, atau butuh sesuatu yang tidak tercakup di halaman ini?