Configurar reCAPTCHA 2.0 con PHP

mayo 29, 2017

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

 

Tags ; ,

21 comentarios

    Pedro Oct 29, 2017

    gracias, anduvo de una! 🙂

    Responder
    José Manuel Nov 28, 2017

    Muchas gracias, perfectamente explicado

    Responder
    Juan Diego Bartolo Ene 06, 2018

    Perfecto. Muchas Gracias

    Responder
    Ariel Meneses Ene 07, 2018

    Muchas gracias. Saludos desde Panama

    Responder
    Eduardo Mar 02, 2018

    Muchas gracias! Funcionó perfecto!

    Responder
    Javier Abr 05, 2018

    Mucho mejor explicado que como lo hicieron los colegas de Google. Gracias.

    Responder
    Krampus Abr 11, 2018

    Actualmente hay que enviar tambien el ip>
    $data = array(
    ‘secret’ => ‘API-SECRET’,
    ‘response’ => $recaptcha,
    ‘remoteip’ => $_SERVER[‘HTTP_CLIENT_IP’]
    );

    Responder
    Willy May 31, 2018

    Eres el puto amo!!! Genial, muchas gracias 🙂

    Responder
    Guillermo Hurtado Jul 17, 2018

    Excelente, funciona muy bien

    Responder
    Pepe Oct 09, 2018

    Un gran aporte, rápido, sencillo y funcional.
    Saludos.

    Responder
    Misael Sep 09, 2019

    Muchas gracias amigo, me funcionó super bien que Dios te bendiga

    Responder
    Alkinoid Dic 03, 2019

    Muchas gracias! de verdad que me ayudaste mucho con esto

    Responder
    Daniel Mar 24, 2020

    Muy util. Muchas gracias

    Responder
    Juan Perez Jun 17, 2020

    grande pibe, muy bien explicado gracias.

    Responder
    John Doe II Ago 06, 2020

    Excelente, ha sido de mucha utilidad… si así estuviera la documentación de google!

    Responder
    Patricio Ene 15, 2021

    Funciona perfecto muchos gracias

    Responder

Escribe un comentario

Los comentarios son moderados y se utiliza rel="nofollow" para los enlaces.