Le formulaire de rétractation en ligne pour votre boutique PrestaShop
Depuis le 19 juin 2026, une boutique en ligne doit permettre au consommateur de se rétracter directement en ligne et lui en accuser réception sur un support durable. LNK Rétractation installe le parcours complet : bouton, formulaire en deux temps, accusé horodaté avec sa déclaration en PDF, et un registre des demandes dans le back-office, rangé sous SAV.
- Version 3.1.0 · PrestaShop 1.7.6 à 8.x
- Version 3.9.0 · PrestaShop 9
- PrestaShop 8.0 à 9.x
- PHP 7.2 à 8.4
- Aucun override
Captures d'écran
Points clés
- Formulaire de rétractation en ligne conforme à L.221-21 et D.221-5
- Parcours en deux temps : la confirmation vaut rétractation, sa date fait foi
- Accusé de réception horodaté par e-mail, déclaration jointe en PDF
- Rétractation totale ou partielle, le client précise les articles
- Le contrôle de commande signale, il ne bloque jamais
- Journal horodaté de chaque demande, statut changé au nom de l'employé
- Liste filtrée par statut, recherche, renvoi de l'accusé
- Export CSV du filtre en cours, droit de modification exigé, cellules neutralisées
- Aperçu en direct des réglages, sur ordinateur et mobile
- Purge automatique paramétrable (RGPD), tables gardées à la désinstallation
- Anti-robots : champ piège et limite par adresse IP
- PrestaShop 8.0 à 9.x, sans override, en français, anglais et arabe
Ce que la loi impose depuis juin 2026
L'article L.221-21 du Code de la consommation et le décret D.221-5 imposent au professionnel de mettre à disposition une fonctionnalité de rétractation en ligne, et de transmettre sans délai au consommateur un accusé de réception sur un support durable. L'obligation s'applique depuis le 19 juin 2026.
Trois choses doivent donc exister sur la boutique : un point d'entrée visible et sans ambiguïté, un formulaire qui enregistre la demande, et une preuve de réception envoyée au client. Une adresse e-mail dans les mentions légales ne remplit aucune des trois.
Un parcours en deux temps, pour que la date fasse foi
Le client remplit le formulaire : nom, adresse postale, e-mail, référence de commande, et l'étendue de sa rétractation, toute la commande ou une partie des articles. Rien n'est acté à ce premier envoi : un second écran reprend sa déclaration, et c'est le clic de confirmation qui vaut rétractation. Cette date est celle qui est enregistrée, à l'heure de la boutique.
L'accusé de réception part aussitôt par e-mail, avec la déclaration jointe en PDF, et la boutique reçoit sa copie. Si l'envoi échoue, la rétractation reste valable : le client garde sa référence à l'écran et la boutique est prévenue.
Le contrôle de commande signale, il ne bloque jamais
Le module peut rapprocher la référence de commande de l'e-mail saisi. Si le rapprochement échoue, la demande est quand même enregistrée et marquée « à vérifier ». Une commande passée en invité, une adresse changée depuis, une référence recopiée avec une coquille : rien de tout cela ne peut faire obstacle à l'exercice d'un droit.
Un champ piège et une limite de cinq dépôts par heure et par adresse IP écartent les robots sans gêner un client réel. Le lien de confirmation est un jeton imprévisible, valable 30 jours par défaut.
Un registre dans le back-office, rangé sous SAV
Les demandes ont leur page sous SAV > LNK Rétractation, avec l'habillage commun des modules LNK :
- la liste, filtrée par statut avec le compte de chaque filtre (à confirmer, confirmées, acceptées, refusées, remboursées, à vérifier), une recherche par référence, nom ou e-mail, et le nombre de demandes en cours ;
- la fiche d'une demande : client, commande, étendue, la déclaration exacte confirmée par le client, l'accusé (date, référence, adresse IP, navigateur) et le journal horodaté de chaque étape ;
- les actions : changer le statut, noté au journal avec le nom de l'employé, et renvoyer l'accusé au client.
Export CSV des demandes
Un bouton exporte en CSV les demandes du filtre en cours, prêtes pour un tableur. Ce sont des données personnelles, l'export est donc encadré :
- il exige le droit de modification sur la page, un simple droit de lecture ne suffit pas ;
- chaque export est inscrit au journal de PrestaShop, avec l'employé, le filtre et le nombre de demandes ;
- les cellules qui commencent par
=,+,-ou@sont neutralisées : un texte saisi dans le formulaire ne peut pas devenir une formule dans le tableur.
Réglages avec aperçu en direct
Les réglages se rangent en rubriques : bouton et parcours (libellés dans chaque langue, couleur), emplacement (pied de page, espace client), accusé de réception (gabarit, expéditeur, copie à la boutique), délais et conservation. À droite, un aperçu en direct montre le bouton, le formulaire et la page de confirmation pendant la saisie, sur ordinateur ou sur mobile, et s'agrandit en pleine largeur.
Le point d'entrée se place où vous voulez : un bouton dans le pied de page, un lien dans une colonne du module officiel « Liens du pied de page », ou nulle part si vous le posez vous-même. Un lien s'ajoute aussi dans l'espace client. L'accusé prend le gabarit du module ou le thème d'e-mail de votre boutique.
Des preuves gardées, des données limitées
Les tables ne sont pas supprimées à la désinstallation : une demande de rétractation est une preuve, elle doit survivre au retrait d'un logiciel. À l'inverse, une purge automatique efface, journal compris, les demandes plus anciennes que la durée choisie (60 mois par défaut, la prescription commerciale ; 0 pour ne rien purger). Une demande confirmée qui attend encore votre décision n'est jamais purgée.
Léger et rapide
Chiffres mesurés sur le module livré, compressé en gzip (niveau 9). Une feuille de style de 1,0 Ko pour le bouton et le formulaire, chargée sur les pages de la boutique puisque le bouton peut paraître dans le pied de page de chacune. Un script de 0,66 Ko, chargé seulement sur les pages du formulaire et de la confirmation. Aucune police ajoutée, aucune ressource externe.
Compatibilité PrestaShop 8 et 9
| PrestaShop | 8.0 → 9.x |
| PHP | 8.1 → 8.4 pour PrestaShop 9 |
| Livraison | Deux archives : 3.9.N pour PrestaShop 9, 3.1.N pour PrestaShop 8.0 à 8.x |
| Back-office | Symfony natif sur PrestaShop 9, contrôleur d'administration classique sur PrestaShop 8 |
| Contient un override | Non |
| Langues | Français, anglais et arabe livrés complets, de droite à gauche en arabe |
| Ressources externes | Aucune |
Chaque version est vérifiée par une installation réelle : PrestaShop 8.1 pour l'archive 3.1.N, PrestaShop 9.0 pour l'archive 3.9.N. Les essais portent sur l'installation, le back-office et la désinstallation.
Questions fréquentes
Le formulaire de rétractation en ligne est-il vraiment obligatoire ?
Oui, depuis le 19 juin 2026. L'article L.221-21 du Code de la consommation impose au professionnel de proposer au consommateur un moyen de se rétracter en ligne, et le décret D.221-5 en fixe les modalités, dont l'accusé de réception sur un support durable.
Un lien « contactez-nous » suffit-il ?
Non. Le texte demande une fonctionnalité dédiée qui permet de former la rétractation en ligne, et un accusé de réception. Un formulaire de contact générique ne fournit ni l'un ni l'autre.
Comment se passe la rétractation pour le client ?
Il clique sur le bouton, remplit le formulaire (nom, adresse postale, e-mail, référence de commande, étendue), puis confirme sur un second écran qui reprend sa déclaration. Ce clic de confirmation vaut rétractation : il reçoit aussitôt l'accusé de réception par e-mail, avec sa déclaration en PDF.
Le client peut-il se rétracter sur une partie de la commande seulement ?
Oui. Le formulaire propose la rétractation de toute la commande ou d'une partie des articles, avec un champ pour désigner les articles et leur quantité.
Et si le client se trompe de référence de commande ?
Sa demande est quand même enregistrée, et marquée « à vérifier » dans la liste. Le module ne peut pas faire obstacle à l'exercice d'un droit parce qu'un contrôle technique a échoué.
Où retrouver les demandes dans le back-office ?
Sous SAV > LNK Rétractation. La liste se filtre par statut, avec le compte de chaque filtre, et se fouille par référence, nom ou e-mail. La fiche d'une demande montre la déclaration confirmée, l'accusé et le journal horodaté ; vous y changez le statut et pouvez renvoyer l'accusé.
Puis-je exporter les demandes ?
Oui, en CSV, pour le filtre en cours. L'export exige le droit de modification sur la page, il est inscrit au journal de PrestaShop avec le nom de l'employé, et les cellules qui commencent par = + - ou @ sont neutralisées pour qu'aucun texte saisi ne devienne une formule dans le tableur. Ce fichier contient des données personnelles : ne le gardez que le temps de votre traitement.
Combien de temps les données sont-elles conservées ?
Le temps que vous décidez. Une purge automatique supprime, journal compris, les demandes plus anciennes que la durée choisie : 60 mois par défaut, la prescription commerciale, ou 0 pour ne rien purger. Une demande confirmée qui attend votre décision n'est jamais purgée.
Que se passe-t-il si je désinstalle le module ?
Les demandes déjà reçues restent en base : ce sont des preuves, elles doivent rester consultables même si vous changez de solution. La configuration et l'entrée de menu sont retirées.
Faut-il modifier mon thème ?
Non. Le module pose lui-même le bouton dans le pied de page, ou un lien dans une colonne du module officiel « Liens du pied de page », et un lien dans l'espace client. Un aperçu en direct montre le bouton, le formulaire et la confirmation pendant que vous réglez les libellés et la couleur.
L'accusé de réception peut-il prendre l'apparence de mes autres e-mails ?
Oui. Il part avec le gabarit du module, ou avec le thème d'e-mail de la boutique une fois ses modèles générés dans Apparence > Thème d'e-mail. Tant qu'ils ne le sont pas, l'accusé part avec le gabarit du module, sans jamais manquer.
Est-ce compatible avec PrestaShop 8 et 9 ?
Oui, avec deux archives : 3.9.N pour PrestaShop 9, 3.1.N pour PrestaShop 8.0 à 8.x. Le module ne surcharge aucune classe du cœur.
Est-ce que ça ralentit ma boutique ?
Non. La feuille de style du bouton pèse 1,0 Ko compressée ; le script de 0,66 Ko ne se charge que sur les pages du formulaire et de la confirmation. Aucune ressource externe.
Fonctionne-t-il en multiboutique ?
Oui. Chaque boutique a ses réglages et sa durée de conservation : la purge automatique n'efface que les demandes de la boutique concernée, selon sa propre durée. En contexte « Toutes les boutiques », la liste montre les demandes de chaque boutique avec son nom, et l'export CSV ajoute une colonne Boutique.
Journal des versions
-
Version 3.9.0 PrestaShop 9
Nouveautés
- Export CSV des demandes du filtre en cours, prêt pour un tableur (point-virgule, UTF-8). Droit de modification exigé, chaque export inscrit au journal de PrestaShop avec l'employé, et cellules qui commencent par = + - @ neutralisées contre l'injection de formules.
- Aperçu en direct à droite des réglages : bouton du pied de page, formulaire et page de confirmation, avec la couleur et les libellés saisis, sur ordinateur ou mobile, agrandi en pleine largeur.
- Traductions complètes du module en français, anglais et arabe (back-office, boutique, e-mails).
Modifications
- Back-office sur l'habillage commun des modules LNK : liste filtrée par statut avec le compte de chaque filtre, recherche par référence, nom ou e-mail ; fiche d'une demande en rubriques (demande, déclaration, accusé, journal) avec le changement de statut et le renvoi de l'accusé ; réglages en rubriques (bouton et parcours, emplacement, accusé, délais et conservation).
- L'onglet devient SAV > LNK Rétractation, au nom traduit ; l'ancien onglet est déplacé et renommé à la mise à jour.
- « Configurer » dans le gestionnaire de modules mène aux réglages de cette page.
- Archive 3.9.N pour PrestaShop 9 ; PrestaShop 8 a désormais son archive, 3.1.N.
Corrections
- Boutique en anglais ou en arabe : dates sans mots français (« 06/10/2026 21:32 »), textes du formulaire, de la confirmation et de l'accusé traduits en anglais, libellés du bouton et de la confirmation posés dans la langue à l'installation, récapitulatif « Prénom et nom ».
- En arabe (et en persan ou en ourdou), le libellé du bouton n'est plus espacé lettre à lettre : l'espacement séparait les lettres liées.
- Multiboutique : la purge des anciennes demandes applique la durée de conservation de chaque boutique à ses seules demandes (une boutique qui conserve plus longtemps gardait moins). En contexte « Toutes les boutiques », la liste montre les demandes de chaque boutique avec son nom, et l'export ajoute une colonne Boutique.
Retraits
- L'ancienne grille Symfony et ses gabarits Twig. La mise à jour depuis 2.2.0 efface leurs fichiers, ainsi que la configuration recopiée depuis
config/ps9. Données et schéma inchangés.
Notes de mise à jour
- La 2.2.0 ne fonctionnait pas en PrestaShop 8 : désinstallez-la, puis installez la 3.1.0. Les demandes déjà reçues restent en base.
-
Version 3.1.0 PrestaShop 1.7.6 à 8.x
Nouveautés
- Export CSV des demandes du filtre en cours, prêt pour un tableur (point-virgule, UTF-8). Droit de modification exigé, chaque export inscrit au journal de PrestaShop avec l'employé, et cellules qui commencent par = + - @ neutralisées contre l'injection de formules.
- Aperçu en direct à droite des réglages : bouton du pied de page, formulaire et page de confirmation, avec la couleur et les libellés saisis, sur ordinateur ou mobile, agrandi en pleine largeur.
- Traductions complètes du module en français, anglais et arabe (back-office, boutique, e-mails).
Modifications
- Back-office sur l'habillage commun des modules LNK : liste filtrée par statut avec le compte de chaque filtre, recherche par référence, nom ou e-mail ; fiche d'une demande en rubriques (demande, déclaration, accusé, journal) avec le changement de statut et le renvoi de l'accusé ; réglages en rubriques (bouton et parcours, emplacement, accusé, délais et conservation).
- L'onglet devient SAV > LNK Rétractation, au nom traduit ; l'ancien onglet est déplacé et renommé à la mise à jour.
- « Configurer » dans le gestionnaire de modules mène aux réglages de cette page.
- Archive 3.9.N pour PrestaShop 9 ; PrestaShop 8 a désormais son archive, 3.1.N.
Corrections
- Boutique en anglais ou en arabe : dates sans mots français (« 06/10/2026 21:32 »), textes du formulaire, de la confirmation et de l'accusé traduits en anglais, libellés du bouton et de la confirmation posés dans la langue à l'installation, récapitulatif « Prénom et nom ».
- En arabe (et en persan ou en ourdou), le libellé du bouton n'est plus espacé lettre à lettre : l'espacement séparait les lettres liées.
- Multiboutique : la purge des anciennes demandes applique la durée de conservation de chaque boutique à ses seules demandes (une boutique qui conserve plus longtemps gardait moins). En contexte « Toutes les boutiques », la liste montre les demandes de chaque boutique avec son nom, et l'export ajoute une colonne Boutique.
Retraits
- L'ancienne grille Symfony et ses gabarits Twig. La mise à jour depuis 2.2.0 efface leurs fichiers, ainsi que la configuration recopiée depuis
config/ps9. Données et schéma inchangés.
Notes de mise à jour
- La 2.2.0 ne fonctionnait pas en PrestaShop 8 : désinstallez-la, puis installez la 3.1.0. Les demandes déjà reçues restent en base.
-
Version 2.2.0 PrestaShop 1.7.6 à 8.x
Nouveautés
- Thème d'e-mail de la boutique. L'accusé peut prendre le thème d'e-mail de la boutique au lieu du gabarit du module. Les mises en page pour
modernetclassicsont déclarées par le crochetactionListMailThemeset générées depuis Apparence > Thème d'e-mail > Générer. - Réglage Gabarit de l'accusé : gabarit du module (par défaut) ou thème de la boutique.
- Catalogues XLIFF des mises en page d'e-mail (
Modules.Lnkretractation.Emails) en français, anglais et arabe. - Couches
src/Policyetsrc/Supportsans dépendance au cœur, couvertes par PHPUnit (33 tests) et analysées par PHPStan au niveau 8.
Modifications
- Les gabarits du module passent de
mails/<iso>/àmails/custom/<iso>/:mails/<iso>/est le dossier où le générateur de PrestaShop écrit ses modèles, il ne peut plus contenir des fichiers écrits à la main. - Le logo de la boutique figure dans le gabarit du module. PrestaShop l'ajoute de toute façon à chaque message ; un gabarit qui ne s'en servait pas laissait une pièce jointe orpheline en bas du message.
- Les valeurs sur plusieurs lignes (adresse postale, étendue) gardent leurs retours à la ligne dans le tableau du PDF.
Corrections
- Accusé non reçu quand l'e-mail de la boutique est une adresse Gmail ou Outlook : l'expéditeur se règle dans le module, et le cas est documenté. Les messages qui se réclament de ces domaines mais partent du serveur de la boutique sont écartés par le destinataire, le plus souvent sans même arriver dans les indésirables.
Notes de mise à jour
upgrade-2.2.0.phpretire les gabarits du module restés dansmails/<iso>/, reconnus à un marqueur, sans jamais toucher un modèle déjà généré par un thème. Il déclare le crochetactionListMailThemeset règle le nouveau réglage sur le gabarit du module, à l'identique.
- Thème d'e-mail de la boutique. L'accusé peut prendre le thème d'e-mail de la boutique au lieu du gabarit du module. Les mises en page pour
Voir les 2 versions précédentes
-
Version 2.1.0 PrestaShop 1.7.6 à 8.x
Nouveautés
- Adresse postale dans le formulaire, obligatoire, préremplie depuis l'adresse par défaut du client, et reprise dans la déclaration, le PDF et le back-office.
- Rétractation partielle : le consommateur peut ne renvoyer qu'une partie de la commande et désigner les articles concernés.
- Accusé en PDF joint à l'e-mail (TCPDF par le
PDFGeneratorde PrestaShop). Un échec de génération est journalisé et n'empêche jamais l'e-mail. - Renvoi de l'accusé depuis la fiche d'une demande, journalisé avec l'employé.
- Durée de conservation (
LNK_RETRACT_RETENTION_MONTHS, 60 par défaut) avec une purge quotidienne opportuniste, sans tâche planifiée. - Validité du lien de confirmation (
LNK_RETRACT_LINK_TTL_DAYS, 30 par défaut). Passé ce délai, une demande non confirmée ne peut plus l'être et le consommateur est invité à en déposer une nouvelle. - Colonne et filtre de la grille pour les demandes à vérifier.
Modifications
- Le contrôle de commande ne bloque plus une demande. Un rapprochement manqué la marque
needs_reviewet journalise la raison ; la copie interne porte[à vérifier]dans son objet. Refuser d'enregistrer l'exercice d'un droit parce qu'un contrôle technique a échoué serait en soi un manquement. - Toutes les dates s'affichent à l'heure de la boutique.
Notes de mise à jour
upgrade-2.1.0.phpajoutecustomer_address,items_scopeetneeds_reviewà la table des demandes s'ils manquent, et règle les deux nouveaux réglages.
-
Version 2.0.0 PrestaShop 1.7.6 à 8.x
Réécriture complète pour PrestaShop 8 et 9, à partir de la logique d'un module maison pour PrestaShop 1.5.
Nouveautés
- Parcours de rétractation en deux temps avec accusé de réception horodaté.
- Back-office Symfony : grille filtrable, fiche d'une demande, changements de statut, journal complet des événements.
- Bouton dans le pied de page, ou lien dans une colonne de
ps_linklistau choix. - Libellés multilingues, champ piège, limite par adresse IP, jetons imprévisibles.
- Tables gardées à la désinstallation.