No recibir el objeto JSON de validación del servidor Google reCapthca V3

Estoy tratando de verificar la respuesta de un usuario a un reto de reCAPTCHA desde el backend de mi aplicación. Por favor, puede aconsejarme si he insertado el siguiente código en la sección derecha del formulario de contacto para verificar la respuesta de un usuario a un reto de reCaptcha.

¡Nota! ¡Estoy viendo la respuesta de los usuarios generados en la consola!

Este es el código del formulario de contacto

```
php

if(empty($_POST['name'])      ||
empty($_POST['email'])     ||
empty($_POST['phone'])     ||
empty($_POST['message'])   ||
!filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
{
echo "No arguments Provided!";
return false;
}

$name = strip_tags(htmlspecialchars($_POST['name']));
$email_address = strip_tags(htmlspecialchars($_POST['email']));
$phone = strip_tags(htmlspecialchars($_POST['phone']));
$message = strip_tags(htmlspecialchars($_POST['message']));

$to = '[email protected]\n";
$headers .= "Reply-To: $email_address";   
mail($to,$email_subject,$email_body,$headers);

Aquí está el código de validación lateral del servidor para verificar la respuesta de los usuarios, estoy usando (Google V3 reCaptcha)

```
foreach ($_POST a $key => $value) {
           echo 'key: '.$key.' value: '.$value.'
'; } if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['recaptcha_response'])) { $recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify'; $recaptcha_secret = 'SECRET_KEY'; $recaptcha_response = $_POST['recaptcha_response']; $recaptcha = file_get_contents($recaptcha_url.'?secret='.$recaptcha_secret.'&=response='.$recaptcha_response); $recaptcha = json_decode($recaptcha); foreach ($recaptcha as $key => $value) { echo 'object: '.$key.' value: '.$value.'
'; } if($recaptcha->score >= 0.5) { https://developers.google.com/recaptcha/docs/v3 echo 'verification succesful'; } else { echo 'verification failed'; exit; } } return true; ?> ```

¿He colocado el código en la sección correcta del formulario de contacto?

Pregunta hecha hace 3 años, 4 meses, 26 días - Por htmlhero


2 Respuestas:

  • Hay un error en tu código de validación del servidor para verificar la respuesta de reCAPTCHA V3. El error está en la forma en que estás construyendo la URL para enviar la solicitud de validación a Google. En la línea donde construyes la URL, estás incluyendo un signo de igual (=) adicional antes de 'response', lo cual está generando un error en la solicitud. Además, en el foreach donde estás recorriendo el objeto JSON decodificado, debes acceder a las propiedades utilizando la sintaxis de objeto, no como un array.

    Aquí está el código corregido:

    php
    foreach ($_POST as $key => $value) {
        echo 'key: ' . $key . ' value: ' . $value . '
    '; } if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['recaptcha_response'])) { $recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify'; $recaptcha_secret = 'SECRET_KEY'; $recaptcha_response = $_POST['recaptcha_response']; $recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response); $recaptcha = json_decode($recaptcha); foreach ($recaptcha as $key => $value) { echo 'property: ' . $key . ' value: ' . $value . '
    '; } if ($recaptcha->score >= 0.5) { echo 'verification successful'; } else { echo 'verification failed'; exit; } } return true;

    Con estas correcciones, tu código debería funcionar correctamente para verificar la respuesta de reCAPTCHA V3. Asegúrate de reemplazar 'SECRET_KEY' con la clave secreta proporcionada por Google para tu sitio. Además, verifica que el código de validación esté en el lugar correcto en tu aplicación, adecuadamente vinculado al formulario de contacto.

    Respondida el Dec 21, 2020 a las 17:05 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Código de verificación de reCAPTCHA v3

    El código de verificación de reCAPTCHA v3 debe colocarse después del envío del formulario, ya que utiliza una solicitud POST para enviar la respuesta del usuario.

    En tu código, tienes el código de verificación dentro de un bucle foreach que recorre todas las variables POST. Esto no es necesario y puede hacer que el código sea difícil de leer y depurar.

    Código corregido

    Aquí tienes el código de verificación corrigido:

    php
     $secret,
            'response' => $captcha,
        ];
        $options = [
            'http' => [
                'header' => "Content-type: application/x-www-form-urlencoded\r\n",
                'method' => 'POST',
                'content' => http_build_query($data),
            ],
        ];
        $context = stream_context_create($options);
        $result = file_get_contents($url, false, $context);
        $json = json_decode($result);
    
        // Verificación de la respuesta
        if ($json->success) {
            // reCAPTCHA exitoso, proceder con el envío del formulario
            echo 'Envío del formulario exitoso';
        } else {
            // reCAPTCHA fallido, mostrar un error
            echo 'Error en reCAPTCHA';
        }
    }
    

    Este código:

    Recupera la respuesta de reCAPTCHA v3 del envío del formulario (

    $POST['recaptcharesponse']
    ). Utiliza la API de Google reCAPTCHA para verificar la respuesta. Comprueba el resultado de la verificación y actúa en consecuencia (envío exitoso o error de reCAPTCHA).

    Nota:

    No olvides reemplazar SECRET_KEY con tu clave secreta de sitio de reCAPTCHA v3. * Comprueba que el dominio de tu sitio web está incluido en la lista de dominios permitidos en la configuración de reCAPTCHA v3.

    Respondida el Dec 21, 2020 a las 17:17 - por Gemini

    Votos positivos: 0 | Votos negativos: 0