28 junio, 2019

Integrar Recapcha V3

Agradecimientos a la fuente:
https://www.salamarkesa.com/recaptcha-php-tutorial-implementar/

Vamos a ver aquí un ejemplo de cómo yo lo estoy implementando en la salamarkesa para el sistema de comentarios.

Paso 1. Creas tus claves.

Desde aquí: reCaptcha admin

Simplemente pon el dominio de tu web y obtienes dos claves: una pública y una privada.

Paso 2. Coloca este script antes del cierre </head> en tu web.

<script src='https://www.google.com/recaptcha/api.js?render=CLAVE_PUBLICA_AQUI'></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('CLAVE_PUBLICA_AQUI', {action: 'comentario'})
.then(function(token) {
var recaptchaResponse = document.getElementById('recaptchaResponse');
recaptchaResponse.value = token;
});
});
</script>

Naturalmente, poniendo tu clave pública donde dice “CLAVE_PUBLICA_AQUI“, en los dos sitios.

Donde dice “action” yo he puesto “comentario”.

Tú puedes poner lo que quieras, eso sirve para que tengas un control detallado de las acciones que estás filtrando en tu sitio web.

Y bueno, eso es JavaScript.

Primero cargamos la api de reCaptcha desde los servidores de Google.

Y después pedimos que se ejecute el asunto cuando todo esté listo.

Al ejecutarse, estamos almacenando la respuesta en el campo “recaptchaResponse” del formulario con el que trabajamos, en el caso de esta web, el formulario para dejar un comentario al pie del artículo.

Este sería el HTML de nuestro formulario:

<form action="revisar.php" method="post">
<textarea name="comentario"></textarea>
<input type="hidden" name="recaptcha_response" id="recaptchaResponse">
<input type="submit" value="Enviar">
</form>

Bien.

Vemos que se envía por método POST y que hemos agregado in input oculto con el id “recaptchaResponse”, para que el código javascript anterior pueda guardar ahí la respuesta de reCaptcha.

Ya solo nos queda la parte de control, que se hará desde PHP en el servidor:

<?php
if($_SERVER['REQUEST_METHOD'] === 'POST'){ 
// Realizamos la petición de control: 
$recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify'; 
$recaptcha_secret = 'CLAVE_PRIVADA_AQUI'; 
$recaptcha_response = $_POST['recaptcha_response']; 
$recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response); 
$recaptcha = json_decode($recaptcha); 
// Miramos si se considera humano o robot: 
if($recaptcha->score >= 0.6){
    echo 'Hay un 60% de probabilidad de que seas un humano';
}else{
    echo 'Estás por debajo del 60% de probabilidad de que seas humano, mejor no me fío.';
}

}

Naturalmente, debes poner tu clave privada donde dice “CLAVE_PRIVADA_AQUI“.

Puedes cambiar el 0.6 por otro valor entre 0.1 y 1

Cuanto más cerca del uno esté, más restrictivo es el control.