Una de las grandes límitantes de la plataforma de tienda en línea de Prestashop es que su formulario de Contacto y su formulario de registro en línea no incluye una validación de Captcha para evitar el Spam. Provocando que muchos usuarios de la plataforma presenten de manera continúa spam.
Tutorial para habilitar reCaptcha v2 de Google en Prestashop
El primer paso para habilitar el Captcha de Google v2 es Generar tu llave pública y privada en el sitio de Google: https://www.google.com/recaptcha/intro/index.html, una vez que las tienes debes entrar por FTP al archivo /themes/YourTheme/contact_form.tpl (Es importante mencionar que YourTheme se cambiará por el nombre de la carpeta del tema que estes usando en prestashop).
En la parte del formulario añadir el siguiente código en la parte donde deseas ubicar el captcha (Generalmente es antes del botón de Submit.
{if $captcha} <p> <script src='https://www.google.com/recaptcha/api.js'></script> <div class="g-recaptcha" data-sitekey="TU LLAVE PUBLICA O DE SITIO"></div> </p> {/if}
No olvides reemplazar el bloque «TU LLAVE PUBLICA O DE SITIO» por tu llave publica generada en la página de Google.
Posteriormente descarga el siguiente Plugin de la página de GitHub el archivo .zip descomprimelo en tu computadora y la carpeta renombrala como iecaptcha. Subela a la carpeta /public_html/modules y en el administrador de módulos instala y configura con la información que te solicita el módulo (Es posible te muestre una leyenda de que el plugin no ha sido validado, solo presiona continuar)
NOTA. Dependiendo de la versión que uses de Prestashop es posible que la última versión del módulo no te funcione. Para ello verifica la versión que descargues en el Changelog y solamente solicita la descarga de aquél que es compatible con tu versión de Prestashop.
Tutorial para implementar Recaptcha sin módulos en Prestashop
Ahora, si deseas realizarlo solo modificando el código fuente en Prestashop y sin añadir un módulo adicional. Debes seguir estos pasos.
Modifica /themes/YourTheme/contact_form.tpl y añade el siguiente código
<p> <script src='https://www.google.com/recaptcha/api.js'></script> <div class="g-recaptcha" data-sitekey="TU LLAVE PUBLICA O DE SITIO"></div> </p>
Posteriormente modifica el siguiente archivo: /public_html/override/controllers/front/ContactController.php y modificalo por el siguiente código
<?php class ContactController extends ContactControllerCore { public function postProcess() { if (Tools::isSubmit('submitMessage')) { if (Tools::getIsset('g-recaptcha-response') && !$this->validateCaptcha()){ $this->errors[] = Tools::displayError('Captcha no verificado'); array_unique($this->errors); }else{ parent::postProcess(); } } } private function validateCaptcha(){ $post_data = http_build_query( array( 'secret' => "TU LLAVE PRIVADA", 'response' => Tools::getValue('g-recaptcha-response'), 'remoteip' => $_SERVER['REMOTE_ADDR'] ) ); $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $post_data ) ); $context = stream_context_create($opts); $response = file_get_contents('https://www.google.com/recaptcha/api/siteverify', false, $context); $result = json_decode($response); if (!$result->success) { return false; } return true; } }
Y Listo!
Habrás implementado el Recaptcha de Google en tu Prestashop