Documentação · Build atual

Documentação do PrizeX

Tudo o que você precisa para instalar, configurar e rodar o PrizeX — a plataforma PHP auto-hospedada por trás de leilões, loteria, caixas misteriosas, jogos de arcade, uma loja multivendedor e uma economia de carteira/moedas. Esta página reflete o código como ele é entregue, não um resumo de marketing.

PHP 7.4+ MySQL / MariaDB Composer 38 plugins de gateway de pagamento 5 temas de loja

O que é o PrizeX

O PrizeX é uma plataforma de prêmios, jogos e marketplace feita em PHP: leilões, loteria, caixas misteriosas, um conjunto de jogos de arcade, uma loja de e-commerce multivendedor e uma economia de carteira/moedas — tudo em uma única aplicação auto-hospedada. Vem com uma arquitetura de plugins e temas, um painel administrativo e 38 plugins de gateway de pagamento cobrindo cartões, carteiras, cripto e processadores regionais, além de 3 métodos de pagamento manuais semeados pelo kernel.

Não existe amarra de SaaS: você instala na sua própria hospedagem, é dono do banco de dados e recebe atualizações vitalícias na licença. Cada vertical (leilões, loteria, caixas misteriosas, jogos, loja) pode ser ligada ou desligada de forma independente pelo painel administrativo — uma instalação nova pode rodar como um produto de uma vertical só ou como a suíte completa.

Arquitetura
Movida a plugins e temas

O código principal nunca tem dependência rígida de um plugin. Toda vertical, gateway de pagamento e login social é um plugin dentro de plugins/ que pode ser ativado, desativado ou excluído sem quebrar o resto do site.

Dados
MySQL / MariaDB, mysqli puro

Prefixo de tabela tbl_, sem ORM, quase tudo com prepared statements. Cada plugin é dono das próprias tabelas e faz a migração delas por um instalador idempotente com db_delta().

Onde ele roda

O PrizeX roda em hospedagem compartilhada comum ou em VPS — sem configuração especial de servidor além de um servidor web capaz de reescrever URLs.

Ambiente de execução
PHP 7.4+
Extensões GD e cURL
Banco de dados
MySQL / MariaDB
MariaDB obrigatório para as migrações*
Dependências
Composer
Gerenciador de pacotes do PHP
Servidor web
Apache / LiteSpeed
nginx suportado via exemplo de configuração

* Vários arquivos em database/migrations/ usam a extensão ADD COLUMN IF NOT EXISTS, exclusiva do MariaDB. O MySQL 8.0/8.4 puro a rejeita — use MariaDB no banco de dados, tanto em desenvolvimento quanto em produção.

Como colocar uma instalação nova no ar

Não existe assistente de instalação para uma configuração nova — você importa o schema direto e configura o arquivo de ambiente.

  1. Instale as dependências do PHP:
    composer install
  2. Copie o modelo de ambiente e preencha as credenciais do seu banco de dados:
    cp .env.example .env
  3. Importe o database/production.sql no banco de dados indicado no seu .env — isso cria o schema completo.
  4. Substitua a conta de administrador semeada (veja o aviso abaixo) e faça login em /admin/.
Não faça login com a conta semeada. O database/production.sql traz uma linha em tbl_admin (admin@wowcodes.in) cujo hash de senha é idêntico em toda instalação. Exclua essa linha e insira a sua antes de ir ao ar:
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);

Para desenvolvimento local, o servidor embutido do PHP funciona sem Apache: php -S localhost:8000 router.php — repare que esse servidor ignora o .htaccess por completo, então o router.php reimplementa as mesmas regras de roteamento na mão (veja Configuração do servidor web).

Variáveis de ambiente

Todas as configurações específicas de ambiente ficam no .env, carregado via vlucas/phpdotenv. Copie o .env.example para .env (ignorado pelo git) e defina valores reais para cada ambiente — as credenciais do banco de dados, no mínimo, antes de importar o schema.

As configurações gerais do site que não dependem do ambiente (nome do app, moeda, plugins ativos, tema ativo e os interruptores de cada vertical) ficam no banco de dados, na tbl_settings, e são gerenciadas pelo painel administrativo, não em arquivos.

Configuração do servidor web

As regras de roteamento e segurança — URLs amigáveis, bloqueio de acesso direto a .env/connection.php/logs e a proteção que impede o conteúdo enviado de rodar como PHP — são definidas em arquivos .htaccess espalhados pelo projeto. Apache e LiteSpeed/OpenLiteSpeed leem esses arquivos nativamente.

No nginx, use o nginx.conf.example, que espelha cada uma dessas regras em um bloco server{} do nginx — ajuste o server_name, o root e o socket do PHP-FPM para o seu ambiente.

Mantenha os três em sincronia. O .htaccess (produção), o router.php (servidor de desenvolvimento local php -S) e o nginx.conf.example (nginx) reimplementam as mesmas regras de roteamento de forma independente. Adicionar uma nova rota com URL amigável significa atualizar os três.

Arquitetura de requisições

Toda página da loja (index.php, item.php, …) inicializa passando pelo includes/header.php, nesta ordem:

Geolocalização e idioma connection.php themes.php hooks.php plugins.php routes.php menus.php assets.php plugins_load()

O connection.php inicia a sessão, conecta via mysqli usando as credenciais do .env, carrega a tbl_settings em constantes como APP_NAME e CURRENCY e faz o login do usuário atual mais uma linha de impressão digital do dispositivo. O plugins_load() inicializa todos os plugins ativos e dispara o hook plugins_loaded — é nesse ponto que o conjunto real e atual de verticais ativas passa a ser conhecido, e é por isso que o header.php revalida depois as flags antigas de configuração (loja, multivendedor, leilão, loteria) contra o estado real de plugin ativo.

O painel administrativo não duplica essa inicialização — o admin/includes/connection.php define a configuração de sessão e de erros específica do admin e depois inclui o mesmo includes/connection.php da raiz.

Sistema de plugins

Um plugin é plugins/<slug>/plugin.php — metadados em comentário de cabeçalho, lidos sem executar o arquivo — mais um plugin.json opcional com informações mais ricas de catálogo. Os plugins ativos ficam guardados como um array JSON em tbl_settings.active_plugins.

  • Propriedade das tabelas — cada plugin define o próprio includes/schema.php, chamado na ativação, usando o helper idempotente db_delta() (CREATE TABLE IF NOT EXISTS + ALTER TABLE ADD COLUMN apenas aditivo). Um plugin nunca mexe nas tabelas de outro plugin.
  • Os registros carregam primeiroadd_admin_page, add_route, add_cron_job, add_api_route e register_module são todos definidos antes de qualquer plugin carregar, então as chamadas de topo de um plugin nunca dão erro fatal, mesmo que ele acabe inativo.
  • Remoção limpa — excluir um plugin executa o uninstall.php dele e apaga a pasta; nada fora de plugins/<slug>/ deve depender obrigatoriamente dos arquivos dele, então o resto do site continua funcionando sem o plugin.

Sistema de temas

Um tema fica em assets/themes/<slug>/ — um manifest.php, um theme.css, um functions.php para os hooks do tema e uma pasta components/ opcional. O tema ativo fica guardado em tbl_settings.active_theme, com editorial como fallback caso nenhum esteja definido.

A resolução de componentes verifica, nesta ordem: a pasta components/ do próprio tema ativo, depois o diretório de componentes declarado por um plugin em register_module() e, por fim, a pasta components/ compartilhada na raiz. Na prática, isso significa que o padrão compartilhado existe uma única vez em components/, e qualquer tema — ou plugin de vertical ativo — pode sobrescrever um caminho de componente específico com a própria cópia.

Banco de dados

Prefixo de tabela tbl_, mysqli puro, quase tudo com prepared statements. Os arquivos SQL, em ordem de autoridade:

  • database/core-schema.sql — apenas as tabelas do kernel, mantidas à mão; as tabelas de verticais e de plugins ficam de fora de propósito.
  • database/production.sql — gerado (schema principal + a rotina de instalação de cada plugin, exportada de um banco de dados descartável). É esse que você importa numa instalação nova.
  • database/sandbox.sql — conjunto de dados de demonstração para desenvolvimento local.
  • database/migration.sql — script de atualização consolidado e idempotente para instalações existentes.
  • database/migrations/<slug>/up.sql (+ down.sql quando reversível) — um arquivo por migração individual.

Módulos

Todo módulo vem na mesma instalação e é ligado ou desligado de forma independente pelo painel administrativo.

Leilões

Lances ao vivo com portal de vendedores multivendedor e motor de comissões. Plugin principal: plugins/auction.

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

Loteria

Sorteios por bilhete com agendamentos, prêmios e notificações de ganhadores configuráveis. Plugin principal: plugins/lottery.

lottery-live-tickerlottery-print-ticket

Caixa misteriosa

Pools de prêmios configuráveis com animações de revelação — o usuário compra uma caixa e vê na hora o que ganhou. Plugin: plugins/mystery-box.

Jogos e recompensas

Um conjunto de jogos de arcade em games/ mais plugins de engajamento e de ganhos:

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

Loja e marketplace

Uma camada de e-commerce multivendedor com promoções e ferramentas de merchandising. Plugins principais: plugins/shop, plugins/multivendor.

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

Carteira, moedas e investimentos

Uma carteira única para toda a plataforma, compartilhada por todos os módulos.

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

Indicações e recompensas

referralsreferrals-multilevel

Autenticação, confiança e compliance

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

Utilitários

blogcachetawk-chatinsightsmanual-gateway-buildermobile-app-settings

Painel administrativo

O painel administrativo fica em admin/ e não duplica a inicialização da loja — ele define a configuração de sessão e de erros específica do admin e depois inclui o mesmo includes/connection.php da raiz. As páginas se registram por add_admin_page(), que cuida da entrada na barra lateral, do controle de permissões, do CSRF e da moldura de autenticação; as ações JSON exclusivas do admin se registram por add_admin_ajax() e são despachadas via admin/ajax.php?action=<slug>.

Catálogo e conteúdo

Itens, banners, páginas, menus, blog.

Pagamentos

Gestão de gateways automáticos e manuais, revisão de pagamentos manuais, exportação de repasses.

Usuários e vendedores

Grupos de usuários, papéis, dados do vendedor, login como usuário.

Relatórios e logs

Exportação de transações, pedidos e usuários, logs de cron, rastreio de erros, logs de atividade do administrador.

Marketing

Campanhas de e-mail, modelos, newsletters, notificações push, log de notificações.

Plugins, temas e SEO

Ativar e desativar plugins e temas, configurações de SEO por página, configurações gerais do site.

Temas da loja

Cinco temas vêm em assets/themes/, trocáveis por instalação pelo painel administrativo. Cada tema mantém a própria cópia dos componentes compartilhados na sua pasta components/.

Classic

Um visual simples e moderno, com cards brancos e sombras suaves — uma escolha segura e versátil para praticamente qualquer tipo de loja.

Editorial

Um visual limpo, estilo revista, com tons quentes de papel e tipografia nítida, para uma loja polida e confiável.

Tema padrão de fallback
Casino

Um tema escuro, ousado e luxuoso, com detalhes em dourado — pensado para parecer empolgante e sofisticado.

Bazaar

Um visual quente e ricamente decorado, inspirado nos mercados tradicionais, com suporte a idiomas escritos da direita para a esquerda.

Halloween

Um visual sazonal assombrado e festivo — fundos roxo-escuros com destaques em laranja-abóbora brilhante.

Gateways de pagamento

Os 38 gateways automáticos pertencem a plugins — cada um fica na própria pasta plugins/gateway-<slug>/ e se registra no kernel via add_payment_gateway(). Ativar um já basta; nada no despachante do checkout (payment_processor.php) está preso a um gateway específico.

Cartões e processadores globais
2CheckoutAmazon PayAuthorize.NetBlueSnapCheckout.comMollieNMIPayPalPayeerSkrillStripeVenmoWise
Processadores regionais e locais
AamarpayBkashCashfreeCashmaalFlutterwaveGoCardlessInstamojoInTouchMercado PagoMidtransM-PesaNagadOpenPixPaystackPaytmPayURazorpaySSLCommerz
Criptomoedas
BinanceBlockchain.comCoinbase CommerceCoinGateCoinPaymentsMoonPayNOWPayments
Manual (por instrução / QR code)
UPIBank TransferPayTM QR

Os 3 métodos manuais são linhas semeadas pelo kernel, com gateway_type = 'manual' e sem código de init/verify para configurar — eles só exibem instruções de pagamento ou um QR code. O plugin manual-gateway-builder permite que um administrador acrescente outros métodos manuais personalizados sem mexer em código.

Alguns gateways (Stripe, Razorpay, Midtrans, Venmo) também registram um hook render para fluxos de checkout que precisam de JS no cliente — a inicialização do Stripe Checkout, ou um SDK do Razorpay/Midtrans/Braintree que precisa de um ID de pedido ou de um token gerado antes no servidor. Todos os outros gateways funcionam sem nenhuma ligação extra com o kernel.

Camadas de API e AJAX

  • api/v1/ — API REST autenticada por JWT para o aplicativo mobile e consumidores externos. O api/v1/middleware/*.php valida o cabeçalho Authorization: Bearer <token>. Os plugins acrescentam os próprios endpoints via add_api_route().
  • ajax/ — AJAX interno autenticado por cookie de sessão, para o JS da própria loja (carrinho, cupons, notificações). Sem camada de token — depende da sessão PHP configurada pelo connection.php.
  • A pasta api/ solta na raiz — endpoints diversos e sem versionamento, como geo_location.php, exchange-rate.php e offerwall_postback.php.

Aplicativo mobile

O mobile/ é um projeto Capacitor + Ionic separado — um wrapper WebView em volta do site no ar, não um SPA independente nem apenas um consumidor da api/v1. O capacitor.config.ts dele aponta o server.url para o seu domínio. Ele tem o próprio package.json e não é buildado a partir da raiz do projeto:

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

Atualizações e migrações

Faça um snapshot antes de rodar o database/migration.sql ou qualquer database/migrations/<slug>/up.sql contra um banco de dados em produção:

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

A maioria das migrações traz um down.sql correspondente, que reverte só aquela mudança. Algumas poucas, que transformam dados existentes em vez de apenas acrescentar estrutura, trazem um down.sql que documenta por que ele não faz nada — nesses casos, restaure o dump feito antes do deploy se precisar voltar atrás.

Notas de segurança

  • Troque as credenciais de administrador semeadas logo depois da importação (veja Instalação).
  • O .env, o connection.php e os arquivos de log são bloqueados para acesso HTTP direto pelas regras de .htaccess / nginx que já vêm no projeto — não remova essas regras.
  • O conteúdo enviado é servido de um jeito que impede sua execução como PHP, garantido na configuração do servidor web, não na aplicação.
  • As credenciais dos gateways de pagamento são configuradas gateway a gateway pelo painel administrativo e ficam armazenadas no servidor — nunca expostas na loja.

Testes

Não existe suíte de PHPUnit. O composer test roda o bin/run-probes.php, que reúne todo arquivo probe_*.php dentro de includes/_probes/ e da pasta _probes/ de cada plugin, executando cada um como subprocesso de CLI e checando o código de saída.

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)

Perguntas frequentes

Não. Leilões, loteria, caixas misteriosas, jogos e a loja/marketplace são plugins independentes — ative só o que o seu negócio precisa e ligue mais depois, sem reinstalar nada.
Pode. Ao excluir um plugin, o desinstalador dele mesmo é executado e remove só as próprias tabelas e arquivos — o funcionamento essencial do site foi projetado para nunca depender da presença de um plugin específico.
MariaDB. Alguns arquivos de migração usam sintaxe SQL exclusiva do MariaDB, que o MySQL 8 puro rejeita — use MariaDB tanto em desenvolvimento quanto em produção.
38 plugins de gateway automáticos (cartões, carteiras, cripto e processadores regionais) mais 3 métodos manuais — UPI, transferência bancária e PayTM QR — semeados pelo schema principal. Um plugin Manual Gateway Builder permite adicionar outros métodos manuais sem escrever código.

Suporte e recursos

Ainda travado ou precisa de algo que esta página não cobre?