AJAX форма и Invisible reCAPTCHA

Решение, как подключить невидимую капчу от Google reCAPTCHA Invisible для AJAX формы

AJAX форма и Invisible reCAPTCHA

Решение:
  1. Получить API ключи по ссылке
  2. В подвал код:
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src='https://www.google.com/recaptcha/api.js?hl=ru'></script>
  3. Форма:
    <form id="myForm">
        <input type="text" name="text" value="Тест">
        <button class="g-recaptcha" data-sitekey="_____КЛЮЧ_____" data-callback="onSubmit">Отправить</button>
    </form>
    
    <div id="status"></div>
    
    <script>
    function onSubmit(token) {                      
        $.ajax({
            type: "POST",
            url: "ajax.php",
            data: $("#myForm").serialize(),
            success: function(data){
                $("#status").html(data);
            },
            error: function(){
                $("#status").html("Failed.");
            }       
        });
    }
    </script>
  4. Файл ajax.php
    <?
        function post_captcha($user_response) {
            $fields_string = '';
            $fields = array(
                'secret' => '_____СЕКРЕТНЫЙ_КЛЮЧ_____',
                'response' => $user_response
            );
            foreach($fields as $key=>$value)
            $fields_string .= $key . '=' . $value . '&';
            $fields_string = rtrim($fields_string, '&');
    
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, 'https://www.google.com/recaptcha/api/siteverify');
            curl_setopt($ch, CURLOPT_POST, count($fields));
            curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, True);
    
            $result = curl_exec($ch);
            curl_close($ch);
    
            return json_decode($result, true);
        }
    
        // Call the function post_captcha
        $res = post_captcha($_POST['g-recaptcha-response']);
    
        if (!$res['success']) {
            // Если капча не правильная
            echo 'reCAPTCHA error: Check to make sure your keys match the registered domain and are in the correct locations. You may also want to doublecheck your code for typos or syntax errors.';
        } else {
            // Если капча правильная
            echo $_POST['text'];
            echo '<br><p>CAPTCHA was completed successfully!</p><br>';
        }
    ?>
Похожие решения:
Изменено: 18 01 2021
Просмотров: 3030

Написать комментарий (без авторизации) 3

А куда конкретно вписывать отправку письма ? т.е. содержимое mail.php

Не могли бы показать полный вариант?

и еще — у меня 10 однотипных форм обратной связи на странице, можно использовать одну капчу?
Ответить
Это сайт шпаргалка. Полный вариант по зелёной кнопке, выше.
Ответить
Заметил, если скрипт отправки формы разместить выше подключения jQuery, то не работает.
Ответить
Написать