reCAPTCHA es un producto de Google que se emplea como prueba de desafío-respuesta y se utilizada en informática para determinar cuándo el usuario es o no humano. se usa principalmente para el envió de datos a través de formularios de contactos o cualquier otro formulario que esté a la vista de los usuarios no registrados.
Si tienes un formulario de contacto o una pagina para enviar un correo para recomendar a un amigo por ejemplo, vas a necesitar poner un sistema de CAPTCHA para evitar que los ROBOTS lo usen para enviar SPAM y/o para filtrar los mensajes que te pueden llegar por ese formulario de contacto.
reCAPTCHA se basa en el hecho de que para un ser humano puede ser simple determinar el texto presente en una imagen cuando para una máquina esta tarea resulta en ocasiones demasiado compleja
Paso 1.-
Para usar reCAPTCHA en PHP, lo primero que necesitas es bajar La Libreria PHP reCAPTCHA. solo necesitas 1 archivo de ese ZIP (recaptchalib.php). los demás archivos son solo ejemplos e información adicional que no nos sirve.
Paso 2.-
Necesitas obtener una llave pública, y eso lo obtienes en la web del reCAPTCHA, https://www.google.com/recaptcha/admin/create?app=php,
haciendo eso ya obtienes las 2 llaves, la privada y la llave pública
Paso 3.-
El código para hacer la verificación se pone en el PHP que recepciona los datos enviado por el formulario, básicamente es recibir todos los datos y entre ellos el captcha que puso el usuario, enviarlo a verificar con la función de la librería y finalmente según la respuesta grabamos o mostramos el mensaje de error.
<html> <body> <form action="" method="post"> <?php require_once('recaptchalib.php'); //librería descargada de Google // Llaves creadas en Google $publickey = "xxx"; //llave publica $privatekey = "xxxx"; //lave privada //Respuesta de reCAPTCHA $resp = null; # Errores de reCAPTCHA si es que hay $error = null; # was there a reCAPTCHA response? if ($_POST["recaptcha_response_field"]) { //Si la variable existe es decir, fué enviado desde un Formulario //la función necesita la llave privada, la IP del usuario, el campo "desafío" y el campo "respuesta" que dió el usuario $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); //Cuando recibimos los datos por el formulario, procedemos a hacer la verificación en reCATPCHA if ($resp->is_valid) { echo "AQUI VA TODO EL CODIGO PARA GRABAR, ENVIAR CORREO, ETC. es decir, cuando pasó el reCAPTCHA"; } else { //En caso falló el reCAPTCHA $error = $resp->error; //Si deseas muestras los errores echo $error; //Aqui va por ejemplo la reimpresión del formulario y el mensaje de reCAPTCHA invalido, etc. } } echo recaptcha_get_html($publickey, $error); //imprimimos el formulario de reCATPCHA ?> <br/> <input type="submit" value="submit" /> </form> </body> </html>
- recaptcha_check_answer Nos retorna el objeto que contiene si el usuario puso correctamente el reCAPTCHA es decir, si pasó la verificación humana.
- SI $resp->is_valid es TRUE entonces quiere decir que pasó la verificación humana y se puede continuar con la ejecución del código que graba o envia el correo electrónico.
- SI $resp->is_valid es FALSE quiere decir que no pasó el reCAPTCHA y se según tu programación darle otra oportunidad, reimprimir el formulario o redireccionarlo o un mensaje de error. adicionalmente $resp->error contiene los errores que se pudieron dar (La llave publica o privada es invalida, no puso la solución correcta, etc).
he logrado aplicar el recaptcha gracias a tu tutorial!, muchas gracias!
Hola! estoy queriendo poner el recaptcha en mi formulario pero no puedo lograr que quede. Ya tenia armado el formulario y no se como colocar el codigo del recaptcha. cuando hablas del codigo de verificación, ese codigo va en algun lugar del formulario o es un .php aparte??
no me sale la cosa esque yo mi formulario ya lo tengo creado al agregarselo a mi formulario el recaptcha suvo la pagina y lo que m aparece en vez del recaptcha me tira todo el codigo que escribi me lo junta y me lo pone en mi pagina
Muchas gracias, lo unico que no me gusta es lo de la llave, lo voy a probar. Saludos
valla!!
por fin un ejemplo que si funciona muchas gracias hermano
Voy a probar que tal va
El mejor ejemplo que hay en la vuelta
the best example i could find
Thnks/gracias
implemente este captcha como lo indicas, y funciona, pero no logro que sea obligatorio. Si queda en blanco de todas formas se envia el formulario.
Alguna idea?
Gracias, saludos
Carlos 31 enero, 2014 at 9:30 PM – Reply
implemente este captcha como lo indicas, y funciona, pero no logro que sea obligatorio. Si queda en blanco de todas formas se envia el formulario.
Alguna idea?
Gracias, saludos
pues eso ya es programación de javascript o jquery estimado, a pesar que lo validas en estos que mencione tambien tiene que validarlo en la capa del controlador y si esta vacio strlen(trim($capcha))<0 pues simplemente no procesas el guardado de datos. el envio del formulario siempre se hara solo que el controlador lo valida para proceder con guardar en la base de datos o no.
logre implementar el código con éxito y logre que fuera obligatorio de la siguiente manera:
esta parte del código se coloca antes del botón de enviar en el formulario «formulario.php» dentro del aunque puedes colocarlo donde prefieras, yo lo hice así xq queda mejor
y esta parte del código la pegas por ejemplo dentro del archivo «enviar.php» donde validas los datos del formulario, esto tiene que estar de primero para que haga la verificación del formulario
is_valid) {
// What happens when the CAPTCHA was entered incorrectly
die («The reCAPTCHA wasn’t entered correctly. Go back and try it again.» .
«(reCAPTCHA said: » . $resp->error . «)»);
} else {
// Your code here to handle a successful verification
}
?>
código de email
y eso es todo para que el captcha sea obligatorio en tu formulario.. Este funciona en base al captcha que te da google en recaptcha.net
de todas maneras al entrar en la web y registres el dominio te darán toda la información que necesites en la parte de MY ACCOUNTS luego MY SITES y luego le das en el sitio que creaste ahí encontraras todo lo que necesites para instalar esto, puedes verificarlo en la parte de reCAPTCHA plugins and libraries, luego plugins y eliges php… Saludos
Gracias
Me ha sido de gran ayuda, llevaba días intentado implantarlo en mi web. Gracias
Me está yendo muy bien, pero me gustaría mucho poder reducir el tamaño del captcha!!!
amigos, intento y no puedo… me estoy volviendo loco! necesito ayuda!
Hola, gracias por compartir tu conocimiento, esta muy explicado y entendible, también dejo mi granito de arena por si a alguien le sirve: http://paraisodeldesarrollador.blogspot.mx/2015/05/recaptcha-en-grails-con-recaptcha-and.html
Gracias amigo…me sirvio mucho