Как я могу реализовать Google Recaptcha v3 в форме PHP? - PullRequest
0 голосов
/ 14 января 2019

Я хотел бы вставить контактную форму для новой версии (V3) Recaptcha.

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

1 Ответ

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

Я искал на этом и других форумах, чтобы внедрить новую версию ReCaptcha (V3) в мои формы. Мне нужно было знать, как:

  • Вставьте его с JS
  • Как проверить это с помощью PHP
  • Какие новые поля были необходимы в моей форме.

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

В конце, взяв несколько частей кода нескольких решений, я использую простой и многократно используемый код, в который вам нужно только вставить соответствующие ключи.

Вот оно.

Базовый код JS

<script src="https://www.google.com/recaptcha/api.js?render=your reCAPTCHA site key here"></script>
<script>
    grecaptcha.ready(function() {
    // do request for recaptcha token
    // response is promise with passed token
        grecaptcha.execute('your reCAPTCHA site key here', {action:'validate_captcha'})
                  .then(function(token) {
            // add token value to form
            document.getElementById('g-recaptcha-response').value = token;
        });
    });
</script>

Основной HTML-код

<form id="form_id" method="post" action="your_action.php">
    <input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response">
    <input type="hidden" name="action" value="validate_captcha">
    .... your fields
</form>

Базовый код PHP

    if(isset($_POST['g-recaptcha-response'])){
        $captcha=$_POST['g-recaptcha-response'];
    }
    else
        $captcha = false;

    if(!$captcha){
        //Do something with error
    }
    else{
        $secret = 'Your secret key here';
        $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=
            .$secret.&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);
        if($response.success==false)
        {
            //Do something with error
        }
    }
... The Captcha is valid you can continue with the rest of your code

Вам нужно только добавить свои ключи, больше никаких изменений не требуется:

    src="https://www.google.com/recaptcha/api.js?render=your reCAPTCHA site key here"    
    grecaptcha.execute('your reCAPTCHA site key here'

и

    $secret = 'Your secret key here';

Очевидно, что вы также должны изменить действие формы, в этом примере:

    action = "your_action.php"
...