https://developers.google.com/recaptcha/docs/verify

if(isset($_POST['submit'])){
$recaptchaResponse = $_POST['g-recaptcha-response'];
$secretKey = 'MYKEY';
$request = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secretKey."&response=".$recaptchaResponse);

    if(!strstr($request,"false")){
echo '<div class="notification error clearfix"><p><strong>Attention!</strong> You didnt complete the captcha.</p></div>';
exit();

A continuación, el resto del archivo php por correo el formulario, pero simplemente el envío de todos modos, incluso si usted no completa el recaptcha. Básicamente, si el JSON que devuelve un false yo esperaba que el no enviar y mostrar un error

También aquí se encuentra el formulario de la página por si ayuda, He hecho probablemente algo mal ahí también…

<form method="POST" action="post.php" name="contactform" id="contactform" class="container">

            <fieldset>
                <div class="form-field grid-half">
                    <label for="name">Name</label>
                    <span><input type="text" name="name" id="name" /></span>
                </div>
                <div class="form-field grid-half">
                    <label for="email">Email</label>
                    <span><input type="email" name="email" id="email" /></span>
                </div>
                <div class="form-field grid-full">
                    <label for="message">Message</label>
                    <span><textarea name="message" id="message"></textarea></span>
                </div>                  
                <div class="form-field grid-full">
                        <div class="g-recaptcha" data-sitekey="MYKEY"></div>
                </div>
            </fieldset>
            <div class="form-click grid-full">
                <span><input type="submit" name="submit" value="Submit" id="submit" /></span>
            </div>

            <div id="alert" class="grid-full"></div>
        </form>     
¿Por qué usar un Captcha? En nuestra empresa realizamos un estudio y encontró que alrededor del 30% de la gente simplemente va a dejar un formulario con captcha. Tal vez mirar hacia el Honeypot Técnica, junto con algunas Buenas lado del servidor de validación y de técnicas como el seguimiento del tiempo que tarda un usuario completa un formulario y contenido del textarea para el total de enlaces en el textarea. Si ir de esta manera no tendrá captchas y sus usuarios serán felices. Leer esto podría ayudar a: solutionfactor.net/blog/2014/02/01/…
Consulte este tutorial en Google reCaptcha v2 esta freakyjolly.com/how-to-add-google-recaptcha-in-php-form

OriginalEl autor millsteedo | 2014-12-03

6 Comentarios

  1. 24

    He encontrado que a veces, dependiendo de la versión de PHP/config, el acceso a un objeto directamente no funciona, por lo que el uso de json_decode().

    /* $response object returned from https://www.google.com/recaptcha/api/siteverify via which ever method you use */
    
    $obj = json_decode($response);
    if($obj->success == true)
    {
        //passes test
    }
    else
    {
        //error handling
    }
    Para ser claros,YOUR_SITE_KEY debe ser la «clave Secreta» no, el «Sitio clave» y $captcha es $_POST['g-recaptcha-response']
    Sí, «clave secreta» y «clave privada» aquí son la misma cosa, es la terminología de v1. A mí me funciona. Hacer esto con este simple código es mucho más fácil que la configuración de uno de los paquetes disponibles o componentes.

    OriginalEl autor Alan Kael Ball

  2. 19

    Utilizando curl en lugar de file_get_contents (en caso de que, como yo, quieren file_get_contents ser deshabilitado en la configuración del servidor)

    $post_data = "secret=__your_secret_key__&response=".
       $_POST['g-recaptcha-response']."&remoteip=".$_SERVER['REMOTE_ADDR'] ;
    
    $ch = curl_init();  
    curl_setopt($ch, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify");
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, 
       array('Content-Type: application/x-www-form-urlencoded; charset=utf-8', 
       'Content-Length: ' . strlen($post_data)));
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); 
    $googresp = curl_exec($ch);       
    $decgoogresp = json_decode($googresp);
    curl_close($ch);
    
    if ($decgoogresp->success == true)
        {
        //Success
        }
    Creo que esta es la mejor respuesta como recaptcha v2 documentación de la API de los estados que esto debe ser un blog, mientras que file_get_contents es CONSEGUIR.

    OriginalEl autor Peter

  3. 5

    Pega este fragmento de código antes de la etiqueta de cierre en la plantilla HTML:

    <script src='https://www.google.com/recaptcha/api.js'></script>

    Pega este fragmento de código al final de la donde desea que el reCAPTCHA widget aparezca:

    <div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div>

    Ejemplo :

    <html>
      <head>
        <title>Google recapcha demo - Codeforgeek</title>
        <script src='https://www.google.com/recaptcha/api.js'></script>
      </head>
      <body>
        <h1>Google reCAPTHA Demo</h1>
        <form id="comment_form" action="form.php" method="post">
          <input type="email" placeholder="Type your email" size="40"><br><br>
          <textarea name="comment" rows="8" cols="39"></textarea><br><br>
          <input type="submit" name="submit" value="Post comment"><br><br>
           <div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div>
        </form>
      </body>
    </html>

    form.php

    <?php
    
            $email;$comment;$captcha;
            if(isset($_POST['email'])){
              $email=$_POST['email'];
            }if(isset($_POST['comment'])){
              $email=$_POST['comment'];
            }if(isset($_POST['g-recaptcha-response'])){
              $captcha=$_POST['g-recaptcha-response'];
            }
            if(!$captcha){
              echo '<h2>Please check the the captcha form.</h2>';
              exit;
            }
            $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=YOUR_SECRET_KEY&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);
            if($response.success==true)            
            {
              echo '<h2>Thanks for posting comment.</h2>';
            }
    ?>

    Fuente :

    He encontrado que esta solución depende de la versión de PHP y un poco de configuración (algo que no siempre es posible tener el control de algunos servidores compartidos). Para remediar, uso $obj =json_decode($response); if($obj->{'success'}==true)
    A mí me funciona bastante bien. Gracias 🙂
    Esto es en realidad lo que necesitaba: Una simple, una explicación paso a paso. Gracias!

    OriginalEl autor Elshan

  4. 5

    Primero, las respuestas ya dadas aquí son absolutamente adecuada.
    Dicho esto, yo sólo quería incluir esta función que ajusta las respuestas a esas preguntas en un poco más conveniente método, de esa manera usted puede lanzar en su función de biblioteca y bastante olvidarse de él hasta que google cambia algo. ¡A disfrutar!

    //Put these two functions into your function library-------
    function CaptchaVerify($apiSecret)
    {
        //Returns -1 if no captcha response was in post(user did not submit form)
        //Returns 0 if the verification fails
        //Returns 1 if the verification succeeds
        $captcha = isset($_POST['g-recaptcha-response'])? "&response=".$_POST['g-recaptcha-response']:'';
        if($captcha != '')
        {
            $verifyUrl = "https://www.google.com/recaptcha/api/siteverify";
            $apiSecret = "?secret=".$apiSecret;
            $remoteip = "&remoteip=".$_SERVER['REMOTE_ADDR'];
            $response=file_get_contents($verifyUrl.$apiSecret.$captcha.$remoteip);
            $obj = json_decode($response);
            return (integer)$obj->success;          
        }
        return -1;
    }
    function MyCaptchaVerify()
    {
        $apiSecret = "PUT YOUR CAPTCHA SECRET HERE";
        return CaptchaVerify($apiSecret);
    }
    //-------------------------------------------------------
    //Example usage in your form
    switch(MyCaptchaVerify())
    {
        case -1:echo "The form has not been submitted yet(First Load).<br>";break;
        case  0:echo "The captcha verification failed.<br>";    break;
        case  1:echo "The captcha verification succeeded.<br>"; break;
    }
    He mejorado la solución mediante Curl y programación orientada a objetos: gist.github.com/sentenza/f4f8dcce126ccba93d042ada5eae379b

    OriginalEl autor Paul Ishak

  5. 1

    Prefiero el rizo ejemplo a la file_get_contents como le da más opciones para el registro de errores y tal. Algunos encuentran cURL bastante desalentador, aunque. Para aquellos usuarios que Necesiten es una muy buena alternativa.

    OriginalEl autor Surya

  6. -5
    if (response == true) {
        mail();
    } else {
        echo "error";
    } 

    OriginalEl autor random

Dejar respuesta

Please enter your comment!
Please enter your name here