Невозможно заставить recaptcha работать на нашем сайте, независимо от того, что я пытаюсь, следуя инструкциям - PullRequest
0 голосов
/ 25 декабря 2018

Пользователь всегда получает отказ по какой-то причине.

На стороне клиента у нас есть именно то, что называется для v2, с

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

над тегом закрывающей головки и

<div class="g-recaptcha" data-sitekey="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>";
}

(Опять же, правильный секрет находится в правильном месте.) IЯ пробовал другой код на стороне сервера, и ничего не получилось.

Любая помощь будет оценена.Спасибо!

1 Ответ

0 голосов
/ 09 января 2019

Хорошо, наконец-то понял это.Это очень просто: форма была внутри таблицы, и согласно другому сообщению я наконец нашел , из-за чего форма преждевременно закрывалась в DOM, и Recaptcha не смог найти g-recaptcha-ответ, который он изначально создал.Размещение тегов <form> вне таблицы решило проблему.

Держу пари, что это довольно распространенная ошибка, я удивлен, что найти решение было так сложно.Я надеюсь, что это поможет кому-то еще испытать эту очень неприятную проблему.

...