我已经有一段时间没有这个问题,我无法弄明白。我的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');
}
还有其他人也发布了这个问题,但似乎没有人发布任何解决方案(他们都只是切换到不同的验证码)。 有什么建议接下来要检查吗?
答案 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.com
和yourdomain.com