Sigueme por RSS! RSS

Usar reCaptcha con PHP

Según la wiki:
reCAPTCHA es una extensión de la prueba CAPTCHA que se utiliza para reconocer texto presente en imágenes. Emplea por tanto la prueba desafío-respuesta utilizada en computación para determinar cuándo el usuario es o no humano para, a su vez, mejorar la digitalización de textos.

Dicho de otra manera, es un sistema que se encarga de generar una imagen con un texto confuso, distorsionado, para que el usuario lo resuelva y así determinar si es una persona y no un bot.

El reCAPTCHA es un sistema libre anti-bot con soporte por parte de google y a diferencia del CAPTCHA coloca dos palabras en lugar de una.

Este sistema lo podemos integrar en nuestros proyectos a través de la API o con la librería que suministra.
Usando la librería:

A.- lo primero que hay que hacer es descargar la ultima versión.
B.- luego debemos crear la cuenta, obtendremos al culminar, la PublicKey y PrivateKey que son claves que representan a tu cuenta.

C.- tomando en cuenta que tenemos un archivo index.php (archivo de ejemplo) y la librería recaptchalib.php en la misma carpeta, procedemos a hacer lo siguiente:

1.- incluimos la librería:
require_once('recaptchalib.php');

2.- definimos las key dentro del sistema:
define("PUBLICKEY","aqui_tu_key_publica");
define("PRIVATEKEY","aqui_tu_key_privada");

3.- incluimos dentro de un formulario el código necesario para imprimir la imagen del reCaptcha:
<form method="post" action="verificar.php">
  <?php echo recaptcha_get_html(PUBLICKEY); ?>
   <p><input type="submit" value="Aceptar" /></p>
</form>

Ahí le estamos diciendo que envié los datos para verificarlos al archivo verificar.php, pero es evidente que podemos enviarlos al mismo index.php y así mantener en el, todo el código correspondiente, además que la función recaptcha_get_html acepta un segundo parámetro que define si se ha producido algún error al intentar resolver el reCaptcha y podemos mostrarlo de una vez.

4.-la validación:
Clic aquí para mostrar u ocultar el código
if ($_POST["recaptcha_response_field"]) {
   $resp = recaptcha_check_answer 
   (
      PRIVATEKEY,
      $_SERVER["REMOTE_ADDR"],
      $_POST["recaptcha_challenge_field"],
      $_POST["recaptcha_response_field"]
    );

    // si el codigo es valido, ejecutamos el procedimiento que corresponda
    if ($resp->is_valid) {
       // continuamos el procesamiento del formulario
       // aqui tu code

       echo "¡Excelente, has resuelto la imágen!";
       exit;
    }
    else
       // sino, indicamos que hubo error
       $error = $resp->error;
}

- recaptcha_check_answer devuelve un objeto que representa si el usuario completó con éxito el desafío.
- $resp->is_valid devuelve true si el reCaptcha se completó correctamente.
- $resp->error devuelve un mensaje de error que puede ser pasado por parámetro a la función recaptcha_get_html y que solo se produce si $resp->is_valid devuelve false, dicho de otra manera, si el usuario introduce mal el código de la imagen, se genera un mensaje de error que podemos mostrar luego.


- Personalizando el reCaptcha

podemos llamar a la función RecaptchaOptions desde Javascript y pasarle algunos valores por parámetro para conseguir personalizarlo.

1.- lng -> permite cambiar el idioma, puede tomar varios valores:
en --> ingles (valor por defecto)
nl --> holandés
fr --> francés
de --> alemán
pt --> portugués
ru --> ruso
es --> español
tr --> turco

2.-  theme -> permite cambiar la apariencia, los valores pueden ser (red, white, blackglass, clean, custom).

3.- custom_translations -> por defecto null, permite especificar traducciones personalizadas.

4.- custom_theme_widget -> por defecto null, permite asignar un estilo nuevo para el reCaptcha, hay que señalar el id del elemento div contenedor y definir el CSS correspondiente.

5.- tabindex -> permite establecer la posición de focus del elemento.

ejemplo:
<script type="text/javascript" >  
  var RecaptchaOptions = {  
     theme : 'blackglass',  
     lang: 'es',
     tabindex : 2
  };  
</script> 


Aquí te dejo el código del archivo de ejemplo (index.php):
Clic aquí para mostrar u ocultar el código
<?php

// incluimos la liberia
require_once('recaptchalib.php');

// definimos las constantes para las keys
define("PUBLICKEY","aqui_tu_key_publica");
define("PRIVATEKEY","aqui_tu_key_privada");

// inicializamos
$resp = null;
$error = null;

// verificamos si se ha solucionado el reCaptcha
if ($_POST["recaptcha_response_field"]) {
   $resp = recaptcha_check_answer 
   (
      PRIVATEKEY,
      $_SERVER["REMOTE_ADDR"],
      $_POST["recaptcha_challenge_field"],
      $_POST["recaptcha_response_field"]
    );

    // si el codigo es valido, ejecutamos el procedimiento que corresponda
    if ($resp->is_valid) {
       // ....
       // aqui tu code

       echo "¡Excelente, has resuelto la imágen!";
       exit;
    }
    else
       // sino, indicamos que hubo error
       $error = $resp->error;
}

?>

<html>
  <html>
  <title>Ejemplo del uso de reCAPTCHA</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  </html>
  <body>
    <form action="" method="post">
      <?php 
         // imprimimos la imagen reCaptcha (se mostrara el error si lo hay)
         echo recaptcha_get_html(PUBLICKEY, $error); 
      ?>
      <p><input type="submit" value="Aceptar" /></p>
  </form>
  </body>
</html>


Referencias:
Documentación
Descarga

1 comentario: Suscribete a los comentarios por RSS

Manioban

Muchisimas gracias. Me funciono perfecto.

Publicar un comentario

- Los comentarios están siendo moderados y serán publicados en la brevedad posible.