Importante: Ya no se admite la versión 1.0 de la API de reCAPTCHA. Actualiza a la versión 2.0. Más información
La biblioteca de reCAPTCHA para PHP proporciona una forma sencilla de colocar un CAPTCHA en tu sitio web de PHP, lo que te ayuda a evitar que los bots lo abusen. La biblioteca une la API de reCAPTCHA.
Si quieres usar reCAPTCHA con PHP, puedes descargar la biblioteca de reCAPTCHA para PHP. Solo necesitarás un archivo (recaptchalib.php). Los otros archivos son ejemplos, readme y legales, pero no afectan la funcionalidad.
Inicio rápido
Una vez que te hayas registrado para obtener las claves de API, a continuación encontrarás instrucciones básicas para instalar reCAPTCHA en tu sitio. A continuación, puedes encontrar una guía de referencia completa sobre el complemento de PHP.
Del cliente (cómo hacer que aparezca la imagen CAPTCHA)
Si deseas usar la biblioteca PHP para mostrar el widget de reCAPTCHA, debes insertar este fragmento de código dentro del elemento <form> donde se ubicará el widget de reCAPTCHA:
require_once('recaptchalib.php'); $publickey = "your_public_key"; // you got this from the signup page echo recaptcha_get_html($publickey);
Con el código, tu formulario podría verse así:
<html> <body> <!-- the body tag is required or the CAPTCHA may not show on some browsers --> <!-- your HTML content --> <form method="post" action="verify.php"> <?php require_once('recaptchalib.php'); $publickey = "your_public_key"; // you got this from the signup page echo recaptcha_get_html($publickey); ?> <input type="submit" /> </form> <!-- more of your HTML content --> </body> </html>
No olvides configurar $publickey mediante el reemplazo de your_public_key
por la clave pública de la API.
Ten en cuenta que el valor del atributo "action" es "verify.php". Ahora, verification.php es el archivo de destino al que se envían los valores de este formulario. Por lo tanto, necesitarás un archivo verify.php en la misma ubicación que el HTML del cliente.
La función required_once del ejemplo anterior espera que recaptchalib.php esté en el mismo directorio que el archivo del formulario. Si se encuentra en otro directorio, debes vincularla correctamente.
Por ejemplo, si el recaptchalib.php se encuentra en el directorio llamado "captcha", que se encuentra en el mismo nivel que el archivo de formulario, la función se verá de la siguiente manera: require_once('captcha/recaptchalib.php')
.
En el servidor (cómo comprobar si el usuario ingresó la respuesta correcta)
El siguiente código debe colocarse en la parte superior del archivo Verify.php:
<?php require_once('recaptchalib.php'); $privatekey = "your_private_key"; $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); if (!$resp->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 } ?>
En el código anterior:
recaptcha_check_answer
muestra un objeto que representa si el usuario
completó correctamente el desafío.$resp->is_valid
es verdadero, significa que el desafío de captcha se completó correctamente y debes continuar con el procesamiento del formulario.$resp->is_valid
es falso, el usuario no pudo proporcionar el texto correcto del captcha y debes volver a mostrar el formulario para permitirle otro intento. En este caso, $resp->error
será un código de error que se puede proporcionar a recaptcha_get_html
.
Pasar el código de error hace que el control de reCAPTCHA muestre un mensaje en el que se explica que el usuario
ingresó el texto de forma incorrecta y debe volver a intentarlo.Ten en cuenta que este código solicita la clave privada, la cual no debe confundirse con la clave pública. Eso se obtiene en la misma página que la clave pública.
Además, asegúrate de que tu formulario esté configurado para obtener las variables del formulario mediante $_POST, en lugar de $_REQUEST, y de que el formulario en sí use el método POST.
Eso es todo. reCAPTCHA ya debería estar funcionando en tu sitio.
Material de lectura adicional
Guía de referencia del complemento de PHP
A continuación, se muestra una lista completa de todos los métodos del complemento de PHP para reCAPTCHA.
La función recaptcha_get_html
La función recaptcha_get_html
muestra el código HTML que presenta reCAPTCHA al
usuario.
recaptcha_get_html | |
Parámetro | |
$pubkey -- string. obligatoria. | Tu clave pública de reCAPTCHA, de la página de registro de la API |
$error -- string. opcional (el valor predeterminado es nulo) | Si se configura esta cadena, el área de reCAPTCHA mostrará el código de error proporcionado. Este código de error proviene de ReCaptchaResponse->$error |
$use_ssl -- boolean. opcional (false es el valor predeterminado) | ¿Debería usarse la API basada en SSL? Si le muestras una página al usuario a través de SSL, asegúrate de configurar esta opción como verdadera para que no aparezca un diálogo de error en el navegador del usuario. |
Valor de muestra | Es una cadena que contiene HTML para colocar en la página web. |
La función recaptcha_check_answer
Una vez que el usuario complete el formulario HTML, incluida su respuesta al CAPTCHA, queremos verificar su respuesta cuando envíe el formulario con la función recaptcha_check_answer
. La respuesta del usuario estará en dos campos de formulario: recaptcha_challenge_field
y recaptcha_response_field
. La
Biblioteca de reCAPTCHA realizará una solicitud HTTP al servidor de reCAPTCHA y verificará la respuesta del
usuario.
recaptcha_check_answer | |
Parámetro | |
$privkey -- string. obligatoria. | Tu clave privada de reCAPTCHA, de la página de registro de la API |
$remoteip -- string. obligatoria. | La dirección IP del usuario, en el formato 192.168.0.1 |
$challenge -- string. obligatoria. |
El valor del campo recaptcha_challenge_field |
$response -- string. obligatoria | El valor del campo recaptcha_response_field del formulario |
Valor de muestra | Una instancia de la clase ReCaptchaResponse |
ReCaptchaResponse | |
Campo | |
$is_valid -- booleano | ¿reCAPTCHA consideró que la respuesta era válida? |
$error -- cadena | Si la respuesta no era válida, ¿cuál fue el problema? Este código de error se puede usar en recaptcha_get_html |
Valor de muestra | Es la URL HTML o sin procesar para decodificar la dirección de correo electrónico, según la función a la que llamaste. |
Mailhide
La biblioteca PHP de reCAPTCHA incluye vinculaciones para la API de Mailhide. Esta API te permite unir un correo electrónico en un reCAPTCHA para evitar que los generadores de spam lo vean: exam...@example.com.
La parte de Mailhide de la biblioteca PHP requiere el módulo mcrypt de PHP.
La API de Mailhide consta de dos funciones: recaptcha_mailhide_html
y recaptcha_mailhide_url
. Las funciones tienen los mismos parámetros. La versión _html muestra HTML
que se puede colocar directamente en la página. La parte del nombre de usuario del correo electrónico que se pasa se trunca y se reemplaza por un vínculo que llama a Mailhide. La versión _url te proporciona la URL para decodificar el correo electrónico y te permite colocar el correo electrónico en HTML.
recaptcha_mailhide_url / recaptcha_mailhide_html | |
Parámetro | |
$pubkey -- string | La clave pública de Mailhide de la página de registro |
$privkey -- string | La clave privada de Mailhide de la página de registro |
$email -- string | La dirección de correo electrónico que quieres ocultar. |
En el siguiente ejemplo, se muestra cómo usar Mailhide:
<html><body> <? require_once ("recaptchalib.php"); // get a key at http://www.google.com/recaptcha/mailhide/apikey $mailhide_pubkey = ''; $mailhide_privkey = ''; ?> The Mailhide encoding of example@example.com is <? echo recaptcha_mailhide_html ($mailhide_pubkey, $mailhide_privkey, "example@example.com"); ?>. <br> The url for the email is: <? echo recaptcha_mailhide_url ($mailhide_pubkey, $mailhide_privkey, "example@example.com"); ?> <br> </body></html>