Установка Google reCAPTCHA в форму
В этой статье мы рассмотрим, как интегрировать Google reCAPTCHA (v2) в HTML-форму обратной связи с клиентской валидацией без использования библиотек jQuery.
Также покажем, как проверить результат на сервере с помощью PHP и curl. Отправка формы будет осуществляться на 1C-Bitrix, однако данный подход можно легко адаптировать и для других систем.
Это позволит эффективно защитить вашу форму от спама и автоматических отправок.
Шаг 1. Регистрация и получение ключей reCAPTCHA
- Перейдите на Google reCAPTCHA Admin Console.
- Зарегистрируйте новый сайт, выбрав тип reCAPTCHA v2 — «Я не робот» (Checkbox).
- Введите домен вашего сайта.
- Получите два ключа:
- Site key — для вставки в HTML.
- Secret key — для проверки на сервере.
Шаг 2. Пример HTML-формы с reCAPTCHA
1 | |
1 | |
Шаг 3. Реализуем валидацию и маску для поля телефона с помощью чистого JavaScript (без jQuery и сторонних библиотек).
Это позволяет ускорить загрузку формы, избежать лишних зависимостей и снизить вес подключаемого кода.
1 | |
В данном коде реализован модуль formValidationModule, который отвечает за:
- Маска поля телефона
- При вводе в поле телефона автоматически форматируется номер в российский формат:
- Удаляются все символы, кроме цифр.
- Если номер начинается с
8, он преобразуется в7. - Всегда добавляется префикс
+7. - Номер форматируется по шаблону:
+7 (999) 999 99-99.
- Обработчики событий:
input— форматирует номер в процессе ввода.focus— при фокусе, если поле пустое, вставляет+7.blur— если поле пустое или введён неполный номер, очищает поле.keydown— разрешает ввод только цифр, клавиш удаления и навигации.
- Валидация формы на клиенте
- Метод
checkValid(form)проверяет валидность всех полей формы с помощью встроенного HTML API (checkValidity()). - Если есть ошибки, вызывает метод
addErrorMessages(invalidFields), который отображает сообщения об ошибках рядом с каждым невалидным полем:- Обязательное поле (
valueMissing) — сообщение “поле обязательно”. - Неверный формат (
typeMismatch) — сообщение “неверный формат”. - Слишком короткое значение (
tooShort) — сообщение “слишком короткое значение”.
- Обязательное поле (
- Если форма валидна, возвращает объект
FormDataс данными формы.
- Отправка формы
- Метод
submitHandler(formId, url)добавляет обработчик событияsubmitна форму с указаннымid. - При отправке:
- Отменяет стандартное поведение браузера.
- Проверяет форму через
checkValid. - Если данные валидны, отправляет их на сервер с помощью метода
fetch(formId, url, formData).
- Метод
fetchиспользуетfetch APIдля POST-запроса к серверу:- Отправляет данные формы.
- Обрабатывает ответ в формате JSON.
- При успешном ответе (код 200) сбрасывает форму.
- Выводит сообщение из ответа в консоль и через
alert.
- Очистка сообщений об ошибках
- Метод
cleanErrorMessages(formId)добавляет обработчик событияinputна форму. - При изменении любого поля очищает соответствующее сообщение об ошибке.
- Инициализация модуля
- Метод
init(formId, phoneInputId, url)запускает:- Обработчик отправки формы.
- Очистку ошибок при вводе.
- Маску для телефона (если передан
phoneInputId).
- Интеграция с Google reCAPTCHA
- Функция
onRecaptchaLoadCallback()вызывается после загрузки API reCAPTCHA. - Если на странице есть элемент с id
myform-g-recaptcha, инициализируется виджет reCAPTCHA с указаннымsitekey. - После этого вызывается инициализация модуля валидации с параметрами:
myform— id формы.phone— id поля телефона для маски (если маска не нужна — передатьfalse)./ajax/form.php— адрес обработчика на сервере.
Замените
ВАШ_SITE_KEYна ваш реальный site key из Google.
Шаг 4. Обработка формы на PHP с проверкой полей и reCAPTCHA
Создайте файл по пути /ajax/form.php с примером кода:
1 | |
Не забудьте заменить
ВАШ_SECRET_KEYна ваш секретный ключ.
Краткое пояснение к коду
HTML: подключаем скрипт reCAPTCHA, добавляем виджет с вашим sitekey.
PHP:
- Получаем данные из
$_POST. - Получаем ответ в JSON и проверяем поле
success. - Если проверка не пройдена — выводим ошибку.
- Если всё хорошо — обрабатываем форму (например, отправляем письмо).
Итог
- reCAPTCHA помогает защитить формы от спама.
- Интеграция простая: добавляем виджет в HTML и проверяем ответ на сервере.
- Для проверки используем
curlи API Google. - Обязательно валидируем данные формы и результат reCAPTCHA.