如何获得点击验证码的响应作为变量

how to get response of clicked captcha as a variable

我想在我的登录页面中包含 google 验证码。

通常,我从各种输入中收集变量,然后使用 ajax 将它们发送到 prologin.php 进行处理。

但是不知道如何得到clicked验证码的响应,什么样的响应是可能的(truefalse,或者...什么?),到也处理它们。

login.php

<script src='https://www.google.com/recaptcha/api.js'></script>
<input type='text'...>
<input type='checkbox'...>
<div class="g-recaptcha" data-sitekey="6Ld..."></div>
<div id='btnlogin'>LOGIN</div>

login.js

$('#btnlogin').click(function(){
var a = ...;
var b = ...;
var captchaResponse = ...;  // what ?
$.ajax({
    url: 'prologin.php',
    ...
});

有什么帮助吗?

Google recaptcha 的响应以名称 g-recaptcha-response 发送。这也是输入(文本区域)的 class 名称和 ID。所以你可以试试这些:

$('#g-recaptcha-response').val();
$('form .g-recaptcha-response').val();
$('form [name="g-recaptcha-response"]').val();

您必须使用 grecaptcha.getResponse() 才能获得用户的响应。作为旁注,使用 grecaptcha.reset() 要求最终用户再次使用 reCAPTCHA 进行验证。

$('#btnlogin').click(function(){
    var a = ...;
    var b = ...;
    var captchaResponse = grecaptcha.getResponse();
    $.ajax({
        url: 'prologin.php',
        ...
    });
    ...
});

引用如下:https://developers.google.com/recaptcha/docs/verify

Update(1):

是的,您必须将用户的响应发送到后端 PHP 页面 prologin.php 并在那里进行验证。粗略地说,您的 AJAX 和后端 PHP 代码将如下所示:

AJAX:

$('#btnlogin').click(function(){
    var a = ...;
    var b = ...;
    var captchaResponse = grecaptcha.getResponse();
    $.ajax({
        type: 'POST',
        url: 'prologin.php',
        data: {a: a, b: b, captchaResponse: captchaResponse};
        success: function(data) {
            // reset the reCaptcha
            grecaptcha.reset();
        },
        error: function(jqXHR, textStatus, errorThrown){
            // error
        }
    });
    ...
});

prologin.php

<?php
    //your site secret key
    $secret = 'YOUR_SECRET_KEY';

    if(isset($_POST['captchaResponse']) && !empty($_POST['captchaResponse'])){
        //get verified response data
        $param = "https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$_POST['captchaResponse'];
        $verifyResponse = file_get_contents($param);
        $responseData = json_decode($verifyResponse);

        if($responseData->success){
            // success
        }else{
            // failure
        }
    }
?>