Яндекс SmartCaptcha
Защита форм магазина OpenCart 4 капчей Yandex SmartCaptcha — российской заменой reCAPTCHA — и, вторым компонентом, Google reCAPTCHA v2: регистрация, отзывы, комментарии, возвраты и обратная связь.
Назначение и совместимость
В OpenCart 4.1.0.4 есть только простая капча с картинкой. Расширение добавляет капчу Yandex SmartCaptcha: большинство посетителей проходят проверку без задания, роботы отсеиваются на сервере Яндекса. Расширение работает через штатный механизм капчи OpenCart: страницы с капчей выбираются в настройках магазина.
Проверено на OpenCart 4.1.0.4 и PHP 8.2 со штатной темой (нужно расширение PHP cURL). Другие версии OpenCart 4 и сторонние темы не проверялись: виджет вставляется туда, где шаблон темы выводит {{ captcha }}. Ядро не меняется.
Ключи в Yandex Cloud
- В консоли Yandex Cloud создайте капчу (сервис SmartCaptcha); укажите домен магазина в списке разрешённых сайтов.
- Скопируйте два ключа: клиентский (встраивается в страницы магазина) и серверный (хранится только на сервере и используется для проверки).
Установка и включение
- Расширения → Установщик → «Загрузить», файл
smartcaptcha_oc4.ocmod.zip(имя не менять: OpenCart 4 берёт из него код расширения) → «Установить». В сборке OCM Store этот шаг и следующий уже сделаны. - Расширения → Расширения, тип «Защита от ботов» → «Установить» у «Яндекс SmartCaptcha», затем «Редактировать».
- Вставьте клиентский и серверный ключи, включите «Статус», сохраните. Без ключей включить нельзя: включённая капча без ключей заблокировала бы отправку форм.
- Система → Настройки → Опции → Капча: выберите «Яндекс SmartCaptcha», отметьте страницы (регистрация, отзывы, комментарии, возвраты, обратная связь), сохраните.
- Откройте на витрине форму регистрации или обратной связи: вместо картинки появился виджет.
Права получает группа пользователя, который нажал «Установить». Другим группам — Система → Пользователи → Группы пользователей, маршрут extension/smartcaptcha_oc4/captcha/smartcaptcha.
Настройки
Расширения → Расширения → Защита от ботов → Яндекс SmartCaptcha → Редактировать. Вверху показано, выбрана ли капча в настройках магазина и на каких страницах.
| Настройка | По умолчанию | Смысл |
|---|---|---|
| Статус | выключено | Включается только с заполненными ключами |
| Клиентский ключ | пусто | Ключ виджета из консоли Yandex Cloud |
| Серверный ключ | пусто | Ключ проверки; в форме скрыт |
| Язык виджета | по языку магазина | Русский, английский, белорусский, казахский, татарский, украинский, узбекский, турецкий; «по языку магазина» — по коду текущего языка витрины (неизвестный код — английский) |
| Тестовый режим | выключено | Виджет всегда показывает задание — удобно проверять на стенде; в рабочем магазине выключите |
| Если сервис проверки недоступен | пропускать форму | Сервер SmartCaptcha не ответил или не принял ключ: «Пропускать форму» — покупатель не блокируется, факт пишется в журнал ошибок; «Не отправлять форму» — покупатель видит «Сервис проверки недоступен» |
Как работает проверка
- На страницах из списка «Страница с капчей» ядро вставляет в форму виджет расширения; скрипт SmartCaptcha загружается с
smartcaptcha.yandexcloud.net. - Пройденная проверка кладёт в форму скрытое поле
smart-token. При отправке формы магазин отправляет токен и адрес посетителя на сервер SmartCaptcha с серверным ключом; ответ «ok» пропускает форму, иначе под виджетом появляется ошибка «Подтвердите, что вы не робот!». - Токен одноразовый: после каждого ответа магазина виджет сбрасывается, и для новой попытки нужно пройти проверку снова.
- Если сервер проверки недоступен или ключ не принят, поведение задаёт настройка «Если сервис проверки недоступен»: по умолчанию форма пропускается, а в журнал ошибок магазина (Система → Обслуживание → Журнал ошибок) пишется строка
SmartCaptcha: …; в строгом режиме форма не отправляется с сообщением «Сервис проверки недоступен».
Google reCAPTCHA
Второй компонент пакета — Google reCAPTCHA v2 («Я не робот», флажок). Он появляется в том же списке Расширения → Расширения → Защита от ботов и в разделе Безопасность → Google reCAPTCHA; одновременно в магазине работает одна капча — та, что выбрана в настройках магазина.
- Зарегистрируйте сайт в консоли Google reCAPTCHA, тип «reCAPTCHA v2 → флажок „Я не робот“»; скопируйте ключ сайта и секретный ключ.
- Безопасность → Google reCAPTCHA: вставьте ключи, при необходимости выберите домен скриптов и тему виджета, включите «Статус», сохраните.
- Система → Настройки → Опции → Капча: выберите «Google reCAPTCHA», отметьте страницы, сохраните.
| Настройка | По умолчанию | Смысл |
|---|---|---|
| Статус | выключено | Включается только с заполненными ключами |
| Ключ сайта, Секретный ключ | пусто | Ключи из консоли Google reCAPTCHA |
| Домен скриптов | recaptcha.net | Откуда загружать виджет и куда отправлять проверку: recaptcha.net работает там, где google.com недоступен (обычный случай для магазинов в России); google.com — если ограничений нет |
| Тема виджета | светлая | Светлая или тёмная |
| Если сервис проверки недоступен | пропускать форму | Как у SmartCaptcha: пропускать с записью в журнал или не отправлять форму |
Проверка проходит так же: виджет кладёт в форму поле g-recaptcha-response, магазин проверяет его запросом к Google с секретным ключом; после ответа магазина виджет сбрасывается. Записи в журнале начинаются с reCAPTCHA: ….
Раздел «Безопасность»
Пакет добавляет в левое меню панели раздел «Безопасность» с пунктами «Яндекс SmartCaptcha» и «Google reCAPTCHA» — те же страницы настроек, что открываются из списка «Защита от ботов». Пункты видят пользователи, у которых есть права на эти страницы. Другие модули защиты магазина могут добавлять в этот раздел свои пункты.
Отключение и удаление
Чтобы временно отключить капчу, выберите в настройках магазина другую капчу или пустое значение — либо выключите «Статус» расширения (ядро пропускает выключенную капчу). Удаление: Расширения → Расширения → Защита от ботов → «Удалить» у каждой из двух капч, затем Расширения → Установщик → удалить пакет. Ключи удаляются вместе с настройками; раздел меню исчезает, когда удалены обе капчи.
Типовые вопросы
- Виджет не появляется. Проверьте, что капча включена, выбрана в настройках магазина и страница отмечена в списке; в теме форма должна выводить
{{ captcha }}. - Всегда ошибка «не робот». Домен магазина не добавлен к капче в консоли Yandex Cloud или перепутаны ключи (клиентский на месте серверного).
- «Сервис проверки недоступен». Сервер магазина не может обратиться к
smartcaptcha.yandexcloud.net(закрыт исходящий доступ) или серверный ключ неверен — подробности в журнале ошибок. Сообщение показывается только в режиме «Не отправлять форму»; по умолчанию форма пропускается. - Какую капчу выбрать. Для магазинов в России — SmartCaptcha (сервис в России, без ограничений доступа); reCAPTCHA — если аудитория за рубежом или ключи Яндекса получить нельзя; при выборе reCAPTCHA оставьте домен
recaptcha.net. - Капча на оформлении заказа. Значение «Гость» в списке страниц ядро 4.1.0.4 не проверяет; регистрация при оформлении заказа защищается значением «Регистрация».