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

  1. Первый у нас 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

Your email address will not be published.


*