CheckoutOTP

Verificação de e-mail com código de uso único (OTP) antes do checkout do WooCommerce. Trave fraudes, pedidos falsos e bots.

WordPress 7.1+ WooCommerce 11.2+ HPOS WooCommerce Blocks PHP 8.3+
Versão: 1.3.0 Autor: Innovedia Pro

1. Introdução

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:

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

ComponenteMínimoTestado em
WordPress7.17.1.2
WooCommerce11.211.2.1
PHP8.38.3

3. Instalação

  1. Baixe o pacote checkoutotp.zip.
  2. No WordPress, acesse Plugins → Adicionar novo plugin → Enviar plugin.
  3. Selecione o arquivo .zip, clique em Instalar agora e depois em Ativar.
  4. 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

  1. Vá a Páginas → Adicionar nova.
  2. Dê um título a ela, por exemplo Order Verification ou Verificação de pedido.
  3. No conteúdo, adicione este shortcode:
[checkoutotp_form]
  1. 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:

Passo 3 — Testar

  1. Em uma janela anônima, adicione um produto ao carrinho e vá ao checkout.
  2. Deve ser redirecionado para a página de verificação.
  3. Informe seu e-mail, receba o código e confirme-o.
  4. Depois de verificado, volta ao checkout com o e-mail bloqueado e pode concluir a compra.

5. Como funciona

A jornada do cliente

  1. O cliente adiciona produtos ao carrinho e tenta entrar no checkout.
  2. O plugin o redireciona para a página de verificação ([checkoutotp_form]).
  3. Informa seu e-mail e clica em enviar → recebe um código de 6 dígitos por e-mail.
  4. Informa o código. Se estiver correto, fica verificado.
  5. Volta ao checkout: o e-mail aparece fixado e só de leitura.
  6. Conclui a compra.

Quando a verificação é lembrada

SituaçãoComportamento
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 vezFica verificado de forma permanente (meta de usuário). Nas compras seguintes o código não é solicitado novamente.
Cliente convidadoUm 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:

AbaPara que serve
⚙️ SettingsTodas as opções de configuração (ver seção 7).
📋 Setup InstructionsGuia rápido de configuração.
📊 StatisticsMétricas: códigos enviados, verificações bem-sucedidas, tentativas com falha, bloqueios.
🛡️ API SecurityProteção contra bots e abuso da API REST.
📜 HistoryÚltimos 50 eventos de segurança (envios, verificações, falhas, bloqueios).
🚫 Blocked EmailsE-mails bloqueados temporariamente, com botão para desbloqueá-los manualmente.

7. Opções de configuração

General OTP Settings

OpçãoPadrãoO que faz
OTP Expiry Time15 minMinutos de validade do código (1–60).
Maximum Failed Attempts5Tentativas permitidas por código antes de o invalidar (3–20).
Email Block Threshold10Tentativas acumuladas por e-mail (entre códigos) antes de o bloquear (3–50).
Email Block Duration60 minQuanto tempo um e-mail fica bloqueado (5–1440 min).
🚨 Emergency ModeNãoDesativa temporariamente a verificação (emergências).
🌐 Site Behind Proxy/CDNNãoAtive 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çãoPadrãoO que faz
🔒 Strict ModeNãoOculta 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çãoPadrãoO que faz
Admin Notification Recipients—E-mails que recebem os alertas (você pode adicionar vários).
Notify When User is BlockedNãoAvisa quando um e-mail fica bloqueado por falhas repetidas.
Notify on Multiple Failed AttemptsNãoAvisa quando há várias tentativas com falha.

REST API Security

OpçãoPadrãoO que faz
Maximum Orders Per Hour5Limite de pedidos por hora por IP/e-mail (1–50).
Block Bot User-AgentsNãoBloqueia pedidos de bots conhecidos pelo seu User-Agent.
Notify on API AbuseNãoAvisa em caso de abuso da API REST.
Notify on Suspicious OrdersNãoAvisa quando um pedido é marcado como suspeito.

Configurable Block Lists

OpçãoO que faz
Custom Disposable Email DomainsDomí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-AgentsAssinaturas de bots adicionais (uma por linha).
Custom Suspicious NamesNomes suspeitos (por exemplo «test», «asdf») que ativam a detecção.
Enable Regex PatternsTrata 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çãoPadrãoO que faz
Auto Purge LogsSimExclui automaticamente os registros antigos.
Log Retention Period30 diasQuantos 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 Color Header Text Color Button Background Color Button 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:

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 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)

Os botões de pagamento rápido não são ocultados

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

1.2.2

1.2.1

1.2.0

1.1.0

1.0.0

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:

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

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.