Документация · Текущая сборка

Документация PrizeX

Всё, что нужно, чтобы установить, настроить и запустить PrizeX — самостоятельно размещаемую платформу на PHP, на которой работают аукционы, лотерея, мистери-боксы, аркадные игры, мультипродавцовый магазин и экономика кошелька и монет. Эта страница описывает кодовую базу такой, какой она поставляется, а не маркетинговую сводку.

PHP 7.4+ MySQL / MariaDB Composer 38 плагинов платёжных шлюзов 5 тем витрины

Что такое PrizeX

PrizeX — платформа призов, игр и маркетплейса на PHP: аукционы, лотерея, мистери-боксы, набор аркадных игр, мультипродавцовый интернет-магазин и экономика кошелька и монет — всё в одном самостоятельно размещаемом приложении. В основе — архитектура плагинов и тем с панелью администратора и 38 плагинами платёжных шлюзов, которые закрывают карты, кошельки, криптовалюты и региональные процессинги, плюс 3 ручных способа оплаты, заведённых ядром.

Никакой привязки к SaaS: вы ставите платформу на свой хостинг, владеете базой данных и получаете обновления навсегда по лицензии. Каждое направление (аукционы, лотерея, мистери-боксы, игры, магазин) включается и отключается независимо из панели администратора — свежая установка может работать и как продукт с одним направлением, и как полный набор.

Архитектура
На плагинах и темах

Основной код никогда жёстко не зависит от плагина. Каждое направление, каждый платёжный шлюз и каждый вход через соцсети — это плагин в plugins/, который можно включить, отключить или удалить, не сломав остальной сайт.

Данные
MySQL / MariaDB, чистый mysqli

Префикс таблиц tbl_, без ORM, в основном подготовленные запросы. Каждый плагин владеет своими таблицами и мигрирует их сам через идемпотентный установщик db_delta().

На чём это работает

PrizeX работает на обычном shared-хостинге или VPS — особая настройка сервера не нужна, достаточно веб-сервера с поддержкой rewrite.

Среда выполнения
PHP 7.4+
расширения GD и cURL
База данных
MySQL / MariaDB
для миграций нужна MariaDB*
Зависимости
Composer
менеджер пакетов PHP
Веб-сервер
Apache / LiteSpeed
nginx поддерживается через пример конфигурации

* Несколько файлов в database/migrations/ используют расширение ADD COLUMN IF NOT EXISTS, которое есть только в MariaDB. Обычный MySQL 8.0/8.4 его отвергает — берите в качестве базы данных MariaDB, и в разработке, и на продакшене.

Как поднять свежую установку

Мастера установки для свежей настройки нет — вы импортируете схему напрямую и настраиваете файл окружения.

  1. Установите зависимости PHP:
    composer install
  2. Скопируйте шаблон файла окружения и впишите доступы к своей базе данных:
    cp .env.example .env
  3. Импортируйте database/production.sql в базу данных, указанную в вашем .env, — так создаётся полная схема.
  4. Замените предустановленную учётную запись администратора (см. врезку ниже), затем войдите по адресу /admin/.
Не входите под предустановленной учётной записью. В database/production.sql есть строка tbl_admin (admin@wowcodes.in), хеш пароля которой одинаков на каждой установке. Удалите её и заведите свою до запуска в бой:
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);

Для локальной разработки хватает встроенного сервера PHP, без Apache: php -S localhost:8000 router.php — учтите, что этот сервер полностью игнорирует .htaccess, поэтому router.php вручную повторяет те же правила маршрутизации (см. Настройка веб-сервера).

Переменные окружения

Все настройки, зависящие от окружения, лежат в .env и загружаются через vlucas/phpdotenv. Скопируйте .env.example в .env (этот файл не попадает в git) и пропишите реальные значения для каждого окружения — как минимум доступы к базе данных, ещё до импорта схемы.

Общие настройки сайта, не зависящие от окружения (название приложения, валюта, активные плагины, активная тема и переключатели по каждому направлению), хранятся в базе данных, в tbl_settings, и управляются из панели администратора, а не через файлы.

Настройка веб-сервера

Правила маршрутизации и безопасности — человекопонятные URL, запрет прямого доступа к .env/connection.php/логам и защита от выполнения загруженных файлов как PHP — заданы в файлах .htaccess по всему проекту. Apache и LiteSpeed/OpenLiteSpeed читают их нативно.

На nginx используйте nginx.conf.example: там все те же правила собраны в блок server{} для nginx — поправьте server_name, root и сокет PHP-FPM под своё окружение.

Держите эти три файла синхронными. .htaccess (продакшен), router.php (локальный dev-сервер php -S) и nginx.conf.example (nginx) реализуют одни и те же правила маршрутизации независимо друг от друга. Новый человекопонятный URL означает правку во всех трёх.

Архитектура запроса

Каждая страница витрины (index.php, item.php, …) стартует через includes/header.php в таком порядке:

Геолокация и язык connection.php themes.php hooks.php plugins.php routes.php menus.php assets.php plugins_load()

connection.php запускает сессию, подключается через mysqli с доступами из .env, загружает tbl_settings в константы вроде APP_NAME и CURRENCY и авторизует текущего пользователя вместе со строкой отпечатка устройства. plugins_load() поднимает каждый активный плагин и вызывает хук plugins_loaded — именно в этот момент становится известен реальный текущий набор активных направлений, поэтому header.php уже после этого сверяет старые флаги настроек (shop, multivendor, auction, lottery) с фактическим состоянием активности плагинов.

Панель администратора не дублирует этот запуск — admin/includes/connection.php задаёт свои настройки сессии и ошибок, а затем подключает тот же корневой includes/connection.php.

Система плагинов

Плагин — это plugins/<slug>/plugin.php, метаданные в заголовочном комментарии, которые разбираются без выполнения файла, плюс необязательный plugin.json с более подробной информацией для каталога. Активные плагины хранятся JSON-массивом в tbl_settings.active_plugins.

  • Владение таблицами — каждый плагин описывает свой includes/schema.php, который вызывается при активации и использует идемпотентный помощник db_delta() (CREATE TABLE IF NOT EXISTS плюс только добавляющий ALTER TABLE ADD COLUMN). Плагин никогда не трогает таблицы другого плагина.
  • Реестры загружаются первымиadd_admin_page, add_route, add_cron_job, add_api_route и register_module определяются до загрузки любого плагина, поэтому вызовы на верхнем уровне плагина никогда не приводят к фатальной ошибке, даже если плагин в итоге останется неактивным.
  • Чистое удаление — при удалении плагина запускается его uninstall.php и убирается его папка; ничто за пределами plugins/<slug>/ не должно жёстко подключать его файлы, поэтому остальной сайт продолжает работать и без плагина.

Система тем

Тема живёт в assets/themes/<slug>/ — это manifest.php, theme.css, functions.php для хуков темы и необязательная папка components/. Активная тема хранится в tbl_settings.active_theme; если она не задана, подставляется запасная editorial.

Компонент ищется по порядку: сначала в собственной папке components/ активной темы, затем в каталоге компонентов, объявленном плагином через register_module(), затем в общей корневой components/. На практике это значит, что общий вариант по умолчанию лежит один раз в components/, а любая тема — или активный плагин направления — может переопределить конкретный путь компонента своей копией.

База данных

Префикс таблиц tbl_, чистый mysqli, в основном подготовленные запросы. Файлы SQL в порядке приоритета:

  • database/core-schema.sql — поддерживается вручную, только таблицы ядра; таблицы направлений и плагинов сюда намеренно не включены.
  • database/production.sql — генерируется (схема ядра плюс собственная процедура установки каждого плагина, выгруженные из пустой временной базы). Именно этот файл вы импортируете при свежей установке.
  • database/sandbox.sql — демонстрационный набор данных для локальной разработки.
  • database/migration.sql — сводный идемпотентный скрипт обновления для уже работающих установок.
  • database/migrations/<slug>/up.sql (плюс down.sql там, где откат возможен) — по одному файлу на каждую отдельную миграцию.

Модули

Все модули поставляются в одной установке и включаются независимо друг от друга из панели администратора.

Аукционы

Живые торги с мультипродавцовым кабинетом продавца и расчётом комиссий. Основной плагин: plugins/auction.

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

Лотерея

Тиражи по билетам с настраиваемым расписанием, призами и уведомлением победителей. Основной плагин: plugins/lottery.

lottery-live-tickerlottery-print-ticket

Мистери-бокс

Настраиваемые призовые фонды с анимацией вскрытия — пользователь покупает коробку и сразу видит, что ему выпало. Плагин: plugins/mystery-box.

Игры и награды

Набор аркадных игр в games/ плюс плагины вовлечения и заработка:

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

Магазин и маркетплейс

Мультипродавцовый слой электронной коммерции с инструментами акций и мерчандайзинга. Основные плагины: plugins/shop, plugins/multivendor.

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

Кошелёк, монеты и инвестиции

Единый кошелёк платформы, общий для всех модулей.

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

Рефералы и награды

referralsreferrals-multilevel

Авторизация, доверие и комплаенс

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

Утилиты

blogcachetawk-chatinsightsmanual-gateway-buildermobile-app-settings

Панель администратора

Панель администратора живёт в admin/ и не дублирует запуск витрины — она задаёт свои настройки сессии и ошибок, а затем подключает тот же корневой includes/connection.php. Страницы регистрируются через add_admin_page(), который берёт на себя пункт бокового меню, проверку прав, CSRF и обвязку авторизации; JSON-действия только для администратора регистрируются через add_admin_ajax() и вызываются по admin/ajax.php?action=<slug>.

Каталог и контент

Товары, баннеры, страницы, меню, блог.

Платежи

Управление автоматическими и ручными шлюзами, проверка ручных платежей, выгрузка выплат.

Пользователи и продавцы

Группы пользователей, роли, данные продавцов, вход от имени пользователя.

Отчёты и логи

Выгрузки транзакций, заказов и пользователей, логи cron, отслеживание ошибок, журнал действий администратора.

Маркетинг

Email-рассылки, шаблоны, новостные письма, push-уведомления, журнал уведомлений.

Плагины, темы и SEO

Включение и отключение плагинов и тем, настройки SEO для каждой страницы, общие настройки сайта.

Темы витрины

В комплекте пять тем в assets/themes/, они переключаются для каждой установки из панели администратора. Каждая тема держит свою копию общих компонентов в собственной папке components/.

Classic

Простой современный вид с белыми карточками и мягкими тенями — безопасный универсальный выбор почти для любого магазина.

Editorial

Чистый журнальный стиль с тёплыми бумажными тонами и чёткой типографикой — для аккуратной витрины, вызывающей доверие.

Тема по умолчанию
Casino

Смелая роскошная тёмная тема с золотыми акцентами — сделана так, чтобы ощущаться азартной и дорогой.

Bazaar

Тёплый, богато украшенный вид в духе традиционных рынков, с поддержкой языков с письмом справа налево.

Halloween

Жутковатый праздничный сезонный вид — глубокий фиолетовый фон со светящимися тыквенно-оранжевыми акцентами.

Платёжные шлюзы

38 автоматических шлюзов принадлежат плагинам — каждый лежит в своей папке plugins/gateway-<slug>/ и регистрируется в ядре через add_payment_gateway(). Достаточно активировать шлюз, и он работает; в диспетчере оформления заказа (payment_processor.php) нет ничего, зашитого под конкретный шлюз.

Карты и глобальные процессинги
2CheckoutAmazon PayAuthorize.NetBlueSnapCheckout.comMollieNMIPayPalPayeerSkrillStripeVenmoWise
Региональные и локальные процессинги
AamarpayBkashCashfreeCashmaalFlutterwaveGoCardlessInstamojoInTouchMercado PagoMidtransM-PesaNagadOpenPixPaystackPaytmPayURazorpaySSLCommerz
Криптовалюты
BinanceBlockchain.comCoinbase CommerceCoinGateCoinPaymentsMoonPayNOWPayments
Ручные (инструкция / QR-код)
UPIBank TransferPayTM QR

3 ручных способа — это заведённые ядром строки с gateway_type = 'manual', без кода init/verify, который надо было бы настраивать: они просто показывают инструкцию по оплате или QR-код. Плагин manual-gateway-builder позволяет администратору добавить свои ручные способы оплаты, не трогая код.

Некоторые шлюзы (Stripe, Razorpay, Midtrans, Venmo) дополнительно регистрируют хук render — для сценариев оформления заказа, которым нужен клиентский JS: загрузчик Stripe Checkout или SDK Razorpay/Midtrans/Braintree, которому сначала нужен идентификатор заказа или токен, созданный на сервере. Любому другому шлюзу никакой дополнительной обвязки в ядре не требуется.

Слои API и AJAX

  • api/v1/ — REST API с авторизацией по JWT для мобильного приложения и внешних потребителей. api/v1/middleware/*.php проверяет заголовок Authorization: Bearer <token>. Плагины добавляют свои эндпоинты через add_api_route().
  • ajax/ — внутренний AJAX с авторизацией по сессионной куке для собственного JS витрины (корзина, купоны, уведомления). Слоя токенов нет — всё опирается на сессию PHP, которую поднимает connection.php.
  • Разрозненный api/ в корне — разные неверсионированные эндпоинты вроде geo_location.php, exchange-rate.php и offerwall_postback.php.

Мобильное приложение

mobile/ — отдельный проект на Capacitor и Ionic: обёртка WebView вокруг живого сайта, а не самостоятельное SPA и не только потребитель api/v1. В его capacitor.config.ts параметр server.url указывает на ваш домен. У него свой package.json, и из корня проекта он не собирается:

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

Обновления и миграции

Сделайте резервную копию, прежде чем выполнять database/migration.sql или любой database/migrations/<slug>/up.sql на живой базе данных:

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

К большинству миграций прилагается парный down.sql, который откатывает ровно это одно изменение. У немногих, что преобразуют существующие данные, а не просто добавляют структуру, вместо этого лежит down.sql с пояснением, почему он ничего не делает, — для них при откате восстанавливайте дамп, снятый до деплоя.

Заметки по безопасности

  • Смените предустановленные доступы администратора сразу после импорта (см. Установка).
  • .env, connection.php и файлы логов закрыты от прямого доступа по HTTP правилами .htaccess / nginx из комплекта — не убирайте эти правила.
  • Загруженные файлы отдаются так, что не могут выполниться как PHP, — это обеспечивается на уровне конфигурации веб-сервера, а не приложения.
  • Доступы к платёжным шлюзам настраиваются отдельно для каждого шлюза в панели администратора и хранятся на сервере — на витрину они не попадают никогда.

Тестирование

Набора PHPUnit нет. composer test запускает bin/run-probes.php, который собирает каждый файл probe_*.php в includes/_probes/ и в собственной папке _probes/ каждого плагина, запускает их по одному отдельным процессом CLI и проверяет код возврата.

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)

Частые вопросы

Нет. Аукционы, лотерея, мистери-боксы, игры и магазин с маркетплейсом — независимые плагины: включайте только то, что нужно вашему бизнесу, а остальное добавите позже без переустановки.
Да. При удалении плагина запускается его собственный деинсталлятор, который убирает только его таблицы и файлы, — основная функциональность сайта спроектирована так, чтобы никогда не зависеть от наличия конкретного плагина.
MariaDB. Некоторые файлы миграций используют SQL-синтаксис, доступный только в MariaDB, — обычный MySQL 8 его отвергает. Берите MariaDB и в разработке, и на продакшене.
38 плагинов автоматических шлюзов (карты, кошельки, криптовалюты и региональные процессинги) плюс 3 ручных способа — UPI, банковский перевод и PayTM QR, — заведённых базовой схемой. Плагин Manual Gateway Builder позволяет добавить и другие ручные способы без единой строки кода.

Поддержка и ресурсы

Всё ещё в тупике или нужно то, чего нет на этой странице?