Saltar al contenido

Demostración de ejemplo de Google Recaptcha v3

Solución:

Código simple para implementar ReCaptcha v3

El código JS básico



El código HTML básico

.... your fields

El código PHP básico

if (isset($_POST['g-recaptcha-response'])) 
    $captcha = $_POST['g-recaptcha-response'];
 else 
    $captcha = false;


if (!$captcha) 
    //Do something with error
 else 
    $secret   = 'Your secret key here';
    $response = file_get_contents(
        "https://www.google.com/recaptcha/api/siteverify?secret=" . $secret . "&response=" . $captcha . "&remoteip=" . $_SERVER['REMOTE_ADDR']
    );
    // use json_decode to extract json response
    $response = json_decode($response);

    if ($response->success === false) 
        //Do something with error
    


//... The Captcha is valid you can continue with the rest of your code
//... Add code to filter access using $response . score
if ($response->success==true && $response->score <= 0.5) 
    //Do something to denied access

Tienes que filtrar el acceso usando el valor de $ response.score. Puede tomar valores de 0.0 a 1.0, donde 1.0 significa la mejor interacción del usuario con su sitio y 0.0 la peor interacción (como un bot). Puede ver algunos ejemplos de uso en la documentación de ReCaptcha.

Supongo que tiene la clave del sitio y el secreto en su lugar. Siga este paso.

En su archivo HTML, agregue el script.

 

Además, use jQuery para facilitar el manejo de eventos.

Aquí está la forma simple.

 






Debe inicializar el recaptcha de Google y escuchar el evento listo. A continuación se explica cómo hacerlo.

     

Aquí está el archivo PHP de muestra. Puede usar Servlet o Node o cualquier idioma de backend en su lugar.

Please check the the captcha form.';
          exit;
        
        $secretKey = "put your secret key here";
        $ip = $_SERVER['REMOTE_ADDR'];

        // post request to server

        $url =  'https://www.google.com/recaptcha/api/siteverify?secret=' . urlencode($secretKey) .  '&response=' . urlencode($captcha);
        $response = file_get_contents($url);
        $responseKeys = json_decode($response,true);
        header('Content-type: application/json');
        if($responseKeys["success"]) 
                echo json_encode(array('success' => 'true'));
         else 
                echo json_encode(array('success' => 'false'));
        
?>

Aquí está el enlace del tutorial: https://codeforgeek.com/2019/02/google-recaptcha-v3-tutorial/

Espero eso ayude.

Pensé que una demostración de ejemplo de reCaptcha v3 en pleno funcionamiento en PHP, utilizando un formulario Bootstrap 4, podría ser útil para algunos.

Haga referencia a las dependencias que se muestran, intercambie su dirección de correo electrónico y claves (cree sus propias claves aquí), y el formulario está listo para probar y usar. Hice comentarios de código para aclarar mejor la lógica y también incluí el registro de la consola con comentarios y las líneas print_r para permitir ver rápidamente el token de validación y los datos generados desde Google.

La función jQuery incluida es opcional, aunque crea una experiencia de aviso de usuario mucho mejor en esta demostración.


Archivo PHP (mail.php):

Agregar clave secreta (2 lugares) y la dirección de correo electrónico donde se indique.

 "your-secret-key-here",
    'response' => $_POST['token'],
    'remoteip' => $_SERVER['REMOTE_ADDR']
  ];

  $options = array(
    'http' => array(
      'header'  => "Content-type: application/x-www-form-urlencodedrn",
      'method'  => 'POST',
      'content' => http_build_query($data)
    )
    );
  
  # Creates and returns stream context with options supplied in options preset 
  $context  = stream_context_create($options);
  # file_get_contents() is the preferred way to read the contents of a file into a string
  $response = file_get_contents($url, false, $context);
  # Takes a JSON encoded string and converts it into a PHP variable
  $res = json_decode($response, true);
  # END setting reCaptcha v3 validation data
   
    // print_r($response); 
# Post form OR output alert and bypass post if false. NOTE: score conditional is optional
# since the successful score default is set at >= 0.5 by Google. Some developers want to
# be able to control score result conditions, so I included that in this example.

  if ($res['success'] == true && $res['score'] >= 0.5) 
 
    # Recipient email
    $mail_to = "[email protected]";
    
    # Sender form data
    $subject = trim($_POST["subject"]);
    $name = str_replace(array("r","n"),array(" "," ") , strip_tags(trim($_POST["name"])));
    $email = filter_var(trim($_POST["email"]), FILTER_SANITIZE_EMAIL);
    $phone = trim($_POST["phone"]);
    $message = trim($_POST["message"]);
    
    if (empty($name) OR !filter_var($email, FILTER_VALIDATE_EMAIL) OR empty($phone) OR empty($subject) OR empty($message)) 
      # Set a 400 (bad request) response code and exit
      http_response_code(400);
      echo '

Please complete the form and try again.

'; exit; # Mail content $content = "Name: $namen"; $content .= "Email: $emailnn"; $content .= "Phone: $phonen"; $content .= "Message:n$messagen"; # Email headers $headers = "From: $name <$email>"; # Send the email $success = mail($mail_to, $subject, $content, $headers); if ($success) # Set a 200 (okay) response code http_response_code(200); echo '

Thank You! Your message has been successfully sent.

'; else # Set a 500 (internal server error) response code http_response_code(500); echo '

Something went wrong, your message could not be sent.

'; else echo '
Error! The security token has expired or you are a bot.
'; else # Not a POST request, set a 403 (forbidden) response code http_response_code(403); echo '

There was a problem with your submission, please try again.

'; ?>

HTML

Dependencia de Bootstrap CSS y validación del lado del cliente de reCaptchaLugar entre etiquetas: pegue su propia clave de sitio donde se indique.




HTML

Lugar entre etiquetas.


Contact Form


Función jQuery opcional para mejorar la experiencia de usuario (form.js):

(function ($) 
'use strict';

var form = $('.contact_form'),
  message = $('.contact_msg'),
  form_data;

// Success function
function done_func(response) 
  message.fadeIn()
  message.html(response);
  setTimeout(function () 
    message.fadeOut();
  , 10000);
  form.find('input:not([type="submit"]), textarea').val('');


// fail function
function fail_func(data) 
  message.fadeIn()
  message.html(data.responseText);
  setTimeout(function () 
    message.fadeOut();
  , 10000);


form.submit(function (e) 
  e.preventDefault();
  form_data = $(this).serialize();
  $.ajax(
    type: 'POST',
    url: form.attr('action'),
    data: form_data
  )
  .done(done_func)
  .fail(fail_func);
); )(jQuery);

No se te olvide comunicar esta reseña si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *