Google ReCaptcha没有发布' g-recaptcha-response'在某些页面上

时间:2016-05-04 21:17:30

标签: php recaptcha

我已经有一段时间没有这个问题,我无法弄明白。我的Google重新访问代码似乎适用于某些网站 - 但添加到其他网站(甚至是同一网站内的其他网页)时完全相同的代码仍然无效。 当它不起作用时,如果我做var_dump($ _ POST [' g-recaptcha-response']); (在第二页)我得到NULL。

我的初始/表格代码:

<script src='https://www.google.com/recaptcha/api.js'></script>
<div class="g-recaptcha" data-sitekey="xxxxx"></div>

我的验证页码:

$gRecaptcha = $_POST['g-recaptcha-response'];
$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=xxxxx&response=".$gRecaptcha."&remoteip=".$_SERVER['REMOTE_ADDR']);
if($response.success==false || !$gRecaptcha){
    die('xxxx');
}

还有其他人也发布了这个问题,但似乎没有人发布任何解决方案(他们都只是切换到不同的验证码)。 有什么建议接下来要检查吗?

3 个答案:

答案 0 :(得分:0)

if statement子句中的条件错误。 API响应是一个json对象,如下所示:

if

以下是参考资料:

首先,您必须使用{ "success": true|false, "challenge_ts": timestamp, // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ) "hostname": string, // the hostname of the site where the reCAPTCHA was solved "error-codes": [...] // optional } 函数对其进行解码,然后检查用户响应的状态。

因此你的代码应该是这样的:

json_decode()

答案 1 :(得分:0)

像这样使用: 步骤1 : 把这段代码用于验证:

<?php
$secret = "Your own code";
$sitekey = "Your own code";
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
    $captcha=$_POST['g-recaptcha-response'];
            if(!$captcha){
                header("Location: index.php?info=cap");
                exit;
            }
            $response=json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secret."&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']), true);
            if($response['success'] == false)
            {
                  header("Location: index.php?info=cap");
                    exit;
            }
}
    ?>

第2步:在表单中使用此标记:

<label>I'm not robot: </label>
<div class="g-recaptcha"></div>

第3步:Google API

<script src="https://www.google.com/recaptcha/api.js?onload=CaptchaCallback&render=explicit" async defer></script>
<script type="text/javascript">
    var CaptchaCallback = function(){
    $('.g-recaptcha').each(function(index, el) {
        grecaptcha.render(el, {'sitekey' : '<?php echo $sitekey;?>'});
        });
    };
</script>

答案 2 :(得分:-1)

确认您已在google recaptcha中添加了这两项内容:

www.yourdomain.comyourdomain.com