Univer Checkout
Tudo que você precisa pra instalar, configurar e dominar o checkout que vende quando todos os outros falham.
Identificação e pagamento numa tela só. Sem redirects. Carrega em <1s.
OTP via WhatsApp ou magic-link por email. Cliente nunca esquece senha.
Tempo por etapa, abandono, heatmap de campos, UTM completo. Sem GA.
Cobra cartão salvo do cliente sem ele redigitar nada. Mercado Pago.
Visão geral
O Univer Checkout substitui o checkout padrão do WooCommerce por uma experiência otimizada pra conversão no mercado brasileiro. Foi construído pra ser ultra-leve, single-page e plug-and-play: você instala, configura SMTP e gateway, e o resto funciona.
Diferente de page builders que tentam fazer tudo, o Univer é opinionado: a UX foi desenhada pra reduzir atrito do cliente brasileiro (CPF, CEP, parcelamento, OTP por WhatsApp) e tudo que distrai foi removido.
Após ativar o plugin, o checkout entra automaticamente. Não precisa reconfigurar páginas, shortcodes ou trocar template.
Instalação
- 1Faça upload do pluginSuba a pasta
univer-checkoutpra/wp-content/plugins/via FTP, ou instale o ZIP em Plugins → Adicionar → Enviar plugin. - 2AtiveEm Plugins, clique em "Ativar" no card do Univer Checkout. As tabelas auxiliares são criadas automaticamente.
- 3ConfigureVá em Univer Checkout no menu admin e revise: tema, cores, SMTP, OTP, gateway.
- 4Teste em uma compra realFaça um pedido com valor baixo pra validar o fluxo end-to-end, especialmente a primeira parcela e o magic-link de email.
Requisitos
| Setting | Default | Descrição |
|---|---|---|
WordPress | 6.0+ | Testado até 6.7 |
WooCommerce | 8.0+ | HPOS compatível. Testado até 10.3 |
PHP | 7.4+ | Recomendado 8.1+ |
Mercado Pago | 7.x+ | Plugin oficial. Necessário pra save-card e upsell |
Cloudflare Worker | — | Opcional. Necessário só pra OTP via WhatsApp |
Wallet plugin | — | Opcional. Auto-detecta UniverWallet, TeraWallet, WPS, Flintop |
WordPressdefault: 6.0+WooCommercedefault: 8.0+PHPdefault: 7.4+Mercado Pagodefault: 7.x+Cloudflare WorkerWallet pluginPlugins a remover
O Univer Checkout substitui completamente o checkout do Woo. Pra evitar conflitos, desative ou remova:
Plugins de campos do checkout sobrescrevem nossos campos e quebram o validator. Use só o Univer Checkout.
- Plugins de campos do checkout — Checkout Field Editor, WC Checkout Manager
- Auto-completar de endereço de terceiros — já incluído via API ViaCEP
- SMTP plugins (WP Mail SMTP, Easy SMTP) — desnecessário, temos SMTP nativo
- PIX manual com QR estático — temos PIX dinâmico via Mercado Pago
Single-page em 2 etapas
O fluxo foi desenhado pra reduzir atrito ao mínimo. O cliente vê uma página dividida em 2 passos curtos:
- 1IdentificaçãoO cliente informa email ou CPF. Se já houver conta, o sistema oferece login passwordless (WhatsApp ou magic-link, dependendo se ele tem telefone cadastrado). Se for novo, segue cadastro inline. Sem senha.
- 2Endereço + PagamentoCEP auto-completa endereço (via ViaCEP). Cliente escolhe forma de pagamento (cartão, PIX, boleto), preenche o necessário e confirma. Tudo na mesma página, sem refresh.
Login InteligenteBR · PRO
O cliente nunca precisa criar senha. O Univer Checkout reconhece se o email já está cadastrado e oferece duas formas de autenticação passwordless:
OTP via WhatsApp
Um código de 6 dígitos é enviado via WhatsApp pelo seu próprio número (via WAHA + Cloudflare Worker). Validade configurável (default 5 min). Funciona melhor pro Brasil — taxa de entrega superior a SMS.
Magic-link por email
Link único enviado por email. Cliente clica e entra. Útil pra quem não responde no WhatsApp ou tem segundo número.
Settings de auth
| Setting | Default | Descrição |
|---|---|---|
auth_method | both | whatsapp / email / both — qual canal oferecer no fluxo |
enable_instant_login | true | Liga o passwordless inteiro (toggle global) |
auto_create_account | false | Cria conta WP automaticamente para emails novos. DoS-mitigation default false |
auto_login_new | true | Já loga o cliente após cadastro inline |
role_profissional | profissional | Role atribuída quando cliente declara ser profissional |
role_homecare | homecare | Role pra cliente final (homecare) |
auth_methoddefault: bothenable_instant_logindefault: trueauto_create_accountdefault: falseauto_login_newdefault: truerole_profissionaldefault: profissionalrole_homecaredefault: homecareMagic-link e OTP são bloqueados pra contas com roles administrator, editor, author, contributor, shop_manager, super_admin — ou qualquer role com uma das capabilities manage_options, edit_users, list_users, delete_users, manage_woocommerce, edit_others_posts, edit_pages, manage_categories, install_plugins, edit_theme_options. Defesa em camadas contra account takeover via canal lateral. Você pode estender (em qualquer direção) com o filter univer_checkout_user_is_privileged.
Magic-link com rate-limit por subnet /24 IPv4 + cap global de 50 auto-creates por hora. OTP com rate-limit por IP (60/min) e por número.
Pagamento
Cartão, PIX e boleto via integração nativa com o Mercado Pago oficial. PIX dinâmico (QR e copy-paste), boleto com pré-data automática. Tudo cobrado direto na conta do lojista. Detection de gateway de cartão é via slug (mercado + custom/credit) — extensível pelo filter univer_checkout_is_card_gateway.
Save-card opcional. Parcelamento até 12x. Apenas card_id e customer_id opacos do MP + 4 últimos dígitos. Sem PAN, sem CVV.
QR code dinâmico, expiração configurável. Toggle via enable_native_pix.
Pré-data automática. Confirmação via webhook.
% de desconto independente para PIX e boleto.
| Setting | Default | Descrição |
|---|---|---|
enable_native_pix | true | Renderiza QR code + copia-cola direto na página (sem redirect ao MP) |
enable_native_pixdefault: trueParcelamento
Configure como o lojista cobra parcelamento BR direto nas settings. As regras são respeitadas em todo lugar — checkout, página de upsell e save-card.
| Setting | Default | Descrição |
|---|---|---|
installments_max | 12 | Número máximo de parcelas oferecidas |
installments_free_upto | 3 | Parcelas sem juros (1x até esse valor) |
installments_interest | 1.99 | Juros mensal % aplicado a partir da parcela N+1 |
installments_min_value | 10.00 | Valor mínimo por parcela em BRL |
discount_pix_percent | 0 | % de desconto pra PIX |
discount_boleto_percent | 0 | % de desconto pra boleto |
installments_maxdefault: 12installments_free_uptodefault: 3installments_interestdefault: 1.99installments_min_valuedefault: 10.00discount_pix_percentdefault: 0discount_boleto_percentdefault: 0Frete
Consome os métodos de envio nativos do WooCommerce e renderiza com presets visuais: prazo, valor e label "Médio/Máximo".
| Setting | Default | Descrição |
|---|---|---|
shipping_max_days | 12 | Cap de dias úteis pra "Máximo" |
shipping_label_avg | Médio | Label do prazo médio |
shipping_label_max | Máximo | Label do prazo máximo |
shipping_aliases | [] | Map de aliases pra renomear "PAC" → "Correios padrão" etc |
shipping_strip_parens | true | Remove "(prazo: X dias)" do nome do método |
shipping_max_daysdefault: 12shipping_label_avgdefault: Médioshipping_label_maxdefault: Máximoshipping_aliasesdefault: []shipping_strip_parensdefault: trueTemas3 temas
Três temas visuais embutidos. Cada um troca apenas tokens CSS — o app JS é o mesmo. Você muda em 1 click sem perder configuração.
Clean, branco, padrão. Recomendado pra lojas neutras.
Premium tipo Linear/Vercel. Tudo escuro. Para marcas premium.
Aurora gradient + glassmorphism + glow primary. Diferenciado.
Settings de aparência
| Setting | Default | Descrição |
|---|---|---|
checkout_theme | light | light / black / glass — tema visual base do checkout |
theme_color_primary | — | Override opcional da cor primária do tema (ex: "#7C3AED"). Vazio = usa default do tema |
theme_color_primary_dark | — | Variante mais escura para hover (ex: "#5B21B6"). Vazio = computado a partir de theme_color_primary |
logo_url | — | Logo da loja exibida no resumo do pedido (separado de header_logo_url) |
color_primary | #10B981 | Cor primária legacy — usada quando nem theme_color_primary nem o tema definem cor |
color_primary_dark | #059669 | Variante escura legacy |
footer_text | Essa compra está sendo feita no Brasil | Texto exibido no rodapé do checkout |
custom_css | — | CSS adicional injetado no checkout (use com parcimônia — pode quebrar layout responsivo) |
checkout_themedefault: lighttheme_color_primarytheme_color_primary_darklogo_urlcolor_primarydefault: #10B981color_primary_darkdefault: #059669footer_textdefault: Essa compra está sendo feita no Brasilcustom_cssOverride de cor primária — exemplo
Override opcional preserva o tema. Útil pra adequar à identidade visual da loja sem trocar o tema inteiro.
// Settings → Aparência theme_color_primary: "#7C3AED" // botões / accents theme_color_primary_dark: "#5B21B6" // hover
Header customizável
O topo do checkout é totalmente configurável: cor de fundo, logo, subtítulo, padding e tamanho da logo.
| Setting | Default | Descrição |
|---|---|---|
header_background_color | — | Cor de fundo do header (vazio = transparente, herda do tema) |
header_logo_url | — | Logo do header (PNG/SVG/WEBP) |
header_subtitle | — | Texto debaixo do logo (ex: "Compra segura · BR") |
header_subtitle_color | #ffffff | Cor do subtítulo |
header_subtitle_font_size | 14 | Tamanho do subtítulo em px |
header_subtitle_font_weight | 500 | Peso da fonte do subtítulo (100–900) |
header_padding_top | 36 | Padding superior em px |
header_padding_bottom | 32 | Padding inferior em px |
header_logo_max_height | 64 | Altura máxima da logo em px |
header_logo_max_width | 0 | Largura máxima da logo em px (0 = ilimitado, mantém ratio) |
header_background_colorheader_logo_urlheader_subtitleheader_subtitle_colordefault: #ffffffheader_subtitle_font_sizedefault: 14header_subtitle_font_weightdefault: 500header_padding_topdefault: 36header_padding_bottomdefault: 32header_logo_max_heightdefault: 64header_logo_max_widthdefault: 0Trust badges & bullets
Bullets aparecem abaixo do checkout pra reforçar credibilidade. Os defaults vêm prontos:
- Produto em estoque, envio rápido
- Compra 100% segura e criptografada
- Suporte humano por WhatsApp
Trust badges (Site Blindado, Reclame Aqui, Visa Verified) podem ser inseridos via array trust_badges com URL da imagem e link.
Página de obrigado
Após o pagamento, o plugin sobrescreve completamente o template order-receiveddo WC (e do tema) com um bundle Preact próprio. Isso evita os blocos parasitas dos temas ("Comprar de novo" do Woodmart, "custo do parcelamento", etc) e garante visual coeso com o checkout. O theme escolhido (light/black/glass) é estendido automaticamente pra cá.
O cliente acessa via order_key na URL — mesmo modelo de auth que o WC usa pra guest checkouts, então não precisa estar logado. É também onde o upsell 1-clique aparece.
| Setting | Default | Descrição |
|---|---|---|
thankyou_color_bg | #FAF7F1 | Cor de fundo da página |
thankyou_color_text | #1A1611 | Cor do texto principal |
thankyou_color_accent | #8C6929 | Accent (links, destaques) |
thankyou_cta_bg_start | #C49643 | Início do gradient do botão |
thankyou_cta_bg_end | #A87A2A | Final do gradient do botão |
thankyou_check_color | #B58A3C | Cor do círculo de confirmação |
thankyou_color_bgdefault: #FAF7F1thankyou_color_textdefault: #1A1611thankyou_color_accentdefault: #8C6929thankyou_cta_bg_startdefault: #C49643thankyou_cta_bg_enddefault: #A87A2Athankyou_check_colordefault: #B58A3CTracking analíticoPRO
Toda sessão de checkout é instrumentada — sem cookies de terceiros, sem GA. Os dados ficam no seu próprio banco, em tabelas dedicadas.
Quanto tempo cada cliente passa em "identificação" vs "pagamento".
Visitas → preencheram → confirmaram → pagaram. Drop-off por etapa.
Quais campos são preenchidos com erro, retried ou abandonados.
source/medium/campaign/term/content preservados pela sessão.
| Setting | Default | Descrição |
|---|---|---|
tracking_enabled | true | Liga/desliga ingest de eventos |
event_retention_days | 90 | Dias antes de purge automático |
exclude_admin_sessions | true | Ignora admins logados (mantém métricas limpas) |
admin_ips | [] | Allowlist de IPs/CIDR pra excluir (ex: 10.0.0.0/8) |
tracking_enableddefault: trueevent_retention_daysdefault: 90exclude_admin_sessionsdefault: trueadmin_ipsdefault: []Sem cookies de terceiros. Sem GA. Sem Meta Pixel. Os dados são seus. /events tem cap de 32KB por payload e 50 events por batch.
Recuperação de carrinho
Sessão sem conclusão é marcada como abandoned após N minutos (default 30) por um cron próprio do plugin. A partir daí, a sessão fica disponível na tabela univer_sessions com todos os dados do cliente — email, telefone, carrinho, UTMs — pra você integrar com o seu canal de recuperação.
Como disparar lembretes
O plugin não envia emails de recuperação automaticamente — ele expõe os dados pro seu CRM/email tool de preferência (Brevo, ActiveCampaign, RD Station, FluentCRM, Univer Loyalty etc). Cenário típico:
- 1Plugin marca sessão como abandonadaCron
univer_checkout_abandonment_scanroda e atualizastatus = abandonednas sessões inativas há mais de N minutos. - 2Você consome a tabela univer_sessionsVia SQL direto, REST custom ou hook do seu CRM. Os campos relevantes:
email,phone,cart_total,utm_*,last_step. - 3Dispara o lembreteEmail transacional (SMTP nativo do próprio plugin já serve), WhatsApp via WAHA, ou via integração nativa com Univer Loyalty / Univer Tracker.
| Setting | Default | Descrição |
|---|---|---|
abandon_after_min | 30 | Minutos de inatividade pra marcar sessão como abandoned |
event_retention_days | 90 | Dias antes do sweep purgar sessões/events antigos |
abandon_after_mindefault: 30event_retention_daysdefault: 90Versões futuras vão incluir templates de email/WhatsApp embutidos com timers configuráveis (1h, 24h, 3 dias) e cupom de incentivo automático. Por enquanto, o plugin entrega os dados e você escolhe a ferramenta de envio.
Upsell pós-compra 1-cliquePRO
Depois do pagamento aprovado, oferece um produto extra na página de obrigado. Cliente clica em "Quero também" e o cartão salvo é cobrado sem redigitar nada.
- 1Save-card opt-inNo checkout original, o cliente concorda em salvar o cartão (token Mercado Pago).
- 2Thankyou injectorPágina de obrigado mostra a oferta de upsell.
- 31-clique → Mercado PagoBackend chama API do MP com token salvo + idempotency-key. Pedido criado em < 800ms.
- 4Cart price overrideSe o produto tem preço diferenciado pro upsell, sobrescreve no carrinho.
Modos:
auto— sistema escolhe melhor produto baseado no carrinho do pedido principal (default)fixed— produto único definido nas settingsoff— desabilita upsell na página
Cupom via URL
Aplica cupom automaticamente quando o cliente chega via link com o parâmetro ?coupon=:
// Exemplo: BLACKFRIDAY aplicado automaticamente https://sualoja.com.br/checkout/?coupon=BLACKFRIDAY
Funciona com qualquer cupom criado em WooCommerce → Cupons. Se inválido/expirado, é ignorado silenciosamente.
| Setting | Default | Descrição |
|---|---|---|
enable_coupon_url | true | Liga/desliga a aplicação automática de cupom via parâmetro ?coupon= |
enable_coupon_urldefault: truePontos / Loyalty
Sistema de pontos opcional integrado ao checkout. Mostra "Você ganhará X pontos nesta compra!" abaixo do total e grava pontos na finalização.
| Setting | Default | Descrição |
|---|---|---|
points_enabled | false | Liga sistema de pontos |
points_rate | 1 | Pontos ganhos por R$ gasto |
points_label | pontos | Label customizado ("Lizzcoins", "stars" etc) |
points_message | Você ganhará {points} {label}… | Mensagem com placeholders |
points_enableddefault: falsepoints_ratedefault: 1points_labeldefault: pontospoints_messagedefault: Você ganhará {points} {label}…Mercado Pago
Integração nativa com o plugin oficial woocommerce-mercadopago. Necessário pra save-card, upsell 1-clique e parcelamento BR completo. PIX e boleto funcionam pelo gateway nativo do MP.
API do MP roda com retry exponencial (250ms / 1s) em 502/503/504. Idempotency-key é UUID v4 RFC4122-compliant — duplo-clique nunca gera 2 cobranças.
SMTP nativo
Envio de emails (magic-link, recibo, recuperação) sem depender de plugins extras tipo WP Mail SMTP. Configure direto nas settings:
| Setting | Default | Descrição |
|---|---|---|
smtp_enabled | false | Liga o SMTP nativo |
smtp_host | — | Host SMTP (ex: smtp.gmail.com) |
smtp_port | 587 | Porta SMTP |
smtp_encryption | tls | tls / ssl / none |
smtp_auth | true | Exige autenticação. Desligue só pra relay interno |
smtp_username | — | Usuário SMTP |
smtp_password | — | Senha SMTP (criptografada via libsodium em rest) |
smtp_from_email | — | Email de remetente |
smtp_from_name | — | Nome do remetente |
smtp_enableddefault: falsesmtp_hostsmtp_portdefault: 587smtp_encryptiondefault: tlssmtp_authdefault: truesmtp_usernamesmtp_passwordsmtp_from_emailsmtp_from_nameO plugin verifica se a extensão openssl está habilitada. Se faltar, mostra notice no admin (evita falha silenciosa em deploy).
WhatsApp / WAHA
Pra OTP via WhatsApp, configure um Cloudflare Worker próprio que se conecta na sua WAHA (WhatsApp HTTP API). Isso permite envio do seu número oficial sem custos de SMS BR.
- 1Suba a WAHAEm servidor próprio (Docker recomendado) ou serviço cloud. Configure session com seu número.
- 2Deploy Cloudflare WorkerUse o template fornecido na doc do projeto. Define o segredo HMAC compartilhado.
- 3Configure pluginCole a URL do Worker, o segredo HMAC, a URL da WAHA e o nome da session.
| Setting | Default | Descrição |
|---|---|---|
waha_worker_url | — | URL do seu Cloudflare Worker |
waha_worker_secret | — | Segredo HMAC compartilhado entre WP e Worker |
waha_api_url | — | URL pública da sua WAHA |
waha_api_key | — | API key da WAHA |
waha_session | — | Nome da session no WAHA |
waha_otp_template | *{site_name}*\n… | Template da mensagem com placeholders {site_name}, {code}, {expires_minutes}. Default usa formatação WhatsApp (negrito + quebras) |
waha_otp_length | 6 | Dígitos do código |
waha_otp_ttl | 5 | Validade em minutos |
waha_worker_urlwaha_worker_secretwaha_api_urlwaha_api_keywaha_sessionwaha_otp_templatedefault: *{site_name}*\n…waha_otp_lengthdefault: 6waha_otp_ttldefault: 5Wallet / SaldoBONUS
Feature opcional que permite o cliente usar saldo de carteira (store credit) no checkout. Auto-detecta os providers compatíveis na ativação:
UniverWallet— nosso plugin nativoWallet for WooCommerce (Flintop)TeraWalletWPS Wallet- Custom — registre via filter
univer_checkout_wallet_balance
Se nenhum provider estiver presente, a feature desativa graciosamente — sem erro, sem UI quebrada. Se você quiser desligar mesmo com provider presente (ex: durante uma campanha), use a setting:
| Setting | Default | Descrição |
|---|---|---|
enable_wallet | true | Liga/desliga o uso de saldo no checkout. Quando false, a UI de wallet não é renderizada e nenhum saldo é debitado, mesmo com plugin de wallet ativo |
enable_walletdefault: trueCarrinhos contendo um produto de "recarga de saldo" (top-up) não permitemuso de wallet — evita o loop "pago carteira com carteira". Detecção via filter univer_checkout_cart_contains_topup.
Licenciamento
Sistema de licença com 3 camadas de gate independentes — defesa em profundidade, nenhuma é suficiente sozinha.
- 1Frontend template (priority 98)Antes do checkout renderizar, um
template_includefilter intercepta e mostra a tela de bloqueio se a licença estiver inativa. Mais cedo que qualquer outro plugin no pipeline. - 2REST gate (rest_pre_dispatch)Todas as rotas
/wp-json/univer/v1/*retornam503quando a licença está bloqueada, exceto as rotas/license/*e/cep/*(pra você conseguir reativar). - 3Admin banner
admin_noticesmostra estado da licença em todas as telas do wp-admin com link direto pra reativação.
Verificação criptográfica
Tokens são assinados com Ed25519 (libsodium) e re-verificados a cada read — qualquer tentativa de adulterar o option no DB invalida o token. Domain-binding: o token traz o host de issuance e é rejeitado se mudou.
Heartbeat e grace period
Cron diário chama o licensing server pra revalidar. Se o servidor estiver inalcançável, o site continua funcionando por 7 dias (grace period) com base no último signed_token válido. Após esse prazo, o gate ativa.
Se o licensing server ficar fora por >7 dias, o checkout bloqueia. Tenha o canal de suporte em mãos pra reset manual da licença em um cenário catastrófico.
Persistência de settings
Ativação NUNCA reseta valores. Migrations só ADICIONAM ou RENAME keys. Backup automático em univer_checkout_settings_backup antes de qualquer renomeação.
Settings ficam em wp_options.univer_checkout_settings. Em cada read, defaults são mergeados atrás dos valores salvos (nunca sobrescrevem). Em cada save, só as keys explícitas são tocadas.
Developer hooks
O Univer Checkout expõe hooks (filters e actions) pra extensão sem precisar fork. Todos seguem o prefixo univer_checkout_*. Use no functions.php do tema ou em um plugin filho.
Filters — comportamento
| Setting | Default | Descrição |
|---|---|---|
univer_checkout_user_is_privileged | — | Override da decisão de bloquear magic-link/OTP. Recebe (bool $is_priv, WP_User|null $user). Retorne true pra forçar bloqueio. |
univer_checkout_is_card_gateway | — | Define se um gateway é "de cartão" (habilita save-card / upsell 1-clique). Recebe (bool $is_card, string $gateway_id) |
univer_checkout_wallet_balance | — | Provider customizado de saldo. Recebe (float $balance, int $user_id). Retorne o saldo final em BRL |
univer_checkout_cart_contains_topup | — | Detecta produto de "recarga de saldo" no carrinho — desabilita uso de wallet pra evitar loop. Recebe (bool $has_topup) |
univer_checkout_session_is_bot | — | Marca session como bot (não vai pra analytics). Recebe (bool $is_bot, string $user_agent) |
univer_checkout_skip_admin_session | — | Força skip de session por critério custom. Recebe (bool $skip, string $client_ip) |
univer_checkout_revenue_statuses | — | Custom set de status que contam como receita nos KPIs. Recebe array de status slugs |
univer_checkout_thankyou_pix_data | — | Modifica os dados de PIX exibidos na thank-you (QR, copia-cola, expiração). Recebe (array $data, WC_Order $order) |
univer_checkout_default_country | — | ISO country code default pra normalização de telefone OTP (default "BR") |
univer_checkout_mp_site_id | — | Override do site_id do Mercado Pago (default "MLB" — Brasil) |
univer_checkout_mp_test_mode | — | Force-override test/prod mode do Mercado Pago. Recebe (bool $is_test) |
univer_checkout_points_icon_url | — | URL do ícone exibido ao lado dos pontos no resumo do pedido |
univer_checkout_installments_max | — | Override do número máximo de parcelas (vence o setting) |
univer_checkout_user_is_privilegeduniver_checkout_is_card_gatewayuniver_checkout_wallet_balanceuniver_checkout_cart_contains_topupuniver_checkout_session_is_botuniver_checkout_skip_admin_sessionuniver_checkout_revenue_statusesuniver_checkout_thankyou_pix_datauniver_checkout_default_countryuniver_checkout_mp_site_iduniver_checkout_mp_test_modeuniver_checkout_points_icon_urluniver_checkout_installments_maxActions — eventos
| Setting | Default | Descrição |
|---|---|---|
univer_checkout_wallet_debit | — | Disparado quando saldo é debitado em uma compra. Recebe (int $user_id, float $amount, int $order_id, WC_Order $order). Útil pra logar histórico ou notificar |
univer_checkout_wallet_debitCrons agendados
| Setting | Default | Descrição |
|---|---|---|
univer_checkout_abandonment_scan | — | Roda a cada hora. Marca sessões inativas há mais de abandon_after_min como abandoned |
univer_checkout_retention_sweep | — | Roda diariamente. Purga sessions/events com mais de event_retention_days |
univer_checkout_abandonment_scanuniver_checkout_retention_sweepTabelas no banco
Prefixo {wp_prefix}_univer_. Todas têm índices estratégicos pra queries de funil e timeline.
| Setting | Default | Descrição |
|---|---|---|
univer_sessions | — | Sessão do checkout (UTM, device, IP hash, status, cart_total) |
univer_events | — | Stream de eventos (step.enter, field.focus, order.submit) com timestamp em ms |
univer_step_timings | — | Tempo de entrada/saída por etapa do funil |
univer_field_stats | — | Heatmap por campo: focus_count, total_ms, error_count |
univer_upsell_rules | — | Regras de upsell (trigger por produto/categoria, oferta, desconto) |
univer_saved_cards | — | Cards salvos no MP pra one-click (mp_customer_id, mp_card_id, last4, brand) |
univer_upsell_events | — | Eventos de upsell (shown / accepted / charged) com order link |
univer_sessionsuniver_eventsuniver_step_timingsuniver_field_statsuniver_upsell_rulesuniver_saved_cardsuniver_upsell_eventsREST API
Todos os endpoints ficam sob o namespace /wp-json/univer/v1/. As rotas administrativas exigem capability manage_woocommerce; rotas públicas são protegidas por nonce + rate-limit.
POST /checkout/bootstrap·/coupon·/shipping·/submit·/wallet— fluxo do checkoutPOST /auth/instant-login·/verify·/recover— passwordlessPOST /events— ingest de eventos (32KB / 50 events por batch)GET /analytics/*— KPIs, funnel, timings, field-stats, sessions (admin only)GET /upsell/offers/{order_id}·POST /upsell/accept— fluxo de upsell 1-cliquePOST /license/{state|activate|sync|deactivate}— gerência de licençaPOST /cep/lookup— proxy ViaCEP
LGPD / Uninstall
Quando você desinstala o plugin pelo wp-admin, o uninstall.php é LGPD-aware:
- Drop de todas as tabelas
univer_*(sessions, events, step_timings, field_stats, upsell_rules, saved_cards, upsell_events, otp_codes legacy) - Delete de todas as options:
univer_checkout_settings,_settings_backup,_settings_version,_db_version,_hash_salt - Cancela crons agendados (
univer_checkout_abandonment_scan+_retention_sweep) - Limpa transients
_transient_univer_*, locksuniver_lock_*e idempotency keysuniver_idem_* - Remove user_meta com prefix
_univer_(não toca embilling_*do Woo, esse é histórico do lojista) - Remove order_meta com prefix
_univer_em ambos os modelos: HPOS e legacy posts
Após desinstalar, nada do plugin permanece no banco. Zero footprint.
Problemas comuns
Checkout não aparece
Verifique se o WooCommerce está ativo. Em WooCommerce → Status, confirme que a página de Checkout está mapeada e que não há erro de banco. Se persistir, ative WP_DEBUG e cheque wp-content/debug.log.
Magic-link cai em spam
Configure SMTP nativo e use SPF/DKIM no DNS. Sem SMTP, o WordPress usa mail() que é flagged por gmail/outlook.
OTP não chega
Cheque o log do Cloudflare Worker, status da WAHA e formato do número (BR usa 9 dígitos no celular). O plugin tem resolver automático que tenta com e sem o 9.
Save-card falha em produção
Save-card requer Mercado Pago em modo produção (não sandbox) e plugin oficial atualizado. Verifique SANDBOX_MODE nas configurações do MP.
Settings sumiram após update
Não acontece — o framework de persistência preserva tudo. Se você ver default em algum campo, é porque essa key foi adicionada em uma migration nova. Confira o backup em univer_checkout_settings_backup.
FAQ
Funciona com gateway que não seja Mercado Pago?
O fluxo básico (PIX, boleto) funciona com qualquer gateway. As features avançadas (save-card, upsell 1-clique, parcelamento BR completo) só funcionam com o Mercado Pago oficial.
Suporta HPOS?
Sim. custom_order_tables declarado como compatível. Cart/Checkout Blocks são incompatíveis intencionalmente — usamos nosso próprio template otimizado.
Posso desativar o upsell?
Sim. Em Univer Checkout → Recursos, mude upsell_mode pra off.
Tem versão multilíngue?
Versão atual é PT-BR. Strings traduzíveis via load_plugin_textdomain. Roadmap inclui ES-AR/MX e EN-US.
Funciona com cache (WP Rocket, LiteSpeed)?
Sim, mas a página de checkout (e a thank-you) precisam estar na exclude list do seu plugin de cache. O Univer Checkout é uma SPA stateful — cachear o HTML quebra o bootstrap. Configure exclusão dos paths /checkout/* e /order-received/* no WP Rocket / LiteSpeed / Cloudflare Page Rules.
Changelog
2.3.0 atual
- 3 temas embutidos (Light, Black, Glass)
- Override opcional da cor primária por tema (
theme_color_primary+theme_color_primary_dark) - Admin session exclusion — sessões iniciadas por admins logados ou IPs em
admin_ipssão ignoradas no tracking. Suporta CIDR IPv4/IPv6 (ex:10.0.0.0/8). Mantém o funil limpo durante testes internos. - Backup automático de settings antes de qualquer migration (
univer_checkout_settings_backup)
2.1.0
- Hardening pra venda comercial / plug-and-play
- Wallet multi-provider auto-detect
- Settings persistence framework formal
- DoS hardening em magic-link + /events
uninstall.phpLGPD-aware (zero footprint)- Lazy loading por contexto
- MP API com retry exponencial
2.0.5
- OTP fix: REQUEST_TIMEOUT 0.5s → 5s
2.0.4
- Smart phone resolver no Worker (BR 9-vs-no-9)
2.0.3
- User_Guard: bloqueia magic-link/OTP pra roles privilegiadas
2.0.2
- SMTP nativo, OTP via Cloudflare Worker, magic-link via ULAU
2.0.0
- Upsell pós-compra 1-clique com Mercado Pago save-card
- Tracking analítico completo (sessions, events, timings, fields, UTM)