Usando reCAPTCHA en PHP

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

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,

reCAPTCHA_registro
Click para Ampliar

haciendo eso ya obtienes las 2 llaves, la privada y la llave pública

reCAPTCHA_llave

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).

16 Comentarios para “Usando reCAPTCHA en PHP”

  1. he logrado aplicar el recaptcha gracias a tu tutorial!, muchas gracias!

  2. 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??

  3. 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

  4. Muchas gracias, lo unico que no me gusta es lo de la llave, lo voy a probar. Saludos

  5. valla!!
    por fin un ejemplo que si funciona muchas gracias hermano

  6. El mejor ejemplo que hay en la vuelta
    the best example i could find

    Thnks/gracias

  7. 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

  8. 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.

  9. 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

  10. Me ha sido de gran ayuda, llevaba días intentado implantarlo en mi web. Gracias

  11. Me está yendo muy bien, pero me gustaría mucho poder reducir el tamaño del captcha!!!

  12. amigos, intento y no puedo… me estoy volviendo loco! necesito ayuda!

  13. 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

  14. Gracias amigo…me sirvio mucho

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *