Configurar reCAPTCHA 2.0 con PHP
Hoy en día es totalmente necesario utilizar un captcha en los formularios de nuestras páginas web para evitar a los bots. Hasta hace poco el captcha habitual era aquel en el que teníamos que escribir las dos palabras que aparecían en una imagen para demostrar que no éramos un bot:
Google a publicado la versión 2.0 de reCAPTCHA, el cual es mucho más sencillo y solamente debemos confirmar que no somos un robot 🙂
Vamos a ver como configurar reCAPTCHA 2.0 con PHP.
Lo primero que tenemos que hacer es dar de alta nuestra web en el panel de administración de reCAPTCHA: https://www.google.com/recaptcha/admin
Para dar de alta nuestro web, debemos completar la siguiente sección:
En el campo «etiqueta» daremos un nombre descriptivo, por ejemplo el título de la web.
Después, elegimos la opción reCAPTCHA V2, escribimos el nombre de nuestro dominio (sin las www), aceptamos las condiciones de uso y pulsamos en «Registrar»:
Una vez hemos terminado la configuración, obtenemos las claves que utilizaremos en nuestra web:
Con la Clave del sitio y con la Clave secreta de, podemos proceder a configurar nuestro sitio web para utilizar reCAPTCHA 2.0 en PHP.
Supongamos que tenemos el siguiente formulario HTML:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <!DOCTYPE html> <html> <head> <title>Ejemplo reCAPTCHA 2.0 con PHP</title> <script src='https://www.google.com/recaptcha/api.js'></script> </head> <body> <form action="formulario.php" method="post"> <input name="name" placeholder="Nombre"/> <input name="email" placeholder="Email"/> <textarea placeholder="Tu mensaje" name="message"></textarea> <div class="g-recaptcha" data-sitekey="API_KEY"></div> <button type="submit" name="submit">Enviar</button> </form> </body> </html> |
En la línea #5 vemos que hemos añadido la librería javascript necesaria para que funcione reCAPTCHA 2.0.
En la línea #12 hemos añadido el reCAPTCHA 2.0 en sí. Deberemos sustituir API_KEY por la Clave del sitio obtenida anteriormente.
El «action» del formulario anterior nos lleva al siguiente formulario.php de ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?php $name = stripslashes($_POST["name"]); $email = stripslashes($_POST["email"]); $message = stripslashes($_POST["message"]); $recaptcha = $_POST["g-recaptcha-response"]; $url = 'https://www.google.com/recaptcha/api/siteverify'; $data = array( 'header' => "Content-Type: application/x-www-form-urlencoded\r\n", 'secret' => 'API_SECRET', 'response' => $recaptcha ); $options = array( 'http' => array ( 'method' => 'POST', 'content' => http_build_query($data) ) ); $context = stream_context_create($options); $verify = file_get_contents($url, false, $context); $captcha_success = json_decode($verify); if ($captcha_success->success) { // No eres un robot, continuamos con el envío del email // ... // ... } else { // Eres un robot! } ?> |
En la línea #11 deberemos sustituir API_SECRET por la clave secreta obtenida anteriormente.
Como podemos comprobar, si llegamos a la línea #24 significa que el usuario ha pasado el captcha y no es un robot, por lo que continuaremos con el funcionamiento normal (enviar un email, guardarlo en la base de datos, etc.).
gracias, anduvo de una! 🙂
Muchas gracias, perfectamente explicado
Perfecto. Muchas Gracias
Muchas gracias. Saludos desde Panama
Muchas gracias! Funcionó perfecto!
Mucho mejor explicado que como lo hicieron los colegas de Google. Gracias.
Actualmente hay que enviar tambien el ip>
$data = array(
‘secret’ => ‘API-SECRET’,
‘response’ => $recaptcha,
‘remoteip’ => $_SERVER[‘HTTP_CLIENT_IP’]
);
Eres el puto amo!!! Genial, muchas gracias 🙂
Excelente!! anda perfecto
Excelente, funciona muy bien
Un gran aporte, rápido, sencillo y funcional.
Saludos.
Gracias!
Muchas gracias amigo, me funcionó super bien que Dios te bendiga
mil gracias!
Muchas gracias! de verdad que me ayudaste mucho con esto
Excelente, un post lleno de utilidad
Muchas gracias, lo instale rápido y sencillo.
Muy util. Muchas gracias
grande pibe, muy bien explicado gracias.
Excelente, ha sido de mucha utilidad… si así estuviera la documentación de google!
Funciona perfecto muchos gracias