O CheckoutOTP adiciona uma camada de verificação por e-mail antes de o cliente chegar ao checkout do WooCommerce. O comprador informa seu e-mail, recebe um código de 6 dígitos e o confirma. Só então pode concluir a compra.
Com ele você pode:
Bloquear pedidos falsos, spam e bots que usam e-mails inventados.
Garantir que o e-mail de cobrança é real e pertence a quem compra.
Reduzir reembolsos, estornos (chargebacks) e fraude.
Manter uma lista de e-mails limpa para suas campanhas de marketing.
Ideia principal
A verificação é prévia ao checkout: o plugin redireciona o cliente para uma página de verificação e, ao confirmar o código, o devolve ao checkout com o e-mail fixado e bloqueado.
2. Requisitos
Componente
Mínimo
Testado em
WordPress
7.1
7.1.2
WooCommerce
11.2
11.2.1
PHP
8.3
8.3
O WooCommerce deve estar ativo. Sem ele, o plugin mostra um aviso e sua lógica não é ativada.
Um servidor capaz de enviar e-mails (idealmente com um plugin SMTP configurado; ver Solução de problemas).
3. Instalação
Baixe o pacote checkoutotp.zip.
No WordPress, acesse Plugins → Adicionar novo plugin → Enviar plugin.
Selecione o arquivo .zip, clique em Instalar agora e depois em Ativar.
Ao ativar, o plugin cria automaticamente suas tabelas e configurações padrão.
Recomendação
Após ativar, vá a WooCommerce → CheckoutOTP para revisar as configurações antes de abrir a loja ao público.
4. Configuração inicial
A verificação ocorre numa página do seu site que contém um shortcode. Você só precisa de uma página para isso.
Passo 1 — Criar a página de verificação
Vá a Páginas → Adicionar nova.
Dê um título a ela, por exemplo Order Verification ou Verificação de pedido.
No conteúdo, adicione este shortcode:
[checkoutotp_form]
Publique a página.
Nota
O plugin detecta automaticamente a página que contém o shortcode e redireciona para lá os clientes não verificados. Não é preciso configurar nenhuma URL.
Use apenas uma página de verificação
Se existirem duas ou mais páginas publicadas com o shortcode [checkoutotp_form], o plugin redireciona sempre para a mais recente (a última publicada ou atualizada). As outras continuam mostrando o formulário se forem visitadas diretamente, mas nunca serão o destino do redirecionamento. Para evitar confusões (por exemplo, editar uma página que não é a que está sendo usada), mantenha uma única página ativa com o shortcode e deixe as demais como rascunho ou na lixeira.
Passo 2 — Ajustar os valores básicos
Em WooCommerce → CheckoutOTP → Settings, revise no mínimo:
OTP Expiry Time: minutos de validade do código (padrão 15).
Admin Notification Recipients: e-mails que receberão os alertas de segurança.
Notify When User is Blocked e Notify on Multiple Failed Attempts: ative-os se quiser receber avisos.
Passo 3 — Testar
Em uma janela anônima, adicione um produto ao carrinho e vá ao checkout.
Deve ser redirecionado para a página de verificação.
Informe seu e-mail, receba o código e confirme-o.
Depois de verificado, volta ao checkout com o e-mail bloqueado e pode concluir a compra.
5. Como funciona
A jornada do cliente
O cliente adiciona produtos ao carrinho e tenta entrar no checkout.
O plugin o redireciona para a página de verificação ([checkoutotp_form]).
Informa seu e-mail e clica em enviar → recebe um código de 6 dígitos por e-mail.
Informa o código. Se estiver correto, fica verificado.
Volta ao checkout: o e-mail aparece fixado e só de leitura.
Conclui a compra.
Quando a verificação é lembrada
Situação
Comportamento
Primeiro checkout após instalar o plugin (administradores, clientes existentes, contas recém-registradas)
Todos verificam uma vez, sem exceções. Não há bypass automático por estar logado nem por ter uma conta antiga.
Cliente com conta, já verificado uma vez
Fica verificado de forma permanente (meta de usuário). Nas compras seguintes o código não é solicitado novamente.
Cliente convidado
Um cookie assinado é armazenado (7 dias, ou 30 se marcar «lembrar de mim»). Ao voltar dentro desse prazo, continua verificado.
Importante
O selo Verification em «Minha conta → Pedidos» (apenas para clientes com conta) indica se, ao criar esse pedido, o comprador estava verificado. Um cliente já verificado terá todos os seus pedidos marcados como «Verified» sem que o código seja solicitado a cada vez.
Modo de emergência
Se o envio de e-mails falhar, o Modo de emergência desativa temporariamente a verificação para não perder vendas. Use-o apenas como solução pontual e desative-o o quanto antes.
6. O painel do CheckoutOTP
Tudo é gerido em WooCommerce → CheckoutOTP. O painel tem estas abas:
Aba
Para que serve
⚙️ Settings
Todas as opções de configuração (ver seção 7).
📋 Setup Instructions
Guia rápido de configuração.
📊 Statistics
Métricas: códigos enviados, verificações bem-sucedidas, tentativas com falha, bloqueios.
🛡️ API Security
Proteção contra bots e abuso da API REST.
📜 History
Últimos 50 eventos de segurança (envios, verificações, falhas, bloqueios).
🚫 Blocked Emails
E-mails bloqueados temporariamente, com botão para desbloqueá-los manualmente.
7. Opções de configuração
General OTP Settings
Opção
Padrão
O que faz
OTP Expiry Time
15 min
Minutos de validade do código (1–60).
Maximum Failed Attempts
5
Tentativas permitidas por código antes de o invalidar (3–20).
Email Block Threshold
10
Tentativas acumuladas por e-mail (entre códigos) antes de o bloquear (3–50).
Email Block Duration
60 min
Quanto tempo um e-mail fica bloqueado (5–1440 min).
🚨 Emergency Mode
Não
Desativa temporariamente a verificação (emergências).
🌐 Site Behind Proxy/CDN
Não
Ative se seu site estiver atrás do Cloudflare ou de um proxy/CDN, para detectar o IP real do visitante.
Express Checkout Protection
Oculta os botões de pagamento rápido (PayPal, Google Pay, Apple Pay, Stripe…) aos clientes que ainda não estão verificados, para que não possam pular a verificação.
Opção
Padrão
O que faz
🔒 Strict Mode
Não
Oculta botões de pagamento rápido através de padrões CSS genéricos (mais agressivo).
Custom CSS Selectors
—
Seletores CSS adicionais do seu tema/plugins (um por linha) para ocultar botões específicos.
Lembre-se
A ocultação visual é uma barreira de melhor esforço (pode ser contornada manipulando o HTML). A proteção real contra a cobrança sem verificação no PayPal é aplicada no servidor do seu WordPress: o plugin interceta o pedido de pagamento rápido antes de este ser enviado ao PayPal, de modo que nenhuma cobrança é efetuada. O servidor do PayPal não intervém.
Security Notifications
Opção
Padrão
O que faz
Admin Notification Recipients
—
E-mails que recebem os alertas (você pode adicionar vários).
Notify When User is Blocked
Não
Avisa quando um e-mail fica bloqueado por falhas repetidas.
Notify on Multiple Failed Attempts
Não
Avisa quando há várias tentativas com falha.
REST API Security
Opção
Padrão
O que faz
Maximum Orders Per Hour
5
Limite de pedidos por hora por IP/e-mail (1–50).
Block Bot User-Agents
Não
Bloqueia pedidos de bots conhecidos pelo seu User-Agent.
Notify on API Abuse
Não
Avisa em caso de abuso da API REST.
Notify on Suspicious Orders
Não
Avisa quando um pedido é marcado como suspeito.
Configurable Block Lists
Opção
O que faz
Custom Disposable Email Domains
Domínios de e-mail temporário adicionais que deseja rejeitar (um por linha). São adicionados à lista integrada de 32 domínios; não a substituem.
Custom Suspicious User-Agents
Assinaturas de bots adicionais (uma por linha).
Custom Suspicious Names
Nomes suspeitos (por exemplo «test», «asdf») que ativam a detecção.
Enable Regex Patterns
Trata as listas anteriores como expressões regulares (avançado).
Lista de domínios descartáveis incluída
O plugin já rejeita, sem qualquer configuração, estes 32 domínios de e-mail temporário:
tempmail.com, guerrillamail.com, 10minutemail.com, throwaway.email, mailinator.com, maildrop.cc, temp-mail.org, fakeinbox.com, trashmail.com, yopmail.com, getnada.com, mailnesia.com, sharklasers.com, guerrillamail.info, grr.la, guerrillamail.biz, spam4.me, mailcatch.com, emailondeck.com, mohmal.com, mintemail.com, mytrashmail.com, tempr.email, disposablemail.com, throwawaymail.com, spamgourmet.com, mailexpire.com, tempinbox.com, dispostable.com, getairmail.com, mailnator.com e tempail.com.
O campo Custom Disposable Email Domains adiciona domínios a esta lista, nunca a substitui.
Data Maintenance
Opção
Padrão
O que faz
Auto Purge Logs
Sim
Exclui automaticamente os registros antigos.
Log Retention Period
30 dias
Quantos dias os registros são mantidos (7–365).
Ao desinstalar
Se excluir o plugin do WordPress (não apenas o desativar), este remove completamente seus dados: configurações, tabelas, metadados de usuário, cookies de sessão e tarefas agendadas. Não deixa rastros no banco de dados.
Design & Colors
Personalize o aspecto do formulário de verificação:
Header Background ColorHeader Text ColorButton Background ColorButton Text Color
8. E-mails e personalização
O código OTP é enviado como um e-mail do WooCommerce, por isso aparece em WooCommerce → Configurações → E-mails com o nome CheckoutOTP. A partir daí, você pode alterar o assunto, o cabeçalho e o rodapé, e até desativá-lo.
Modelos de e-mail
O plugin inclui dois modelos:
templates/emails/checkoutotp-otp.php — versão HTML.
templates/emails/plain/checkoutotp-otp.php — versão texto simples.
Como personalizar sem perder alterações ao atualizar
Copie o modelo para a pasta do seu tema, respeitando o caminho do WooCommerce:
seu-tema/woocommerce/emails/checkoutotp-otp.php
(para a versão de texto simples, seu-tema/woocommerce/emails/plain/checkoutotp-otp.php). O WordPress usará sua cópia em vez da do plugin.
9. Compatibilidade
Checkout clássico
Compatível com o checkout por shortcode do WooCommerce.
WooCommerce Blocks
Compatível com o checkout por blocos (Store API), incluindo o bloqueio do campo de e-mail.
HPOS
Compatível com o armazenamento de pedidos de alto desempenho.
Pagamentos rápidos
Proteção do PayPal Express e de outros botões rápidos.
Segurança
O código OTP é armazenado como um hash SHA-256 (nunca em texto simples) e comparado de forma segura; os cookies de verificação são assinados e são HttpOnly/SameSite=Strict. O e-mail verificado nunca é impresso no HTML das páginas em cache.
Idiomas
O plugin inclui traduções em espanhol, português (Brasil) e francês, além do modelo .pot para que possa traduzi-lo para qualquer outro idioma. O idioma base (código-fonte) é o inglês.
10. Solução de problemas
Os e-mails com o código não chegam
O envio depende do wp_mail() do WordPress. Se seu servidor não estiver bem configurado, instale um plugin SMTP (WP Mail SMTP, Post SMTP, etc.) e teste-o.
Verifique a pasta de spam do destinatário.
Confirme que o modelo de e-mail CheckoutOTP está ativo em WooCommerce → Configurações → E-mails.
Como último recurso, ative o Modo de emergência para não bloquear vendas enquanto resolve o e-mail.
O IP registrado não é o do cliente (site atrás do Cloudflare)
Ative a opção 🌐 Site Behind Proxy/CDN. Apenas se seu site estiver realmente atrás do Cloudflare ou de um proxy/CDN.
O cliente continua vendo o checkout sem verificar (cache)
O plugin envia cabeçalhos «no-cache», mas alguns plugins de cache os ignoram.
Exclua do seu cache as páginas de checkout e de verificação.
Os botões de pagamento rápido não são ocultados
Ative o Strict Mode.
Se mesmo assim aparecerem, adicione o respectivo seletor CSS em Custom CSS Selectors.
Um cliente legítimo ficou bloqueado
Vá à aba 🚫 Blocked Emails e clique em Unblock na linha correspondente. Os bloqueios também expiram sozinhos de acordo com a duração configurada.
A coluna «Verification» mostra «Not verified»
Significa que esse pedido foi criado sem uma verificação registrada (por exemplo, um pedido manual feito pelo administrador, ou criado antes de instalar o plugin). É o comportamento correto.
11. Perguntas frequentes
Funciona com o checkout por blocos?
Sim. A verificação, o bloqueio do e-mail e a validação no servidor funcionam tanto no checkout clássico como no de blocos.
Posso usar cliente convidado (sem conta)?
Sim. Os convidados verificam-se da mesma forma, através de um cookie assinado.
É pedido o código ao cliente em cada compra?
Não. Todos (administradores, clientes existentes, contas recém-registradas) verificam apenas uma vez no seu próximo checkout. Depois, são lembrados (conta: de forma permanente; convidado: cookie de 7 ou 30 dias). Para forçar uma nova verificação, no caso de um convidado basta esperar que o cookie expire; numa conta, seria necessário remover a marca de verificação do usuário (ajuste avançado).
Posso mudar a página de verificação?
Sim, qualquer uma que contenha o shortcode [checkoutotp_form]. O plugin a detecta automaticamente.
O que acontece se tiver duas ou mais páginas com o shortcode?
O plugin redireciona sempre para a mais recente. As outras continuam mostrando o formulário se forem visitadas diretamente, mas não são o destino do redirecionamento. Recomendação: use uma única página ativa com o shortcode e deixe as demais como rascunho ou na lixeira.
O que acontece se um atacante tentar muitos códigos?
Cada código admite um número limitado de tentativas. Além disso, o plugin conta as falhas por e-mail e bloqueia o endereço temporariamente ao ultrapassar o limite configurado.
O plugin deixa a loja mais lenta?
Não. Atua apenas nas páginas de checkout e de verificação e não adiciona consultas pesadas ao resto do site.
12. Histórico de alterações
1.3.0
O CSS que oculta o Express Checkout agora só é carregado no checkout, carrinho, produto e página de verificação.
Nova configuração: máximo de envios OTP por hora (limite configurável de pedidos de código).
Os padrões regex personalizados são validados ao salvar, com um aviso claro; os inválidos são descartados.
Removidos métodos e tabela legados sem uso (os OTP usam transients).
Os erros do checkout por blocos agora devolvem um 403 próprio em vez de um 500 genérico.
Os bloqueios de segurança (discrepância de e-mail, express) também aparecem na aba Histórico.
O Modo de emergência registra ativação e desativação ao mudar de estado.
1.2.2
Traduções incluídas: espanhol, português (Brasil) e francês, além do modelo .pot para adicionar mais idiomas.
1.2.1
Removido código legado não usado (uma classe de e-mail antiga e um verificador antigo).
Documentação atualizada para o estado real.
1.2.0
Bloqueio temporário de e-mails por falhas repetidas, com limite e duração configuráveis.
Aba «Blocked Emails» com desbloqueio manual.
Avisos ao administrador com o e-mail completo.
Coluna «Verification» com estado real por pedido (Verified / Not verified).
Bloqueio do campo de e-mail também no checkout por blocos.
1.1.0
Correções de segurança (IP real, cookies reforçados, proteção PayPal, cache sem PII).
1.0.0
Versão inicial: verificação OTP pré-checkout, bloqueio de bots, registros e notificações.
13. Privacidade e dados
O CheckoutOTP armazena seus dados no banco de dados do seu próprio WordPress, então você mantém o controle. Veja o que ele trata:
Endereço de e-mail informado pelo cliente para receber o código, e os e-mails bloqueados temporariamente após falhas repetidas (aba Blocked Emails).
Endereço IP, usado nos limites de frequência e nas verificações de segurança.
Código OTP, armazenado apenas como hash SHA-256 e válido somente pelo tempo de expiração configurado (15 minutos por padrão).
Status de verificação: em clientes cadastrados fica nos metadados do usuário; em convidados, em um cookie assinado (7 dias, ou 30 se marcarem «lembrar de mim»).
Registro de segurança (aba Histórico): eventos como envios, verificações, falhas e bloqueios, que podem incluir o e-mail e o IP envolvidos.
Sem terceiros
O CheckoutOTP não envia dados a terceiros nem a serviços externos. O e-mail com o código é enviado pelo sistema de e-mail do seu próprio site (WordPress ou o serviço SMTP que você configurou).
Retenção e exclusão
Com Auto Purge Logs ativado, os registros antigos são apagados automaticamente após o período de retenção (30 dias por padrão, configurável de 7 a 365).
Os e-mails bloqueados são liberados sozinhos ao fim da duração de bloqueio configurada, ou manualmente na aba Blocked Emails.
Se você excluir o plugin do WordPress (e não apenas desativá-lo), todos os dados dele são removidos: configurações, tabelas, metadados de usuário, cookies de sessão e tarefas agendadas.
Recomendação
Informe na política de privacidade da sua loja que você verifica o e-mail do cliente com um código de uso único e que um cookie de verificação é usado. Se esse cookie exige consentimento depende do seu país, então consulte seu assessor jurídico.
14. Suporte
Se você tiver dúvidas ou problemas, abra um ticket em nossa central de suporte informando a versão do plugin, a versão do WordPress/WooCommerce e uma descrição do problema.