Hola buenos días.
Un técnico de web empresa me ha remitido a este foro despues de plantearle una consulta a través del ticket número 8elNeh0Y942015. El problema es el siguiente:
Me están entrando en un montón de spams a través del formulario de contacto de prestashop 1.6. A pesar de tener instalado el captcha.
Cuando alguien envía un formulario, este es enviado sin necesidad de pulsar el cuadrito de "no soy un robot"
Podeis decirme como hacer para que sea obligatorio pulsar el check de captcha y en caso contrario que salga un mensaje de error?.
Muchas gracias
URL del sitio: Contenido solo visible a usuarios registrados
Hola Gabriel.
¿ Utilizas algún modulo para el captcha ? ¿ Lo añadiste al formulario con código o con algún modulo ?
Te agradezco tu colaboración, contar con toda la información que puedas darnos nos ayudará a darte más rápidamente una solución.
Un saludo
Pues hace mucho tiempo que diseñé la página y no lo recuerdo pero me imagino que introducí algún código porque no tengo instalado ningún módulo de captcha.
Lo que no recuerdo es el código que puse y en que archivo lo añadí....
Muchas gracias
Hola Gabriel.
Revisa si en el archivo header.php que encontraras en themes -> contact.tpl Tu_plantilla, tienes añadido el codigo, si es así lo eliminas.
Accede a Google reCAPTCHA y vuelve a dar de alta el dominio, copia las claves publicas y privadas que te ofrece google al dar de alta el dominio en reCAPTCHA
.- Edita el archivo header.php que encontraras en la carpeta de tu plantilla y añade lo siguiente:
.- Edita el archivo contact-form.tpl qu eencontraras dentro de la carpeta de tu plantilla y añade lo siguiente:
Tienes que añadir la clave del sitio que obtuviste en google.
.- Accede al archivo ContactController.php que encontraras en controllers -> front -> ContactController.php y busca lo siguiente:
if (!($from = trim(Tools::getValue('from'))) || !Validate::isEmail($from)) $this->errors[] = Tools::displayError('Invalid email address.'); else if (!$message) $this->errors[] = Tools::displayError('The message cannot be blank.'); else if (!Validate::isCleanHtml($message)) $this->errors[] = Tools::displayError('Invalid message'); else if (!($id_contact = (int)(Tools::getValue('id_contact'))) || !(Validate::isLoadedObject($contact = new Contact($id_contact, $this->context->language->id)))) $this->errors[] = Tools::displayError('Please select a subject from the list provided. '); else if (!empty($fileAttachment['name']) && $fileAttachment['error'] != 0) $this->errors[] = Tools::displayError('An error occurred during the file-upload process.'); else if (!empty($fileAttachment['name']) && !in_array( Tools::strtolower(substr($fileAttachment['name'], -4)), $extension) && !in_array( Tools::strtolower(substr($fileAttachment['name'], -5)), $extension)) $this->errors[] = Tools::displayError('Bad file extension'); else {
Molificado por lo siguiente:
if (!($from = trim(Tools::getValue('from'))) || !Validate::isEmail($from)) $this->errors[] = Tools::displayError('Invalid email address.'); else if (!$message) $this->errors[] = Tools::displayError('The message cannot be blank.'); else if (!Validate::isCleanHtml($message)) $this->errors[] = Tools::displayError('Invalid message'); else if (!($id_contact = (int)(Tools::getValue('id_contact'))) || !(Validate::isLoadedObject($contact = new Contact($id_contact, $this->context->language->id)))) $this->errors[] = Tools::displayError('Please select a subject from the list provided. '); else if (!empty($fileAttachment['name']) && $fileAttachment['error'] != 0) $this->errors[] = Tools::displayError('An error occurred during the file-upload process.'); else if (!empty($fileAttachment['name']) && !in_array( Tools::strtolower(substr($fileAttachment['name'], -4)), $extension) && !in_array( Tools::strtolower(substr($fileAttachment['name'], -5)), $extension)) $this->errors[] = Tools::displayError('Bad file extension'); else if (!($gcaptcha = (int)(Tools::getValue('g-recaptcha-response')))) $this->errors[] = Tools::displayError('Captcha no verificado'); else {
Como veras solo añadimos dos lineas al final del código:
else if (!($gcaptcha = (int)(Tools::getValue('g-recaptcha-response')))) $this->errors[] = Tools::displayError('Captcha no verificado');
Recuerda realizar una copia de los archivo antes de modificar nada.
Un saludo
Hola. Muchas gracias por la respuesta.
He borrado el codigo (adjunto captura de pantalla del código eliminado) que aparece en el archivo contact-form.tpl que aparece en la ruta:
themes>mi_tema>contact-form.tpl
Pero me sigue apareciendo el captcha... he revisado cien veces los módulos por si hay alguno que lo introduzca pero no hay ninguno.
Me podéis decir en que otro sitio puede estar el código? El sitio está hecho con prestashop 1.6.1.4
Muchas gracias...
Hola
Según lo que entiendo quieres agregar captcha, no quitarlo
Lo que te comentó Pepe es que agregues captcha, podrías explicar porqué quieres eliminar ese código?
PD. El captcha debería estar antes del código del botón de enviar.
Saludos
Efectivamente he seguido todos los pasos indicados por pepe y ya funciona a la perfección. Me faltaba añadir el código en el archivo ContactControler.php
Doy el tema por cerrado y solucionado para que quien tenga el mismo problema sepa lo que hay que hacer.
Muchísimas gracias por vuestro excelente servicio.