首页 > 解决方案 > 无法让 recaptcha 在我们的网站上工作,无论我尝试什么,按照指示

问题描述

用户总是因为某种原因被拒绝。

在客户端,我们拥有 v2 所要求的内容,其中

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

在结束头标签上方,以及

<div class="g-recaptcha" data-sitekey="CLIENT SIDE SECRET">

在表格的适当位置。(我们的正确秘密在 CLIENT SIDE SECRET 位置。)

在服务器端,我们有:

$response = $_POST["g-recaptcha-response"];
$url = 'https://www.google.com/recaptcha/api/siteverify';
$data = array(
    'secret' => 'SERVER SIDE SECRET',
    'response' => $_POST["g-recaptcha-response"],
    // for Cloudflare
    'remoteip' => (isset($_SERVER["HTTP_CF_CONNECTING_IP"]) ? $_SERVER["HTTP_CF_CONNECTING_IP"] : $_SERVER['REMOTE_ADDR'])
);
$options = array(
    'http' => array (
        'method' => 'POST',
        'content' => http_build_query($data)
    )
);
$context = stream_context_create($options);
$verify = file_get_contents($url, false, $context);
$captcha_success = json_decode($verify);

if ($captcha_success->success==false) {
    echo "<h3>You are a bot! Go away!</h3>";
    exit;
} else if ($captcha_success->success==true) {
    //echo "<h3>You are not not a bot!</h3>";
}

(同样,正确的秘密在正确的位置。)我在服务器端尝试了一些不同的代码,但没有任何效果。

任何帮助,将不胜感激。谢谢!

标签: recaptcha

解决方案


好吧,终于想通了。这很简单:表单在一个表格中,根据我终于找到的另一篇文章,因此,表单在 DOM 中过早关闭,并且 Recaptcha 找不到它最初创建的 g-recaptcha-response。将<form>标签放在桌子外面解决了这个问题。

我敢打赌,这是一个很常见的错误,我很惊讶找到解决方案是如此之难。我希望这可以帮助其他遇到这个非常令人沮丧的问题的人。


推荐阅读