Ошибка в документации reCAPTCHA?

В документации reCAPTCHA на странице Displaying reCAPTCHA Without Plugins содержится код вставки капчи:
<script type="text/javascript"
     src="http://www.google.com/recaptcha/api/challenge?k=your_public_key">
  </script>
  <noscript>
     <iframe src="http://www.google.com/recaptcha/api/noscript?k=your_public_key"
         height="300" width="500" frameborder="0"></iframe>
     <textarea name="recaptcha_challenge_field" rows="3" cols="40">
     </textarea>
     <input type="hidden" name="recaptcha_response_field"
         value="manual_challenge">
  </noscript>


Есть два элемента ввода:
Textarea с название recaptcha_challenge_field, видно куда вводится капча, но также есть и невидимый input recaptcha_response_field.

Но внизу этого кода подписано:
recaptcha_challenge_field is a hidden field that describes the CAPTCHA which the user is solving. It corresponds to the «challenge» parameter required by the reCAPTCHA verification API.
recaptcha_response_field is a text field where the user enters their solution. It corresponds to the «response» parameter required by the reCAPTCHA verification API.

И теперь два вопроса — где правильно? куда сообщить?
  • Вопрос задан
  • 4690 просмотров
Пригласить эксперта
Ответы на вопрос 1
colonel
@colonel
Разработчик PHP, Laravel
В чем вы видите ошибку или проблему здесь?

Оба значения этих полей нужны при передаче для проверки.
Вот у нас, к примеру:

Клиентская сторона (js):

recaptcha_c = $('#recaptcha_challenge_field').val();
recaptcha_r = $('#recaptcha_response_field').val();


И серверная (php, метод небольшого класса для работы с recaptcha):

public static function check()
{
	if ( Ts_App::getConfig('recaptcha_enabled') ) {
	    $recaptchaC = Request::getVar('recaptcha_c');
	    $recaptchaR = Request::getVar('recaptcha_r');
	    
	    if ( empty ($recaptchaC) || empty ($recaptchaR) ) {
		return false;
	    } else {
		$privkey = Ts_App::getConfig('recaptcha_priv_key');
		$remoteip = Request::getIp();
		
		if( $curl = curl_init() ) {
		    curl_setopt($curl, CURLOPT_URL, 'http://www.google.com/recaptcha/api/verify');
		    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
		    curl_setopt($curl, CURLOPT_POST, true);
		    curl_setopt($curl, CURLOPT_POSTFIELDS, "privatekey={$privkey}&remoteip={$remoteip}&challenge={$recaptchaC}&response={$recaptchaR}");
		    $out = curl_exec($curl);
		    if ( !$out ) {
		        return false;
		    } else {
		        $responses = explode("\n", $out);
		        if ( $responses[0] != 'true' ) {
		            return false;
		        }
		    }
		    
		    curl_close($curl);
		}
		
		return true;
	    }
	} else {
	    return true;
	}
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы