#html #css #recaptcha
Возможно ли добавить капчу на локальном сервере? Как эта правильно делается для обычной формы (поделитесь ссылкой, нашел только под wordpress)?
Ответы
Ответ 1
Мне помогла вот эта статья, всё довольно подробно описано Если вкратце: нужно получить API key и там в настройках указать домен вашего сайта (localhost, если вы хотите протестировать работу капчи на локалке). Там же вам предоставляется кусок html который нужно скопировать в форму и файл скрипта: когда вы всё это подключите при отправке формы на сервер вместе с полями будет передаваться значение 'get-recaptcha-response' Ещё один момент, если вы не используете функцию serialize, а вручную собираете поля и отправляете аяксом, то и поле get-racaptcha-response тоже нужно получить вручную, как-то так: _formData['g-recaptcha-response'] = grecaptcha.getResponse(); функция grecaptcha.getResponse() определена в скрипте, который вы подключили (пункт 1) теперь когда отправили код капчи на сервер нужно обработать запрос на сервере, тут уж на ваше усмотрение. Подключите файл с вот этим кодом к вашему PHP-обработчику формы: " . self::$_signupUrl . ""); } $this->_secret=$secret; } /** * Encodes the given data into a query string format. * * @param array $data array of string elements to be encoded. * * @return string - encoded request. */ private function _encodeQS($data) { $req = ""; foreach ($data as $key => $value) { $req .= $key . '=' . urlencode(stripslashes($value)) . '&'; } // Cut the last '&' $req=substr($req, 0, strlen($req)-1); return $req; } /** * Submits an HTTP GET to a reCAPTCHA server. * * @param string $path url path to recaptcha server. * @param array $data array of parameters to be sent. * * @return array response */ private function _submitHTTPGet($path, $data) { $req = $this->_encodeQS($data); $response = file_get_contents($path . $req); return $response; } /** * Calls the reCAPTCHA siteverify API to verify whether the user passes * CAPTCHA test. * * @param string $remoteIp IP address of end user. * @param string $response response string from recaptcha verification. * * @return ReCaptchaResponse */ public function verifyResponse($remoteIp, $response) { // Discard empty solution submissions if ($response == null || strlen($response) == 0) { $recaptchaResponse = new ReCaptchaResponse(); $recaptchaResponse->success = false; $recaptchaResponse->errorCodes = 'missing-input'; return $recaptchaResponse; } $getResponse = $this->_submitHttpGet( self::$_siteVerifyUrl, array ( 'secret' => $this->_secret, 'remoteip' => $remoteIp, 'v' => self::$_version, 'response' => $response ) ); $answers = json_decode($getResponse, true); $recaptchaResponse = new ReCaptchaResponse(); if (trim($answers ['success']) == true) { $recaptchaResponse->success = true; } else { $recaptchaResponse->success = false; $recaptchaResponse->errorCodes = $answers [error-codes]; } return $recaptchaResponse; } } ?> Далее в обработчике нужно создать класс ReCapcha и вызвать функцию verifyResponse: // ваш секретный ключ $secret = "6LcePAATAAAAABjXaTsy7gwcbnbaF5XgJKwjSNwT"; // пустой ответ $response = null; // проверка секретного ключа $reCaptcha = new ReCaptcha($secret); // if submitted check response if ($_POST["g-recaptcha-response"]) { $response = $reCaptcha->verifyResponse( $_SERVER["REMOTE_ADDR"], $_POST["g-recaptcha-response"] ); } if ($response != null && $response->success) { echo "Hi " . $_POST["name"] . " (" . $_POST["email"] . "), thanks for submitting the form!"; }
Комментариев нет:
Отправить комментарий