2016-02-29 3 views
5

Поиск по настройке reCaptcha, похоже, приводит к использованию проверки jQuery. Однако я не уверен, как это сделать в контексте представления формы ajax.Google recaptcha с моей функцией jquery/ajax

В настоящее время я использую Validity, а не проверку jQuery. У меня есть ссылка на скрипт в моем заголовке и ключом на месте.

В каком порядке следует проверить reCaptcha?


<form id="intake-form" class="grid-form" action="javascript:void(0);"> 
    ... 
    <div class="g-recaptcha" data-sitekey="key_here"></div> 
    <input type="submit" name="submit" value="Send!" /> 
    <br /> 
    <p id="formstatus"></p> 
</form> 

$("#intake-form").submit(function() { 
    var str = $(this).serialize(); 
    if (validateIntakeForm()) { // validate intake fields with validity 
     $.ajax({ 
      type: "POST", 
      url: global['base']+"intakeform", 
      data: str, 
      success: function (msg) { 
       $("#formstatus").ajaxComplete(function (event, request, settings) { 
        if (msg == 'success') { 
         result = '<div class="successmsg">Your request has been sent.'; 
         $('#intake-form').clearForm(); 
        } else { 
         result = 'There was a problem sending your message.<br />' + msg; 
        } 
        $(this).html(result); 
       }); 
      } 

     }); 
     return false; 
    } 
}); 
+1

Что вы имеете в виду * Где именно это лучшее место для проверки reCaptcha *? – Derek

+0

Я не уверен, как я проверяю его при использовании ajax. Это что-то я обертываю вокруг моего запроса ajax? – drpcken

+0

Не проверяете ли вы действительность 'CAPTCHA' на PHP? – Derek

ответ

5

Google будет проверять повторной captacha для вас. Приведенный ниже пример.

<?php 

//first i retrieved the recaptcha coming through post method. 
//i have used post method, you can use any method you want. 

$recaptcha = $_POST['g-recaptcha-response']; 

//After retrieving send a post curl request to verify it. 
//you will have to send your secret key along with it. 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,"https://www.google.com/recaptcha/api/siteverify"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS,"secret=*******************************=".$recaptcha); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$server_output = curl_exec ($ch); 
$server_output = json_decode($server_output,true); 
curl_close ($ch); 

if($server_output['success']){ 
// captacha validated successfully. 
}else{ 
// invalid captcha 
} 

?>

Вы можете передать docs.

-1

Я успешно реализован ReCaptcha на одном из моих сайтов. Я не играл с ним с давних времен, поэтому я точно не знаю, как Google справляется с этим.

Но в любом случае, вот упрощенная версия моего рабочего кода, надеюсь, это может вам помочь.

<body> 
<form method="post" action=""> 
    <!-- your regular form fields here... --> 
    <div class="g-recaptcha" data-callback="processCaptcha" data-sitekey="THE_KEY_HERE"></div> 
    <!-- or your regular form fields here... --> 
    <input type="submit" value="Send"/> 
</form> 
<script type="text/javascript" src="https://www.google.com/recaptcha/api.js?hl=eng"></script> 
<script src="https://www.google.com/recaptcha/api.js" async defer></script> 
</body> 

Для сценария с SRC = "https://www.google.com/recaptcha/api.js?hl=eng", я отметил ссылку на эту ссылку: https://developers.google.com/recaptcha/docs/language.

И на стороне сервера:

<?php 


$secret = "THE_KEY_HERE"; 
$errors = []; 
$gRecaptchaResponse = $_POST["g-recaptcha-response"]; 
$recaptcha = new \ReCaptcha\ReCaptcha($secret); // this class is provided by google 

$resp = $recaptcha->verify($gRecaptchaResponse, $_SERVER['REMOTE_ADDR']); 
if (false === $resp->isSuccess()) { 
//    $errors = $resp->getErrorCodes(); 
    $errors[] = "Boo, you are a bot"; 
} 


if (empty($errors)) { 
    // your success routine here 
} 
else { 
    // your error routine here 
} 
+1

Вы используете устаревший код recaptcha. – Derek

1

Вы можете использовать Google плагин для проверки ReCaptcha в PHP попробовать этот link , а затем включить этот код в сценарии проверки PHP

$recaptcha = new \ReCaptcha\ReCaptcha(RECAPTCHA_SECRET_KEY); 
$resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER["REMOTE_ADDR"]); 
if(!$resp->isSuccess()) //ERROR CAPTCHA NOT VALIDATED