Использование reCAPTCHA с PHP

Важно ! Версия 1.0 API reCAPTCHA больше не поддерживается, обновите ее до версии 2.0. Узнать больше

PHP-библиотека reCAPTCHA предоставляет простой способ разместить CAPTCHA на вашем веб-сайте PHP, помогая вам не дать ботам злоупотреблять ею. Библиотека является оберткой API reCAPTCHA .

Чтобы использовать reCAPTCHA с PHP, вы можете скачать PHP-библиотеку reCAPTCHA . Вам понадобится только один файл оттуда (recaptchalib.php). Остальные файлы представляют собой примеры, файлы readme и юридическую информацию — они не влияют на функциональность.

Быстрый старт

После того как вы подписались на получение ключей API, ниже приведены основные инструкции по установке reCAPTCHA на ваш сайт. Полное справочное руководство по плагину PHP можно найти ниже.

Клиентская часть (Как сделать так, чтобы изображение CAPTCHA отображалось)

Если вы хотите использовать библиотеку PHP для отображения виджета reCAPTCHA, вам необходимо вставить этот фрагмент кода внутри элемента <form>, где будет размещен виджет reCAPTCHA:

  require_once('recaptchalib.php');
  $publickey = "your_public_key"; // you got this from the signup page
  echo recaptcha_get_html($publickey);

С кодом ваша форма может выглядеть примерно так:

  <html>
    <body> <!-- the body tag is required or the CAPTCHA may not show on some browsers -->
      <!-- your HTML content -->

      <form method="post" action="verify.php">
        <?php
          require_once('recaptchalib.php');
          $publickey = "your_public_key"; // you got this from the signup page
          echo recaptcha_get_html($publickey);
        ?>
        <input type="submit" />
      </form>

      <!-- more of your HTML content -->
    </body>
  </html>

Не забудьте установить $publickey, заменив your_public_key открытым ключом API.

Обратите внимание, что значение атрибута «action» — «verify.php». Теперьverify.php — это целевой файл, в который передаются значения этой формы. Поэтому вам понадобится файлverify.phpв том же месте, где находится клиентский html.

Функция require_once в приведенном выше примере ожидает, что recaptchalib.php будет находиться в том же каталоге, что и ваш файл формы. Если он находится в другом каталоге, вы должны связать его соответствующим образом. Например, если ваш recaptchalib.php находится в каталоге с именем «captcha», который находится на том же уровне, что и ваш файл формы, функция будет выглядеть так: require_once('captcha/recaptchalib.php') .

Серверная часть (Как проверить, ввел ли пользователь правильный ответ)

Следующий код должен быть размещен в верхней части файлаverify.php:

  <?php
  require_once('recaptchalib.php');
  $privatekey = "your_private_key";
  $resp = recaptcha_check_answer ($privatekey,
                                $_SERVER["REMOTE_ADDR"],
                                $_POST["recaptcha_challenge_field"],
                                $_POST["recaptcha_response_field"]);

  if (!$resp->is_valid) {
    // What happens when the CAPTCHA was entered incorrectly
    die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
         "(reCAPTCHA said: " . $resp->error . ")");
  } else {
    // Your code here to handle a successful verification
  }
  ?>

В приведенном выше коде:

  • recaptcha_check_answer возвращает объект, который показывает, успешно ли пользователь выполнил задание.
  • Если $resp->is_valid имеет значение true, значит, запрос капчи был выполнен правильно, и вам следует продолжить обработку формы.
  • Если $resp->is_valid имеет значение false, значит, пользователю не удалось предоставить правильный текст капчи, и вам следует повторно отобразить форму, чтобы дать ему еще одну попытку. В этом случае $resp->error будет кодом ошибки, который можно передать в recaptcha_get_html . При передаче кода ошибки элемент управления reCAPTCHA отображает сообщение, объясняющее, что пользователь ввел текст неправильно и должен повторить попытку.
  • Обратите внимание, что этот код запрашивает закрытый ключ, который не следует путать с открытым ключом. Вы получаете это с той же страницы, что и открытый ключ.

    Также убедитесь, что ваша форма настроена на получение переменных формы с использованием $_POST вместо $_REQUEST и что сама форма использует метод POST.

    Вот и все! reCAPTCHA теперь должна работать на вашем сайте.

    Дальнейшее чтение

  • Настройка внешнего вида
  • Советы и рекомендации
  • Поиск неисправностей
  • Справочное руководство по плагинам PHP

    Ниже приведен полный список всех методов PHP-плагина reCAPTCHA.

    Функция recaptcha_get_html

    Функция recaptcha_get_html отображает HTML-код, который представляет пользователю reCAPTCHA.

    recaptcha_get_html
    Параметр
    $pubkey -- строка. необходимый. Ваш открытый ключ reCAPTCHA со страницы регистрации API .
    $ошибка -- строка. необязательно (по умолчанию установлено значение null) Если эта строка установлена, в области reCAPTCHA будет отображаться указанный код ошибки. Этот код ошибки получен из ReCaptchaResponse->$error.
    $use_ssl -- логическое значение. необязательно (по умолчанию установлено значение false) Следует ли использовать API на основе SSL? Если вы отображаете страницу пользователю через SSL, обязательно установите для этого параметра значение true, чтобы в браузере пользователя не появлялось диалоговое окно с ошибкой.
    Возвращаемое значение Строка, содержащая HTML для размещения на веб-странице.

    Функция recaptcha_check_ответ

    После того, как пользователь заполнил HTML-форму, включая ответ на CAPTCHA, мы хотим проверить его ответ при отправке формы с помощью функции recaptcha_check_answer . Ответ пользователя будет в двух полях формы: recaptcha_challenge_field и recaptcha_response_field . Библиотека reCAPTCHA отправит HTTP-запрос серверу reCAPTCHA и проверит ответ пользователя.

    recaptcha_check_ответ
    Параметр
    $privkey -- строка. необходимый. Ваш закрытый ключ reCAPTCHA со страницы регистрации API .
    $remoteip -- строка. необходимый. IP-адрес пользователя в формате 192.168.0.1.
    $вызов -- строка. необходимый.
    Значение поля формы recaptcha_challenge_field
    $ответ -- строка. необходимый Значение поля формы recaptcha_response_field
    Возвращаемое значение Экземпляр класса ReCaptchaResponse.

    РеКапчаОтвет
    Поле
    $is_valid -- логическое значение Считает ли reCAPTCHA ответ действительным?
    $ошибка -- строка Если ответ неверный, в чем проблема? Этот код ошибки можно использовать в recaptcha_get_html.
    Возвращаемое значение HTML-код или необработанный URL-адрес для декодирования адреса электронной почты, в зависимости от того, какую функцию вы вызвали.

    Мейлхайд

    PHP-библиотека reCAPTCHA включает привязки для Mailhide API. Этот API позволяет вам поместить электронное письмо в reCAPTCHA, чтобы его не увидели спамеры: экзамен ... @example.com.

    Для части библиотеки PHP Mailhide требуется модуль PHP mcrypt .

    API Mailhide состоит из двух функций recaptcha_mailhide_html и recaptcha_mailhide_url . Функции имеют одинаковые параметры. Версия _html возвращает HTML, который можно разместить непосредственно на вашей веб-странице. Часть передаваемого электронного письма с именем пользователя усекается и заменяется ссылкой, вызывающей Mailhide. Версия _url дает вам URL-адрес для декодирования электронного письма и оставляет за вами право поместить электронное письмо в HTML.

    recaptcha_mailhide_url / recaptcha_mailhide_html
    Параметр
    $pubkey -- строка Открытый ключ Mailhide со страницы регистрации.
    $privkey -- строка Закрытый ключ Mailhide со страницы регистрации.
    $email -- строка Адрес электронной почты, который вы хотите скрыть.

    В следующем примере показано, как использовать Mailhide:

    <html><body>
    <?
    require_once ("recaptchalib.php");
    // get a key at http://www.google.com/recaptcha/mailhide/apikey
    $mailhide_pubkey = '';
    $mailhide_privkey = '';
    ?>
    The Mailhide encoding of example@example.com is
    <?
    echo recaptcha_mailhide_html ($mailhide_pubkey,
                                  $mailhide_privkey,
                                  "example@example.com");
    ?>.
    <br>
    The url for the email is:
    <?
    echo recaptcha_mailhide_url ($mailhide_pubkey,
                                 $mailhide_privkey,
                                 "example@example.com");
    ?>
    <br>
    </body></html>