Как добавить гугл-капчу (reCaptcha) в форму?


  1. Добавить сайт в личном кабинете ReCaptcha https://www.google.com/recaptcha/admin#list;
  2. Получаете 2 ключа(публичный и приватный);
  3. Скачиваете библиотеку ReCaptcha https://github.com/google/recaptcha;
  4. Подключаете скаченную библиотеку на ваш сайт. Для этого берете только файлы из директории /src/, файл autoload.php и директорию ReCaptcha и копируете их в /bitrix/php_interface/include/ (при отсутствии include, создаете её);
  5. В init.php (находится в /bitrix/php_interface/init.php) подключаете  ReCaptcha, добавляя 

    init.php может отсутствовать. Тогда создайте пустой файл с названием init.php на пк и загрузите его. 
    Не рекомендуется создавать его как страницу. Тогда битрикс запишет в него стандартную разметку и сайт перестанет открываться. 
  6. В шаблоне сайта подключаете скрипт
    ;
  7. В шаблоне компонента формы(template.php1) добавляете (Как найти component.php и template.php?)
    ;
  8. В компоненте формы(component.php1) добавляете проверку (Как найти component.php и template.php?

    1В шагах 7 и 8 файлы component.php и  template.php - это файлы нужного вам компонента, куда хотите внедрить капчу. 
    Например /bitrix/components/simai/feedback.all.string/component.php  и  /bitrix/components/simai/feedback.all.string/templates/.default/template.php
 
В некоторых компонентах стандартная капча может быть вшита в код и не иметь возможности отключения через настройки. В таком случае необходимо убрать в коде(в шаблоне и компоненте) капчу битрикс и добавить на проверку в компоненте капчу от гугл. 

Например:

Шаблон  /bitrix/components/simai/sf.feedback.appeal/templates/.default/ template.php 

Там убрать примерно такой блок:

Компонент: /bitrix/components/simai/sf.feedback.appeal/component.php  

Там убрать примерно такой блок:

 



При возникновении конфликта с автопроверкой соглашения на обработку данных, нужно добавить этот js код на страницу (возможно понадбится изменить id "form-proverka" на свой):

$("#form-proverka").submit(function(event) {
         if (!grecaptcha.getResponse()) {
                console.log('captcha not yet completed.');
                event.preventDefault(); //prevent form submit
                grecaptcha.execute();
            } else {
                console.log('form really submitted.');
            }
    });