Dokumentasi · Binaan semasa

Dokumentasi PrizeX

Semua yang anda perlukan untuk memasang, mengkonfigurasi dan menjalankan PrizeX — platform PHP self-hosted di sebalik lelongan, loteri, kotak misteri, permainan arked, kedai berbilang penjual dan ekonomi dompet/syiling. Halaman ini menggambarkan asas kod sebagaimana ia dihantar, bukan ringkasan pemasaran.

PHP 7.4+ MySQL / MariaDB Composer 38 plugin get laluan pembayaran 5 tema kedai

Apa itu PrizeX

PrizeX ialah platform hadiah, permainan dan pasaran berasaskan PHP: lelongan, loteri, kotak misteri, kelompok permainan arked, kedai e-dagang berbilang penjual dan ekonomi dompet/syiling — semuanya dalam satu aplikasi self-hosted. Ia dihantar dengan seni bina plugin/tema, panel admin dan 38 plugin get laluan pembayaran yang merangkumi kad, dompet, kripto dan pemproses serantau, serta 3 kaedah pembayaran manual yang disemai oleh kernel.

Tiada kunci masuk SaaS: anda memasangnya pada hosting anda sendiri, memiliki pangkalan data, dan mendapat kemas kini seumur hidup dengan lesen itu. Setiap vertikal (lelongan, loteri, kotak misteri, permainan, kedai) boleh dihidupkan atau dimatikan secara berasingan dari panel admin — pemasangan baharu boleh berjalan sebagai produk satu vertikal atau suit penuh.

Seni bina
Dipacu plugin & tema

Kod teras tidak pernah bergantung mati pada sesebuah plugin. Setiap vertikal, get laluan pembayaran dan log masuk sosial ialah plugin di bawah plugins/ yang boleh diaktifkan, dinyahaktifkan atau dipadamkan tanpa merosakkan bahagian lain laman ini.

Data
MySQL / MariaDB, mysqli mentah

Awalan jadual tbl_, tiada ORM, kebanyakannya prepared statement. Setiap plugin memiliki dan memigrasikan jadualnya sendiri melalui pemasang db_delta() yang idempoten.

Di mana ia berjalan

PrizeX berjalan pada hosting kongsi biasa atau VPS — tiada konfigurasi pelayan khas selain pelayan web yang mampu menulis semula URL.

Masa jalan
PHP 7.4+
Sambungan GD & cURL
Pangkalan data
MySQL / MariaDB
MariaDB diperlukan untuk migrasi*
Kebergantungan
Composer
Pengurus pakej PHP
Pelayan web
Apache / LiteSpeed
nginx disokong melalui contoh konfigurasi

* Beberapa fail di bawah database/migrations/ menggunakan sambungan ADD COLUMN IF NOT EXISTS yang hanya ada pada MariaDB. MySQL 8.0/8.4 biasa menolaknya — gunakan MariaDB untuk pangkalan data, dalam pembangunan dan juga produksi.

Menjalankan pemasangan yang baharu

Tiada wizard pemasangan untuk persediaan baharu — anda mengimport skema secara terus dan mengkonfigurasi fail persekitaran.

  1. Pasang kebergantungan PHP:
    composer install
  2. Salin templat persekitaran dan isikan kelayakan pangkalan data anda:
    cp .env.example .env
  3. Import database/production.sql ke dalam pangkalan data yang dinamakan dalam .env anda — ini mencipta skema penuh.
  4. Gantikan akaun admin yang disemai (lihat kotak makluman di bawah), kemudian log masuk di /admin/.
Jangan log masuk dengan akaun yang disemai. database/production.sql membawa satu baris tbl_admin (admin@wowcodes.in) yang cincangan kata laluannya sama pada setiap pemasangan. Padamkannya dan masukkan akaun anda sendiri sebelum beroperasi secara langsung:
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 pembangunan setempat, pelayan PHP terbina dalam berfungsi tanpa Apache: php -S localhost:8000 router.php — ambil perhatian bahawa pelayan ini mengabaikan .htaccess sepenuhnya, jadi router.php melaksanakan semula peraturan penghalaan yang sama secara manual (lihat Persediaan pelayan web).

Pembolehubah persekitaran

Semua tetapan khusus persekitaran berada dalam .env, dimuatkan melalui vlucas/phpdotenv. Salin .env.example kepada .env (diabaikan oleh git) dan tetapkan nilai sebenar bagi setiap persekitaran — sekurang-kurangnya kelayakan pangkalan data, sebelum skema diimport.

Tetapan seluruh laman yang bukan khusus persekitaran (nama aplikasi, mata wang, plugin aktif, tema aktif dan suis bagi setiap vertikal) disimpan dalam pangkalan data, di dalam tbl_settings, dan diurus dari panel admin dan bukannya di dalam fail.

Persediaan pelayan web

Peraturan penghalaan dan keselamatan — URL kemas, menyekat akses terus kepada .env/connection.php/log, dan menghalang kandungan yang dimuat naik daripada dilaksanakan sebagai PHP — ditakrifkan dalam fail .htaccess di seluruh projek. Apache dan LiteSpeed/OpenLiteSpeed membacanya secara natif.

Pada nginx, gunakan nginx.conf.example, yang mencerminkan setiap satu peraturan itu sebagai blok server{} nginx — laraskan server_name, root dan soket PHP-FPM mengikut persekitaran anda.

Pastikan ketiga-tiganya selaras. .htaccess (produksi), router.php (pelayan pembangunan php -S setempat) dan nginx.conf.example (nginx) masing-masing melaksanakan semula peraturan penghalaan yang sama secara berasingan. Menambah laluan URL kemas yang baharu bermakna anda perlu mengemas kini ketiga-tiganya.

Seni bina permintaan

Setiap halaman kedai (index.php, item.php, …) dimulakan melalui includes/header.php, dalam susunan ini:

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

connection.php memulakan sesi, menyambung melalui mysqli menggunakan kelayakan .env, memuatkan tbl_settings ke dalam pemalar seperti APP_NAME dan CURRENCY, serta melog masuk pengguna semasa berserta satu baris cap jari peranti. plugins_load() memulakan setiap plugin aktif dan memicu hook plugins_loaded — di sinilah set sebenar vertikal aktif semasa akhirnya diketahui, dan sebab itulah header.php menyemak semula bendera tetapan lama (kedai, berbilang penjual, lelongan, loteri) terhadap keadaan sebenar plugin aktif selepas itu.

Panel admin tidak menduakan proses permulaan ini — admin/includes/connection.php menetapkan konfigurasi sesi/ralat khusus admin dan kemudian memuatkan includes/connection.php akar yang sama.

Sistem plugin

Sebuah plugin ialah plugins/<slug>/plugin.php — metadata dalam komen pengepala yang dihuraikan tanpa melaksanakan fail itu — berserta plugin.json pilihan untuk maklumat katalog yang lebih kaya. Plugin aktif disimpan sebagai tatasusunan JSON dalam tbl_settings.active_plugins.

  • Pemilikan jadual — setiap plugin mentakrifkan includes/schema.php miliknya sendiri, yang dipanggil semasa pengaktifan, menggunakan pembantu db_delta() yang idempoten (CREATE TABLE IF NOT EXISTS + ALTER TABLE ADD COLUMN yang hanya menambah). Sesebuah plugin tidak pernah menyentuh jadual plugin lain.
  • Daftar dimuatkan dahuluadd_admin_page, add_route, add_cron_job, add_api_route dan register_module semuanya ditakrifkan sebelum mana-mana plugin dimuatkan, jadi panggilan peringkat atas sesebuah plugin tidak pernah menyebabkan ralat maut walaupun plugin itu akhirnya tidak aktif.
  • Pembuangan yang bersih — memadamkan plugin akan menjalankan uninstall.php miliknya dan membuang foldernya; tiada apa-apa di luar plugins/<slug>/ yang sepatutnya bergantung mati pada failnya, jadi bahagian lain laman ini terus berfungsi walaupun plugin itu sudah tiada.

Sistem tema

Sebuah tema berada di assets/themes/<slug>/ — satu manifest.php, theme.css, functions.php untuk hook tema, dan components/ pilihan. Tema aktif disimpan dalam tbl_settings.active_theme, dengan editorial sebagai sandaran jika tiada yang ditetapkan.

Peleraian komponen menyemak mengikut susunan ini: folder components/ milik tema aktif, kemudian direktori komponen yang diisytiharkan oleh register_module() sesebuah plugin, kemudian components/ akar yang dikongsi. Dalam amalan, ini bermakna lalai yang dikongsi hanya wujud sekali di dalam components/, dan mana-mana tema — atau plugin vertikal yang aktif — boleh menggantikan laluan komponen tertentu dengan salinannya sendiri.

Pangkalan data

Awalan jadual tbl_, mysqli mentah, kebanyakannya prepared statement. Fail SQL, mengikut susunan kuasanya:

  • database/core-schema.sql — jadual kernel sahaja, diselenggara secara manual; jadual vertikal/plugin sengaja dikecualikan.
  • database/production.sql — dijana (skema teras + rutin pemasangan setiap plugin, dieksport daripada pangkalan data sementara). Inilah yang anda import untuk pemasangan baharu.
  • database/sandbox.sql — set data demo/benih untuk pembangunan setempat.
  • database/migration.sql — skrip naik taraf bersepadu dan idempoten untuk pemasangan sedia ada.
  • database/migrations/<slug>/up.sql (+ down.sql jika boleh diterbalikkan) — satu fail bagi setiap migrasi individu.

Modul

Setiap modul dihantar dalam pemasangan yang sama dan boleh dihidup atau dimatikan secara berasingan dari panel admin.

Lelongan

Pembidaan langsung dengan portal penjual berbilang penjual dan enjin komisen. Plugin teras: plugins/auction.

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

Loteri

Cabutan bertiket dengan jadual, hadiah dan pemberitahuan pemenang yang boleh dikonfigurasikan. Plugin teras: plugins/lottery.

lottery-live-tickerlottery-print-ticket

Kotak misteri

Kolam hadiah yang boleh dikonfigurasikan dengan animasi pendedahan — pengguna membeli kotak dan terus melihat apa yang mereka menang. Plugin: plugins/mystery-box.

Permainan & ganjaran

Kelompok permainan arked di bawah games/ berserta plugin penglibatan/pendapatan:

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

Kedai & pasaran

Lapisan e-dagang berbilang penjual dengan alat promosi dan penyusunan barangan. Plugin teras: plugins/shop, plugins/multivendor.

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

Dompet, syiling & pelaburan

Dompet seluruh platform yang dikongsi merentas setiap modul.

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

Rujukan & ganjaran

referralsreferrals-multilevel

Pengesahan, kepercayaan & pematuhan

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

Utiliti

blogcachetawk-chatinsightsmanual-gateway-buildermobile-app-settings

Panel admin

Panel admin berada di bawah admin/ dan tidak menduakan proses permulaan kedai — ia menetapkan konfigurasi sesi/ralat khusus admin, kemudian memuatkan includes/connection.php akar yang sama. Halaman didaftarkan melalui add_admin_page(), yang menguruskan entri bar sisi, pengehadan keupayaan, CSRF dan rangka pengesahan; tindakan JSON khusus admin pula didaftarkan melalui add_admin_ajax() dan dihantar melalui admin/ajax.php?action=<slug>.

Katalog & kandungan

Item, sepanduk, halaman, menu, blog.

Pembayaran

Pengurusan get laluan automatik & manual, semakan pembayaran manual, eksport pembayaran keluar.

Pengguna & penjual

Kumpulan pengguna, peranan, butiran penjual, penyamaran.

Laporan & log

Eksport transaksi/pesanan/pengguna, log cron, penjejakan ralat, log aktiviti admin.

Pemasaran

Kempen e-mel, templat, surat berita, pemberitahuan tolak, log pemberitahuan.

Plugin, tema & SEO

Aktifkan/nyahaktifkan plugin dan tema, tetapan SEO bagi setiap halaman, tetapan seluruh laman.

Tema kedai

Lima tema dihantar di bawah assets/themes/, boleh ditukar bagi setiap pemasangan dari panel admin. Setiap tema menyimpan salinan komponen kongsinya sendiri di bawah folder components/ miliknya.

Classic

Rupa yang ringkas dan moden dengan kad putih serta bayang lembut — pilihan selamat dan serba boleh untuk hampir apa-apa jenis kedai.

Editorial

Rupa bersih bergaya majalah dengan ton kertas suam dan tipografi yang tajam, untuk kedai yang kemas dan meyakinkan.

Tema sandaran lalai
Casino

Tema gelap yang berani dan mewah dengan aksen emas — direka supaya terasa mendebarkan dan berkelas tinggi.

Bazaar

Rupa yang suam dan penuh hiasan, diilhamkan daripada pasar tradisional, dengan sokongan bahasa kanan ke kiri.

Halloween

Rupa bermusim yang seram dan meriah — latar ungu pekat dengan serlahan jingga labu yang bercahaya.

Get laluan pembayaran

38 get laluan automatik dimiliki oleh plugin — setiap satu berada dalam foldernya sendiri, plugins/gateway-<slug>/, dan mendaftarkan dirinya dengan kernel melalui add_payment_gateway(). Mengaktifkan satu get laluan terus berfungsi; tiada apa-apa dalam penghantar pembayaran (payment_processor.php) yang dikodkan tetap kepada get laluan tertentu.

Kad & pemproses global
2CheckoutAmazon PayAuthorize.NetBlueSnapCheckout.comMollieNMIPayPalPayeerSkrillStripeVenmoWise
Pemproses serantau & tempatan
AamarpayBkashCashfreeCashmaalFlutterwaveGoCardlessInstamojoInTouchMercado PagoMidtransM-PesaNagadOpenPixPaystackPaytmPayURazorpaySSLCommerz
Mata wang kripto
BinanceBlockchain.comCoinbase CommerceCoinGateCoinPaymentsMoonPayNOWPayments
Manual (berasaskan arahan / QR)
UPIBank TransferPayTM QR

3 kaedah manual itu ialah baris gateway_type = 'manual' yang disemai oleh kernel, tanpa kod init/verify untuk dikonfigurasikan — ia hanya memaparkan arahan pembayaran atau kod QR. Plugin manual-gateway-builder membolehkan admin menambah lagi kaedah pembayaran manual tersuai tanpa menyentuh kod.

Sesetengah get laluan (Stripe, Razorpay, Midtrans, Venmo) turut mendaftarkan hook render untuk aliran pembayaran yang memerlukan JS di sebelah klien — bootstrap Stripe Checkout, atau SDK Razorpay/Midtrans/Braintree yang memerlukan ID pesanan atau token dijana di sebelah pelayan terlebih dahulu. Setiap get laluan lain berfungsi tanpa sebarang pendawaian kernel tambahan.

Lapisan API & AJAX

  • api/v1/ — REST API yang disahkan dengan JWT untuk aplikasi mudah alih dan pengguna luaran. api/v1/middleware/*.php mengesahkan pengepala Authorization: Bearer <token>. Plugin menambah titik akhir mereka sendiri melalui add_api_route().
  • ajax/ — AJAX dalaman yang disahkan melalui kuki sesi untuk JS milik kedai itu sendiri (troli, kupon, pemberitahuan). Tiada lapisan token — ia bergantung pada sesi PHP yang disediakan oleh connection.php.
  • api/ peringkat atas yang longgar — pelbagai titik akhir tanpa versi seperti geo_location.php, exchange-rate.php dan offerwall_postback.php.

Aplikasi mudah alih

mobile/ ialah projek Capacitor + Ionic yang berasingan — pembalut WebView di sekeliling laman langsung, bukan SPA berdiri sendiri dan bukan semata-mata pengguna api/v1. capacitor.config.ts miliknya mengarahkan server.url ke domain anda. Ia mempunyai package.json sendiri dan tidak dibina dari akar projek:

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

Kemas kini & migrasi

Ambil syot kilat sebelum menjalankan database/migration.sql atau mana-mana database/migrations/<slug>/up.sql terhadap pangkalan data langsung:

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

Kebanyakan migrasi disertakan down.sql yang sepadan untuk mengundurkan satu perubahan itu sahaja. Beberapa migrasi yang mengubah data sedia ada dan bukan sekadar menambah struktur pula disertakan down.sql yang mendokumenkan sebab ia tidak melakukan apa-apa — bagi migrasi tersebut, pulihkan daripada salinan pangkalan data yang diambil sebelum penggunaan jika anda perlu berundur.

Nota keselamatan

  • Tukar kelayakan admin yang disemai serta-merta selepas import (lihat Pemasangan).
  • .env, connection.php dan fail log disekat daripada akses HTTP terus oleh peraturan .htaccess / nginx yang disertakan — jangan buang peraturan tersebut.
  • Kandungan yang dimuat naik disajikan dengan cara yang menghalangnya daripada dilaksanakan sebagai PHP, dikuatkuasakan pada peringkat konfigurasi pelayan web, bukan peringkat aplikasi.
  • Kelayakan get laluan pembayaran dikonfigurasikan bagi setiap get laluan dari panel admin dan disimpan di sebelah pelayan — tidak pernah didedahkan kepada kedai.

Pengujian

Tiada suite PHPUnit. composer test menjalankan bin/run-probes.php, yang menghimpunkan setiap fail probe_*.php di bawah includes/_probes/ dan folder _probes/ milik setiap plugin, menjalankan setiap satu sebagai subproses CLI dan menyemak kod keluarnya.

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)

Soalan lazim

Tidak. Lelongan, loteri, kotak misteri, permainan dan kedai/pasaran masing-masing ialah plugin yang berasingan — aktifkan hanya apa yang diperlukan oleh perniagaan anda, dan hidupkan yang lain kemudian tanpa perlu memasang semula.
Boleh. Memadamkan plugin akan menjalankan penyahpasangnya sendiri dan membuang jadual serta failnya sendiri sahaja — fungsi teras laman direka supaya tidak pernah bergantung pada kehadiran mana-mana plugin tertentu.
MariaDB. Sesetengah fail migrasi menggunakan sintaks SQL khusus MariaDB yang ditolak oleh MySQL 8 biasa — gunakan MariaDB dalam pembangunan dan juga produksi.
38 plugin get laluan automatik (kad, dompet, kripto dan pemproses serantau) serta 3 kaedah manual — UPI, Pemindahan Bank dan PayTM QR — yang disemai oleh skema teras. Plugin Manual Gateway Builder membolehkan anda menambah lagi kaedah manual tanpa kod.

Sokongan & sumber

Masih tersekat, atau perlukan sesuatu yang tidak diliputi oleh halaman ini?