CheckoutOTP

Vérification de l'e-mail par code à usage unique (OTP) avant le paiement WooCommerce. Stoppez la fraude, les fausses commandes et les bots.

WordPress 7.1+ WooCommerce 11.2+ HPOS WooCommerce Blocks PHP 8.3+
Version : 1.3.0 Auteur : Innovedia Pro

1. Introduction

CheckoutOTP ajoute une couche de vérification par e-mail avant que le client n'atteigne le paiement WooCommerce. L'acheteur saisit son e-mail, reçoit un code à 6 chiffres et le confirme. Ce n'est qu'ensuite qu'il peut finaliser l'achat.

Cela vous permet de :

Idée clé La vérification est préalable au paiement : le plugin redirige le client vers une page de vérification et, une fois le code confirmé, le renvoie au paiement avec son e-mail fixé et verrouillé.

2. Exigences

ComposantMinimumTesté sur
WordPress7.17.1.2
WooCommerce11.211.2.1
PHP8.38.3

3. Installation

  1. Téléchargez le paquet checkoutotp.zip.
  2. Dans WordPress, allez dans Extensions → Ajouter → Téléverser une extension.
  3. Sélectionnez le fichier .zip, cliquez sur Installer maintenant, puis sur Activer.
  4. À l'activation, le plugin crée automatiquement ses tables et ses réglages par défaut.
Recommandation Après l'activation, allez dans WooCommerce → CheckoutOTP pour vérifier les réglages avant d'ouvrir votre boutique au public.

4. Configuration initiale

La vérification se produit sur une page de votre site contenant un shortcode. Une seule page suffit.

Étape 1 — Créer la page de vérification

  1. Allez dans Pages → Ajouter.
  2. Donnez-lui un titre, par exemple Order Verification ou Vérification de commande.
  3. Dans le contenu, ajoutez ce shortcode :
[checkoutotp_form]
  1. Publiez la page.
Remarque Le plugin détecte automatiquement la page contenant le shortcode et y redirige les clients non vérifiés. Vous n'avez aucune URL à configurer.
N'utilisez qu'une seule page de vérification S'il existe deux pages publiées ou plus avec le shortcode [checkoutotp_form], le plugin redirige toujours vers la plus récente (la dernière publiée ou mise à jour). Les autres afficheront toujours le formulaire si on les visite directement, mais ne seront jamais la cible de la redirection. Pour éviter toute confusion (par exemple, modifier une page qui n'est pas celle utilisée), gardez une seule page active avec le shortcode et laissez les autres en brouillon ou à la corbeille.

Étape 2 — Régler les valeurs de base

Dans WooCommerce → CheckoutOTP → Settings, vérifiez au minimum :

Étape 3 — Tester

  1. Dans une fenêtre de navigation privée, ajoutez un produit au panier et allez au paiement.
  2. Vous devriez être redirigé vers la page de vérification.
  3. Saisissez votre e-mail, recevez le code et confirmez-le.
  4. Une fois vérifié, vous revenez au paiement avec l'e-mail verrouillé et pouvez finaliser l'achat.

5. Fonctionnement

Le parcours du client

  1. Le client ajoute des produits au panier et tente d'accéder au paiement.
  2. Le plugin le redirige vers la page de vérification ([checkoutotp_form]).
  3. Il saisit son e-mail et clique sur envoyer → il reçoit un code à 6 chiffres par e-mail.
  4. Il saisit le code. S'il est correct, il est vérifié.
  5. Il revient au paiement : son e-mail apparaît fixé et en lecture seule.
  6. Il finalise l'achat.

Quand la vérification est mémorisée

SituationComportement
Premier paiement après l'installation du plugin (administrateurs, clients existants, comptes nouvellement créés)Tout le monde se vérifie une fois, sans exception. Aucun contournement automatique pour les connectés ni pour les comptes anciens.
Client avec un compte, déjà vérifié une foisVérifié de façon permanente (métadonnée utilisateur). Lors des achats suivants, le code ne lui est plus demandé.
Client invitéUn cookie signé est enregistré (7 jours, ou 30 s'il coche « se souvenir de moi »). S'il revient dans ce délai, il reste vérifié.
Important Le badge Verification dans « Mon compte → Commandes » (clients avec compte uniquement) indique si, lors de la création de cette commande, l'acheteur était vérifié. Un client déjà vérifié aura toutes ses commandes marquées « Verified » sans qu'on lui demande le code à chaque fois.

Mode d'urgence

Si l'envoi d'e-mails échoue, le Mode d'urgence désactive temporairement la vérification pour ne pas perdre de ventes. À n'utiliser que ponctuellement et à désactiver dès que possible.

6. Le panneau CheckoutOTP

Tout se gère depuis WooCommerce → CheckoutOTP. Le panneau comporte ces onglets :

OngletÀ quoi il sert
⚙️ SettingsToutes les options de configuration (voir section 7).
📋 Setup InstructionsGuide de démarrage rapide.
📊 StatisticsMesures : codes envoyés, vérifications réussies, tentatives échouées, blocages.
🛡️ API SecurityProtection contre les bots et l'abus de l'API REST.
📜 HistoryLes 50 derniers événements de sécurité (envois, vérifications, échecs, blocages).
🚫 Blocked EmailsE-mails temporairement bloqués, avec un bouton pour les débloquer manuellement.

7. Options de configuration

General OTP Settings

OptionPar défautCe qu'elle fait
OTP Expiry Time15 minDurée de validité du code (1–60).
Maximum Failed Attempts5Tentatives autorisées par code avant de l'invalider (3–20).
Email Block Threshold10Échecs accumulés par e-mail (entre les codes) avant blocage (3–50).
Email Block Duration60 minDurée pendant laquelle un e-mail reste bloqué (5–1440 min).
🚨 Emergency ModeNonDésactive temporairement la vérification (urgences).
🌐 Site Behind Proxy/CDNNonActivez si votre site est derrière Cloudflare ou un proxy/CDN, pour détecter l'IP réelle du visiteur.

Express Checkout Protection

Masque les boutons de paiement express (PayPal, Google Pay, Apple Pay, Stripe…) aux clients qui ne sont pas encore vérifiés, afin qu'ils ne puissent pas contourner la vérification.

OptionPar défautCe qu'elle fait
🔒 Strict ModeNonMasque les boutons de paiement express à l'aide de motifs CSS génériques (plus agressif).
Custom CSS Selectors—Sélecteurs CSS supplémentaires de votre thème/plugins (un par ligne) pour masquer des boutons précis.
À garder en tête Le masquage visuel est une barrière au mieux (elle peut être contournée en manipulant le HTML). La protection réelle contre le débit sans vérification sur PayPal est appliquée sur le serveur de votre WordPress : le plugin intercepte la requête de paiement express avant qu'elle ne soit envoyée à PayPal, de sorte qu'aucun débit n'est effectué. Le serveur de PayPal n'intervient pas.

Security Notifications

OptionPar défautCe qu'elle fait
Admin Notification Recipients—E-mails qui reçoivent les alertes (vous pouvez en ajouter plusieurs).
Notify When User is BlockedNonPrévient lorsqu'un e-mail est bloqué après des échecs répétés.
Notify on Multiple Failed AttemptsNonPrévient en cas de plusieurs tentatives échouées.

REST API Security

OptionPar défautCe qu'elle fait
Maximum Orders Per Hour5Limite de commandes par heure par IP/e-mail (1–50).
Block Bot User-AgentsNonBloque les requêtes des bots connus par leur User-Agent.
Notify on API AbuseNonPrévient en cas d'abus de l'API REST.
Notify on Suspicious OrdersNonPrévient lorsqu'une commande est signalée comme suspecte.

Configurable Block Lists

OptionCe qu'elle fait
Custom Disposable Email DomainsDomaines d'e-mail temporaire supplémentaires à rejeter (un par ligne). Ils sont ajoutés à la liste intégrée de 32 domaines ; ils ne la remplacent pas.
Custom Suspicious User-AgentsSignatures de bots supplémentaires (une par ligne).
Custom Suspicious NamesNoms suspects (par ex. « test », « asdf ») qui déclenchent la détection.
Enable Regex PatternsTraite les listes ci-dessus comme des expressions régulières (avancé).
Liste de domaines jetables intégrée Le plugin rejette déjà, sans aucune configuration, ces 32 domaines d'e-mail temporaire : 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 et tempail.com. Le champ Custom Disposable Email Domains ajoute des domaines à cette liste, ne la remplace jamais.

Data Maintenance

OptionPar défautCe qu'elle fait
Auto Purge LogsOuiSupprime automatiquement les anciens enregistrements.
Log Retention Period30 joursNombre de jours de conservation des enregistrements (7–365).
À la désinstallation Si vous supprimez le plugin depuis WordPress (et non un simple désactivation), il efface complètement ses données : réglages, tables, métadonnées utilisateur, cookies de session et tâches planifiées. Il ne laisse aucune trace dans la base de données.

Design & Colors

Personnalisez l'apparence du formulaire de vérification :

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

8. E-mails et personnalisation

Le code OTP est envoyé comme un e-mail WooCommerce, il apparaît donc dans WooCommerce → Réglages → E-mails sous le nom CheckoutOTP. De là, vous pouvez modifier l'objet, l'en-tête et le pied de page, et même le désactiver.

Modèles d'e-mail

Le plugin inclut deux modèles :

Comment personnaliser sans perdre les modifications lors d'une mise à jour Copiez le modèle dans le dossier de votre thème, en respectant le chemin WooCommerce :
votre-theme/woocommerce/emails/checkoutotp-otp.php
(pour la version texte brut, votre-theme/woocommerce/emails/plain/checkoutotp-otp.php). WordPress utilisera votre copie à la place de celle du plugin.

9. Compatibilité

Paiement classique

Compatible avec le paiement par shortcode de WooCommerce.

WooCommerce Blocks

Compatible avec le paiement par blocs (Store API), y compris le verrouillage du champ e-mail.

HPOS

Compatible avec le stockage des commandes à hautes performances.

Paiements express

Protection de PayPal Express et des autres boutons express.

Sécurité Le code OTP est stocké sous forme de hachage SHA-256 (jamais en texte clair) et comparé de manière sécurisée ; les cookies de vérification sont signés et sont HttpOnly/SameSite=Strict. L'e-mail vérifié n'est jamais imprimé dans le HTML des pages mises en cache.
Langues Le plugin inclut des traductions en espagnol, portugais (Brésil) et français, ainsi que le modèle .pot pour le traduire dans n'importe quelle autre langue. La langue de base (code source) est l'anglais.

10. Dépannage

Les e-mails contenant le code n'arrivent pas

L'IP enregistrée n'est pas celle du client (site derrière Cloudflare)

Activez l'option 🌐 Site Behind Proxy/CDN. Uniquement si votre site est réellement derrière Cloudflare ou un proxy/CDN.

Le client voit toujours le paiement sans vérifier (cache)

Les boutons de paiement express ne sont pas masqués

Un client légitime a été bloqué

Allez dans l'onglet 🚫 Blocked Emails et cliquez sur Unblock sur sa ligne. Les blocages expirent également d'eux-mêmes selon la durée configurée.

La colonne « Verification » affiche « Not verified »

Cela signifie que cette commande a été créée sans vérification enregistrée (par exemple, une commande manuelle créée par l'administrateur, ou créée avant l'installation du plugin). C'est le comportement correct.

11. FAQ

Fonctionne-t-il avec le paiement par blocs ?

Oui. La vérification, le verrouillage de l'e-mail et la validation côté serveur fonctionnent à la fois sur le paiement classique et par blocs.

Puis-je utiliser un client invité (sans compte) ?

Oui. Les invités se vérifient de la même manière, à l'aide d'un cookie signé.

Le code est-il demandé au client à chaque achat ?

Non. Tout le monde (administrateurs, clients existants, comptes nouvellement créés) ne se vérifie qu'une seule fois lors de son prochain paiement. Ensuite, il est mémorisé (compte : de façon permanente ; invité : cookie de 7 ou 30 jours). Pour forcer une nouvelle vérification, pour un invité il suffit d'attendre l'expiration du cookie ; sur un compte, il faudrait supprimer la marque de vérification de l'utilisateur (avancé).

Puis-je changer la page de vérification ?

Oui, toute page contenant le shortcode [checkoutotp_form]. Le plugin la détecte automatiquement.

Que se passe-t-il si j'ai deux pages ou plus avec le shortcode ?

Le plugin redirige toujours vers la plus récente. Les autres affichent toujours le formulaire si on les visite directement, mais ne sont pas la cible de la redirection. Recommandation : utilisez une seule page active avec le shortcode et laissez les autres en brouillon ou à la corbeille.

Que se passe-t-il si un attaquant essaie de nombreux codes ?

Chaque code autorise un nombre limité de tentatives. De plus, le plugin compte les échecs par e-mail et bloque temporairement l'adresse dès que le seuil configuré est dépassé.

Le plugin ralentit-il la boutique ?

Non. Il n'agit que sur les pages de paiement et de vérification et n'ajoute aucune requête lourde au reste du site.

12. Journal des modifications

1.3.0

1.2.2

1.2.1

1.2.0

1.1.0

1.0.0

13. Confidentialité et données

CheckoutOTP conserve ses données dans la base de données de votre propre WordPress, vous gardez donc le contrôle. Voici ce qu'il traite :

Aucun tiers CheckoutOTP n'envoie aucune donnée à des tiers ni à des services externes. L'e-mail contenant le code est envoyé par le système de messagerie de votre propre site (WordPress ou le service SMTP que vous avez configuré).

Conservation et suppression

Recommandation Indiquez dans la politique de confidentialité de votre boutique que vous vérifiez l'e-mail du client par un code à usage unique et qu'un cookie de vérification est utilisé. La nécessité d'un consentement pour ce cookie dépend de votre pays ; rapprochez-vous de votre conseiller juridique.

14. Assistance

Si vous avez des questions ou des problèmes, ouvrez un ticket dans notre centre d'assistance en indiquant la version du plugin, la version de WordPress/WooCommerce et une description du problème.