Les formulaire de contacts sont de plus en plus soumis aux spams, ce qui devient assez agaçant…, malheureusement le formulaire de contact de prestashop ne fait pas exeption à la règle.
Voici donc un module qui vous permettra d’ajouter l’excellent « Recaptcha » de google à votre formulaire de contact prestashop.
Pour commencer, ouvrez le fichier « contact-form.tpl » de votre dossier thème et saissez le code suivant :
1 2 3 4 5 6 | {if $captcha } <p> <label for="captcha">{l s='Captcha'}</label> <div style="float:left;margin-left: 0.7em;">{$captcha}</div> </p> {/if} |
après les lignes suivantes :
( Je l’ai inséré après le champ message, mais c’est à adapter en fonction de l’endroit souhaité )
1 2 3 4 | <p> <label for="message">{l s='Message'}</label> <textarea id="message" name="message" rows="15" cols="20" style="width:340px;height:220px">{if isset($message)}{$message|escape:'htmlall':'UTF-8'|stripslashes}{/if}</textarea> </p> |
Vous pouvez ensuite télécharger et installer le module.
Une fois le module installé, il sera nécessaire de récupérer des clés publiques et privées sur le site de recaptcha pour activer le module
http://www.google.com/recaptcha/whyrecaptcha
Vous pourrez télécharger ce module et consulter ses dernières mise à jour depuis la page Module (re)Captcha pour le formulaire de contact prestashop
(Note : 05/05/2014 : Ce fonctionnement n’est plus d’actualité , la vérification est fait en ajax )
Le fonctionnement du module en lui même est relativement simple, toute la logique étant dans la fonction « hookHeader ».
Les vérifications du captcha utilisent la librairie fournie par google.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | public function hookHeader($params) { //Récupération de la page//controller courant $contact_form_controller = false; $page_name = false; //Version 1.5 if (_PS_VERSION_ > '1.5') { if ( $this->context->controller instanceof ContactController ) $contact_form_controller = true; } //Versions 1.4 else { /* Version >= 1.4.9 */ if ( version_compare(_PS_VERSION_, '1.4.9.0', '>=') ) $page_name = $this->context->smarty->getTemplateVars('page_name'); else /* Version > 1.4.9*/ $page_name = $this->context->smarty->get_template_vars('page_name'); } if ( $page_name == 'contact-form' || $contact_form_controller ) { //Génération du template require_once(dirname(__FILE__).'/lib/recaptchalib.php'); $publickey = Configuration::get('CAPTCHA_PUBLIC_KEY'); //Si soumission du formulaire : if (Tools::isSubmit('submitMessage')){ $captcha_check = recaptcha_check_answer(Configuration::get('CAPTCHA_PRIVATE_KEY'), $_SERVER["REMOTE_ADDR"], Tools::getValue('recaptcha_challenge_field'), Tools::getValue('recaptcha_response_field')); if ($captcha_check->is_valid != 1) { Tools::redirect('contact-form.php?recaptchaError=1'); } } //Assignation du code recaptcha $this->context->smarty->assign('captcha',recaptcha_get_html($publickey)); //Si message d'erreur if ( Tools::getValue('recaptchaError') == 1) { //Assignation de l'erreur au template $this->context->smarty->assign('errors',array($this->l('the captcha code is wrong'))); $errorBlock = trim(preg_replace("#\n#","",$this->context->smarty->fetch(_PS_THEME_DIR_.'errors.tpl'))); //Placement du block dans la page return '<script type="text/javascript"> $(document).ready(function(){ $("form.std").before(\''.$errorBlock.'\'); }); </script>'; } } } |
Nouvelle version du module avec vérification ajax du code du captcha disponible : plus de détails
décembre 6th, 2013
bonjour.
merci pour ce module.
j’ai pu l’installer et le configurer avec les cles sans soucis, mais la page contact ne s’affiche plus, firebug m’indique qu’il y a une erreur serveur !
si je supprime le bloc de code a inserer dans contact-form.tpl, la page réaparait.
je suis en prestashop 1.4.6.
Pouvez vous m’aider ?
merci d’avance
décembre 8th, 2013
Il faut que je teste sur Prestashop 1.4.6 à priori le problème semble lié à cette version.
décembre 11th, 2013
La solution du problème est trouvé..
Il faut remplacer « {if $captcha } » par « {if $captcha} » (sans espace )
Il fallait y penser ^^
décembre 8th, 2013
Fonctionne sur un presta 1.5.x, le seul soucis est que si je n’entre pas le bon code de sécurité, tout le formulaire se vide… ce qui est plutôt embêtant si le message du client est long… à coup sur il ne ressaisit pas son message et passe son chemin.
décembre 8th, 2013
Bonne remarque je vais voir pour corriger ce comportement dans la prochaine version.
décembre 24th, 2013
[…] aux différents retours sur mon module recaptcha pour prestashop , Je viens de procéder à sa mise à […]
décembre 25th, 2013
Ce comportement est changé dans la nouvelle version.
décembre 29th, 2013
merci pour cette astuce, toutefois sur une 1.5.6.1 avec le module 0.1.1 mon formulaire s’efface si le code est faux…donc problème toujours existant. suis je le seul?
décembre 30th, 2013
Bonjour,
De mon côté cela fonctionne bien sur ma version de test (v 1.5.6.1 également ):
http://web.h-hennes.fr/prestashop15/index.php?controller=contact
Dans un premier temps pouvez-vous télécharger le fichier http://www.h-hennes.fr/blog/wp-content/uploads/2013/12/ei-captcha-0.1.1.rar et mettre à jour vos fichiers.
Si le problème persiste, oouvez-vous vérifier si firebug ne vous renvoie pas une erreur javascript ?
Votre erreur laisse à penser que le traitement ajax n’est pas pris en compte.
janvier 15th, 2014
bonjour; j’ai fait les modifs du fichier et quand j’installe le module, il n’apparait pas dans la liste
merci d’avance
janvier 15th, 2014
Bonjour,
Avez-vous récupéré la dernière version du module : http://www.h-hennes.fr/blog/2013/12/24/module-re-captcha-pour-le-formulaire-de-contact-prestashop-nouvelle-version/ ?
Quelle est votre version de prestashop ?
janvier 15th, 2014
re
oui déjà récupérer et j’utilise la version 1.5.4.1
janvier 15th, 2014
j’ai une precision: sur mon ftp je ne vois pas le dossier captcha et aussi sur mon site test en local
merci d’avance
janvier 16th, 2014
A priori si le dossier n’est pas visible c’est que le module n’a pas été mis en place.
Avant toute chose il faut décompresser l’archive, puis envoyer le dossier « eicaptcha » par ftp dans le dossier « modules » de votre hébergement.
Le module sera ensuite bien listé. ( Pour le trouver plus facilement utiliser le moteur de recherche dans les modules )
janvier 16th, 2014
bonjour
j’ai chargé le fichier dans le ftp
puis je les installé
jusque la pas de problème
j’ai mie le code dans le fichier contact-from
mais quand je vais sur la page de contact
il y a écrit : captcha mais il ni a pas les image ni le module visible
il y a écrit seulement captcha sous le message
pouvez vous m’aidé
cordialement
janvier 17th, 2014
Bonjour,
Avez-vous vidé le cache de prestashop ?
Si le problème persite pouvez-vous m’envoyer les informations nécessaires à [email protected] pour que je jette un coup d’œil à votre site.
Url / Version de prestashop …
janvier 17th, 2014
Pour information le problème était lié à l’activation du mode ssl qui n’était pas géré par le module.
C’est désormais le cas dans la version 0.1.2
janvier 17th, 2014
bonjour,
vous voudrais vous remercier pour toutes les explications
tout fonctionne
merci
février 20th, 2014
Merci, fonctionne très bien sous ps 1.5.6.2 🙂
avril 5th, 2014
Merci, fonctionne très bien sous ps 1.5.6.2
avril 19th, 2014
bonjour,
mon problème est que le formulaire sera envoyé meme si le code captcha est incorrect ou le champ de code captcha vide,
j’utilise prestashop 1.5.4.0
merci de m’aider
mai 28th, 2014
Bonjour,
Très bon module pour protéger le formulaire de contact de Prestashop.
Avez-vous essayé d’étendre cette fonctionnalité au module « Envoyer à un ami » qui lui aussi est très sujet aux spams ??
De mon côté, j’ai essayé en enlevant la condition à la ligne 131 dans le fichier eicaptcha.php. Ainsi, le formulaire captcha s’affiche bien dans « envoyer à un ami », mais par contre il ne fonctionne pas…certainement une histoire de controller…
Si vous avez une idée, je suis preneur 😉
mai 28th, 2014
Bonjour,
Merci de votre retour sur ce module.
Excellente idée de le mettre en place sur le module envoyer à un ami !
Je vais voir pour intégrer cette fonctionnalité dans une nouvelle version du module.
Pour votre adaptation, j’aurais tendance à penser que c’est plutôt le JavaScript qui pose problème car il est spécifique au formulaire de contact.
Cordialement,
octobre 26th, 2017
Hi,
I have added your module to my website. Great module! You can see the captcha in the contactform. However after I submit I get the error below.
You also can check my website:
https://staging.hqdrones.com/contact-us
Do you know what the issue is?
Fatal error: Uncaught Error: Class ‘ReCaptcha\ReCaptcha’ not found in /var/www/clients/client2/web2/web/modules/eicaptcha/eicaptcha.php:400 Stack trace: #0 /var/www/clients/client2/web2/web/classes/Hook.php(591): EiCaptcha->hookContactFormAccess(Array) #1 /var/www/clients/client2/web2/web/classes/Hook.php(546): HookCore::coreCallHook(Object(EiCaptcha), ‘hookcontactForm…’, Array) #2 /var/www/clients/client2/web2/web/override/controllers/front/ContactController.php(9): HookCore::exec(‘contactFormAcce…’) #3 /var/www/clients/client2/web2/web/classes/controller/Controller.php(171): ContactController->checkAccess() #4 /var/www/clients/client2/web2/web/classes/Dispatcher.php(367): ControllerCore->run() #5 /var/www/clients/client2/web2/web/index.php(28): DispatcherCore->dispatch() #6 {main} thrown in /var/www/clients/client2/web2/web/modules/eicaptcha/eicaptcha.php on line 400
octobre 26th, 2017
Hello,
I guess you clone the module from github ?
You should download the last release from this page : https://github.com/nenes25/eicaptcha/releases
As the module is using composer, just cloning the repository will not work.
Regards,
Hervé
novembre 17th, 2017
Bonjour,
Attention il est possible de contourner le captcha (testé jusqu’en version 0.4.9, version 0.4.10 non testée sur mon prestashop 1.6.1.13) dont le contrôle ne semble pas être opérationnel côté serveur (hook hookContactFormAccess non appelé ou non opérationnel).
Pour reproduire, supprimer le bouton formulaire directement dans le DOM et le recréer (les évènements de contrôle JS ne seront plus attachés)
novembre 24th, 2017
Bonjour,
Merci de votre précision, de manière générale il est préférable de mettre à jour vers la dernière version.
Si le hook est mal implémenté, il faudrait réinitialiser le module (ceci impliquera de saisir à nouveau toutes les informations )
Cordialement,
Hervé
janvier 16th, 2018
Hi Herve,
Sorry for the late reply. I downloaded the module like you suggested (version 0.4.10) and this works. Thanks a lot!
Kind regards,
Dirk