Установка капчи reCAPTCHA v2 на сайт без отправки формы
Технически задача выглядит так: на клиенте пользователь нажимает галочку «Я не робот» (описание от Google), по нажатии какойто кнопки — проверяем деймтвитель но ли капча пройдена.
Html (клиент):
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <script type="text/javascript">               var onloadCallback = function() {                 grecaptcha.render('capcha_element', {                   'sitekey' : 'ключ сайта',                    hl : "ru"                 });               }; </script> <div class="border border-light p-5" id="RegistrationDiv">     <p class="h4 mb-4 text-center">Регистрация</p>             <input type="email" name="RegisterFormEmail" id="RegisterFormEmail" class="form-control mb-4" placeholder="E-mail">         <input type="password" name="RegisterFormPassword" id="RegisterFormPassword" class="form-control" placeholder="Пароль" aria-describedby="RegisterFormPasswordHelpBlock">     <small id="RegisterFormPasswordHelpBlock" class="form-text text-muted mb-4">Минимальная длина 8 симоволов</small>     <div id="capcha_element"></div>         <button id="RegistrationStartButton" onclick="RegistrationStart()" class="btn btn-success my-4 btn-block">Зарегистрироваться</button> </div> <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script> <script> function GetCapchaData(){ if (typeof grecaptcha.getResponse=="function") { return grecaptcha.getResponse();  } else { return "";  }; } function RegistrationStart(){  $.post("registration.php", { capcha: GetCapchaData() }) .done(function( data ) { }); } </script> | 
PHP (сервер)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php         $res=GetResponseCapcha($capcha);         if (isset($res->success)):            if ($res->success==true):                   // капча пройдена, чтото делаем дальше                else: 		 // это робот - пишем ошибку            endif;         endif; function GetResponseCapcha($capcha){     $ch = curl_init("https://www.google.com/recaptcha/api/siteverify");                         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);         $js["secret"]="секретный ключ сайта";         $js["response"]=$capcha;         curl_setopt($ch, CURLOPT_POST, 1);         curl_setopt($ch, CURLOPT_POSTFIELDS, $js);         $res= json_decode(curl_exec($ch));        return $res; } |