Bitrix google recaptcha для компонентов
Добавим рекапчу от гугл в компоненты
1. blog.post.comment // комментарии в блоге
2. forum.topic.reviews // комментарии к статическим страницам
3. iblock.element.add.form // форма
Как подключать рекапчу писал в статье http://phpjs.ru/2017/07/18/google-captcha-v2/. А также, если не умеете работать с классами и композер, можно проверить капчу 3 строчками кода (см. в конце статьи).
Но это не есть красиво) Вынесем верификацию в ReCaptcha.php
public function verifyCaptcha()
{
if ($_POST["g-recaptcha-response"]) {
$resp = $rec->verify(
$_POST["g-recaptcha-response"],
$_SERVER["REMOTE_ADDR"]
);
return $resp->isSuccess();
}
}
Вынесем наконец апи рекптчи в отд. файл и подключим автолоадом. Как использовать композер автолоад писал в статье http://phpjs.ru/2017/06/15/composer-autoload/
Я перенес в test2/src/ReCaptcha.php . Как видите, для автолоада файл с классом должен именоваться по названию класса.
В composer.json добавляем наш класс
"autoload": {
"psr-4": {
"" : "test2/src/"
}
}
Не забываем сгенерировать новый класс в автолоаде
composer dump-autoload
// или
php composer.phar dump-autoload
Подключаем наш автолоадер в init.php
require_once $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';
Вот и все, вызывать можем в нужном файле так
use ReCaptcha\ReCaptcha;
$reCaptcha = new ReCaptcha($secret);
// и наш новый метод
var_dump($reCaptcha->verifyCaptcha());
Итак, подключим все это в компонентах. Не забывайте кастомизировать их! Проще всего это делается вынесением всей папки компонента в local/components/any_namespace/my_comp
- Первый у нас blog.post.comment .
Как добавить тег в шаблоне комопнента показывать не буду — это просто и искать не надо. js библиотеку рекаптчи можно добавить в любом месте шаблона. Покажу серверную часть.
В начале делаем импорт псевдонима с помощью use
use ReCaptcha\ReCaptcha;
В component.php находим строчки где идет добавление полей. Это тут
if($_POST["act"] != "edit")
{
$reCaptcha = new ReCaptcha($secret);
if ($arResult["use_captcha"])
{
if(!$reCaptcha->verifyCaptcha()) $strErrorMessage .= GetMessage("B_B_PC_CAPTCHA_ERROR")."
";
}
2. forum.topic.reviews
В action.php происходит проверка полей.
Прямо в самом начале файла, после импорта и создания экземпляра добавляем сообщение об ошибке
if(!$reCaptcha->verifyCaptcha()) {
$arError[] = array(
"code" => "invalid captcha",
"title" => GetMessage("F_GOOGLE_CAPTCHA"));
}
3. iblock.element.add.form
Где-нибудь после проверки полей // check required properties добавим
if(!$reCaptcha->verifyCaptcha()) {
$arResult["ERRORS"][] = 'Вы не прошли проверку подверждения личности';
}
быстрая проверка recaptcha
$recaptcha_secret = '6Leao28UAAAfgfgfMR-6OKq9HBRgfsdkyIBdfXnFA7';
$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$recaptcha_secret."&response=".$_POST['g-recaptcha-response']);
$result = json_decode($response, true);
Leave a comment