CheckoutOTP

Verificación de correo con código de un solo uso (OTP) antes del checkout de WooCommerce. Detén fraudes, pedidos falsos y bots.

WordPress 7.1+ WooCommerce 11.2+ HPOS WooCommerce Blocks PHP 8.3+
Versión: 1.3.0 Autor: Innovedia Pro

1. Introducción

CheckoutOTP añade una capa de verificación por correo electrónico antes de que el cliente llegue al checkout de WooCommerce. El comprador introduce su email, recibe un código de 6 dígitos y lo confirma. Solo entonces puede completar la compra.

Con esto consigues:

Idea clave La verificación es previa al checkout: el plugin redirige al cliente a una página de verificación y, al confirmar el código, lo devuelve al checkout con su email fijado y bloqueado.

2. Requisitos

ComponenteMínimoProbado en
WordPress7.17.1.2
WooCommerce11.211.2.1
PHP8.38.3

3. Instalación

  1. Descarga el paquete checkoutotp.zip.
  2. En WordPress ve a Plugins → Añadir nuevo → Subir plugin.
  3. Selecciona el archivo .zip, pulsa Instalar ahora y luego Activar.
  4. Al activarse, el plugin crea sus tablas y ajustes por defecto automáticamente.
Recomendación Tras activar, entra a WooCommerce → CheckoutOTP para revisar los ajustes antes de abrir la tienda al público.

4. Configuración inicial

La verificación ocurre en una página de tu sitio que contiene un shortcode. Solo necesitas una página para esto.

Paso 1 — Crear la página de verificación

  1. Ve a Páginas → Añadir nueva.
  2. Ponle un título, por ejemplo Order Verification o Verificación de pedido.
  3. En el contenido, añade este shortcode:
[checkoutotp_form]
  1. Publica la página.
Nota El plugin detecta automáticamente la página que contiene el shortcode y redirige ahí a los clientes sin verificar. No necesitas configurar ninguna URL.
Usa una sola página de verificación Si existen dos o más páginas publicadas con el shortcode [checkoutotp_form], el plugin redirige siempre a la más reciente (la última publicada o actualizada). Las demás seguirán mostrando el formulario si se visitan directamente, pero nunca serán el destino de la redirección. Para evitar confusiones (por ejemplo, editar una página que no es la que se usa), mantén una única página activa con el shortcode y deja las demás en borrador o en la papelera.

Paso 2 — Ajustar los valores básicos

En WooCommerce → CheckoutOTP → Settings revisa, como mínimo:

Paso 3 — Probar

  1. En una ventana de incógnito, añade un producto al carrito y ve al checkout.
  2. Deberías ser redirigido a la página de verificación.
  3. Introduce tu email, recibe el código y confírmalo.
  4. Al verificarte, volverás al checkout con el email bloqueado y podrás completar la compra.

5. Cómo funciona

El recorrido del cliente

  1. El cliente agrega productos al carrito e intenta entrar al checkout.
  2. El plugin lo redirige a la página de verificación ([checkoutotp_form]).
  3. Introduce su email y pulsa enviar → recibe un código de 6 dígitos por correo.
  4. Introduce el código. Si es correcto, queda verificado.
  5. Vuelve al checkout: su email aparece fijado y en solo lectura.
  6. Completa la compra.

Cuándo se recuerda la verificación

SituaciónComportamiento
Primer checkout tras instalar el plugin (administradores, clientes existentes, cuentas recién registradas)Todos se verifican una vez, sin excepciones. No hay bypass automático por estar logueado ni por tener una cuenta antigua.
Cliente con cuenta, ya verificado una vezQueda verificado de forma permanente (meta de usuario). En sus siguientes compras no se le vuelve a pedir el código.
Cliente invitadoSe guarda una cookie firmada (7 días, o 30 si marca «recordarme»). Al volver dentro de ese plazo, sigue verificado.
Importante La insignia Verification en «Mis pedidos» (solo para clientes con cuenta) indica si, al crear ese pedido, el comprador estaba verificado. Un cliente ya verificado tendrá todos sus pedidos marcados como «Verified» sin que se le pida el código cada vez.

Modo de emergencia

Si el envío de correos falla, el Modo de emergencia desactiva temporalmente la verificación para no perder ventas. Úsalo solo como solución puntual y desactívalo cuanto antes.

6. El panel de CheckoutOTP

Todo se gestiona desde WooCommerce → CheckoutOTP. El panel tiene estas pestañas:

PestañaPara qué sirve
⚙️ SettingsTodas las opciones de configuración (ver sección 7).
📋 Setup InstructionsGuía rápida de puesta en marcha.
📊 StatisticsMétricas: códigos enviados, verificaciones correctas, intentos fallidos, bloqueos.
🛡️ API SecurityProtección frente a bots y abuso de la API REST.
📜 HistoryÚltimos 50 eventos de seguridad (envíos, verificaciones, fallos, bloqueos).
🚫 Blocked EmailsCorreos bloqueados temporalmente, con botón para desbloquearlos manualmente.

7. Opciones de configuración

General OTP Settings

OpciónPor defectoQué hace
OTP Expiry Time15 minMinutos de validez del código (1–60).
Maximum Failed Attempts5Fallos permitidos por código antes de invalidarlo (3–20).
Email Block Threshold10Fallos acumulados por correo (entre códigos) antes de bloquearlo (3–50).
Email Block Duration60 minCuánto tiempo queda bloqueado un correo (5–1440 min).
🚨 Emergency ModeNoDesactiva la verificación temporalmente (emergencias).
🌐 Site Behind Proxy/CDNNoActívalo si tu sitio está detrás de Cloudflare o un proxy/CDN, para detectar la IP real del visitante.

Express Checkout Protection

Oculta los botones de pago exprés (PayPal, Google Pay, Apple Pay, Stripe…) a los clientes que aún no están verificados, para que no puedan saltarse la verificación.

OpciónPor defectoQué hace
🔒 Strict ModeNoOculta botones de pago exprés mediante patrones CSS genéricos (más agresivo).
Custom CSS Selectors—Selectores CSS adicionales de tu tema/plugins (uno por línea) para ocultar botones concretos.
Ten en cuenta El ocultamiento visual es una barrera de mejor esfuerzo (se puede burlar manipulando el HTML). La protección real contra el cobro sin verificación en PayPal se aplica en el servidor de tu WordPress: el plugin intercepta la petición de pago exprés antes de que se envíe a PayPal, de modo que no se realiza ningún cobro. No interviene el servidor de PayPal.

Security Notifications

OpciónPor defectoQué hace
Admin Notification Recipients—Correos que reciben las alertas (puedes añadir varios).
Notify When User is BlockedNoAvisa cuando un correo queda bloqueado por fallos repetidos.
Notify on Multiple Failed AttemptsNoAvisa cuando hay varios intentos fallidos.

REST API Security

OpciónPor defectoQué hace
Maximum Orders Per Hour5Límite de pedidos por hora por IP/email (1–50).
Block Bot User-AgentsNoBloquea peticiones de bots conocidos por su User-Agent.
Notify on API AbuseNoAvisa ante abuso de la API REST.
Notify on Suspicious OrdersNoAvisa cuando un pedido se marca como sospechoso.

Configurable Block Lists

OpciónQué hace
Custom Disposable Email DomainsDominios de correo temporal adicionales que quieres rechazar (uno por línea). Se suman a la lista integrada de 32 dominios; no la reemplazan.
Custom Suspicious User-AgentsFirmas de bots adicionales (una por línea).
Custom Suspicious NamesNombres sospechosos (p. ej. «test», «asdf») que activan la detección.
Enable Regex PatternsTrata las listas anteriores como expresiones regulares (avanzado).
Lista de dominios desechables incluida El plugin ya rechaza, sin configurar nada, estos 32 dominios de correo temporal: 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 y tempail.com. El campo Custom Disposable Email Domains añade dominios a esta lista, nunca la sustituye.

Data Maintenance

OpciónPor defectoQué hace
Auto Purge LogsSíElimina automáticamente los registros antiguos.
Log Retention Period30 díasCuántos días se conservan los registros (7–365).
Al desinstalar Si eliminas el plugin desde WordPress (no solo lo desactivas), borra por completo sus datos: ajustes, tablas, metadatos de usuario, cookies de sesión y tareas programadas. No deja rastro en la base de datos.

Design & Colors

Personaliza el aspecto del formulario de verificación:

Header Background Color Header Text Color Button Background Color Button Text Color

8. Correos y personalización

El código OTP se envía como un correo de WooCommerce, por lo que aparece en WooCommerce → Ajustes → Correos con el nombre CheckoutOTP. Desde ahí puedes cambiar el asunto, el encabezado y el pie, e incluso desactivarlo.

Plantillas de correo

El plugin incluye dos plantillas:

Cómo personalizar sin perder cambios al actualizar Copia la plantilla a la carpeta de tu tema, respetando la ruta de WooCommerce:
tu-tema/woocommerce/emails/checkoutotp-otp.php
(para la versión de texto plano, tu-tema/woocommerce/emails/plain/checkoutotp-otp.php). WordPress usará tu copia en lugar de la del plugin.

9. Compatibilidad

Checkout clásico

Compatible con el checkout por shortcode de WooCommerce.

WooCommerce Blocks

Compatible con el checkout por bloques (Store API), incluido el bloqueo del campo de email.

HPOS

Compatible con el almacenamiento de pedidos de alto rendimiento.

Pagos exprés

Protección de PayPal Express y otros botones exprés.

Seguridad El código OTP se almacena como un hash SHA-256 (nunca en texto plano) y se compara de forma segura; las cookies de verificación están firmadas y son HttpOnly/SameSite=Strict. El email verificado nunca se imprime en el HTML de páginas cacheadas.
Idiomas El plugin incluye traducciones al español, portugués (Brasil) y francés, además de la plantilla .pot para que puedas traducirlo a cualquier otro idioma. El idioma base (código fuente) es el inglés.

10. Solución de problemas

No llegan los correos con el código

La IP que se registra no es la del cliente (sitio tras Cloudflare)

Activa la opción 🌐 Site Behind Proxy/CDN. Solo si tu sitio está realmente detrás de Cloudflare o un proxy/CDN.

El cliente sigue viendo el checkout sin verificar (caché)

No se ocultan los botones de pago exprés

Un cliente legítimo quedó bloqueado

Ve a la pestaña 🚫 Blocked Emails y pulsa Unblock en su fila. Los bloqueos también caducan solos según la duración configurada.

La columna «Verification» muestra «Not verified»

Significa que ese pedido se creó sin una verificación registrada (por ejemplo, un pedido manual del administrador, o creado antes de instalar el plugin). Es el comportamiento correcto.

11. Preguntas frecuentes

¿Funciona con el checkout por bloques?

Sí. La verificación, el bloqueo del email y la validación en el servidor funcionan tanto en checkout clásico como en bloques.

¿Puedo usar un cliente invitado (sin cuenta)?

Sí. Los invitados se verifican igual mediante una cookie firmada.

¿Se le pide el código al cliente en cada compra?

No. Todos (administradores, clientes existentes, cuentas recién registradas) se verifican una sola vez en su próximo checkout. Después se les recuerda (cuenta: de forma permanente; invitado: cookie de 7 o 30 días). Para forzar una nueva verificación, en un invitado basta con que espere a que caduque la cookie; en una cuenta, se necesitaría eliminar la marca de verificación del usuario (ajuste avanzado).

¿Puedo cambiar la página de verificación?

Sí, cualquiera que contenga el shortcode [checkoutotp_form]. El plugin la detecta solo.

¿Qué pasa si tengo dos o más páginas con el shortcode?

El plugin redirige siempre a la más reciente. Las demás siguen mostrando el formulario si se visitan directamente, pero no son el destino de la redirección. Recomendación: usa una sola página activa con el shortcode y deja las demás en borrador o papelera.

¿Qué pasa si un atacante prueba muchos códigos?

Cada código admite un número limitado de intentos. Además, el plugin cuenta los fallos por correo y bloquea la dirección temporalmente al superar el umbral configurado.

¿El plugin ralentiza la tienda?

No. Solo actúa en las páginas de checkout y verificación, y no añade consultas pesadas en el resto del sitio.

12. Registro de cambios

1.3.0

1.2.2

1.2.1

1.2.0

1.1.0

1.0.0

13. Privacidad y datos

CheckoutOTP guarda sus datos en tu propia base de datos de WordPress, así que tú tienes el control. Esto es lo que gestiona:

Sin terceros CheckoutOTP no envía datos a terceros ni a servicios externos. El correo con el código se envía a través del sistema de correo de tu propio sitio (WordPress o el servicio SMTP que hayas configurado).

Conservación y eliminación

Recomendación Indica en la política de privacidad de tu tienda que verificas el correo del cliente con un código de un solo uso y que se utiliza una cookie de verificación. Si esa cookie requiere consentimiento depende de tu país, así que consúltalo con tu asesor legal.

14. Soporte

Si tienes dudas o incidencias, abre un ticket en nuestro centro de soporte indicando la versión del plugin, la versión de WordPress/WooCommerce y una descripción del problema.