YaSmartCaptcha - защитите ваши формы от спама умной капчей от Яндекс
Привет!
Представляю вам небольшой пакет, который упростит интеграцию Яндекс SmartCaptcha на ваш сайт.
Это дополнение позволит использовать SmartCaptcha от Яндекс на вашем сайте на MODX в формах, созданных с использованием сниппета FormIt (ну а также других компонентах, являющимися надстройкой над FormIt, такими как AjaxForm, SendIt).
Перед началом работы ознакомьтесь с инструкцией и зарегистрируйтесь в сервисе: cloud.yandex.ru/ru/docs/smartcaptcha/quickstart
Для работы с капчей вам будет необходимо создать платежный аккаунт, для чего потребуется ввести данные банковской карты или зарегистрировать его на организацию.
После прохождения регистрации создайте свою первую капчу и вы получите 2 ключа (клиентский и серверный). У Яндекса хорошая и понятная документация, проблем быть не должно.
Это бесплатно?
На момент публикации (январь 2024) Яндекс дает 250000 бесплатных проверок на спам в месяц, больше уже за деньги.
Перейдите в системные настройки, выберите пространство yasmartcaptcha, и пропишите ключи:
Вообще принцип работы такой же, как в Google Recaptcha v2, если вы пользовались им ранее, то трудностей быть не должно.
Шаг 1. В том месте, где вам нужно добавить капчу, добавьте некешированный вызов сниппета:
Данный сниппет подключит на страницу (перед закрывающимся body) скрипт
и добавит html блок с капчей.
У сниппета единственный параметр tpl, имеющий значение по умолчанию tpl.YaSmartCaptcha.
Шаг 2. Добавьте хук YaSmartCaptcha к FormIt, например:
Если проверка не будет пройдена, то хук установит сразу 2 одинаковые ошибки с ключами smart-token и yasmartcaptcha.
Можете использовать любой ключ для показа ошибки, они равнозначны, просто первая соответствует названию hidden поля, создаваемого SmartCaptcha, а вторая названию компонента.
Ссылка на github:
https://github.com/createit-ru/YaSmartCaptcha
Скачать пакет:
https://modstore.pro/packages/utilities/yasmartcaptcha
Также ссылка на транспортный пакет есть на github в разделе Releases (правда не гарантирую, что раздел Releases не забуду обновлять).
Компонент бесплатный, но если вам понравился и пригодился — можно поблагодарить финансово по ссылке:

Ваши благодарности ускорят внедрение новых функций, увеличат мою мотивацию, заставят внимательнее прислушиваться к пожеланиям!
Представляю вам небольшой пакет, который упростит интеграцию Яндекс SmartCaptcha на ваш сайт.
Это дополнение позволит использовать SmartCaptcha от Яндекс на вашем сайте на MODX в формах, созданных с использованием сниппета FormIt (ну а также других компонентах, являющимися надстройкой над FormIt, такими как AjaxForm, SendIt).
Регистрация в Yandex Cloud
Перед началом работы ознакомьтесь с инструкцией и зарегистрируйтесь в сервисе: cloud.yandex.ru/ru/docs/smartcaptcha/quickstart
Для работы с капчей вам будет необходимо создать платежный аккаунт, для чего потребуется ввести данные банковской карты или зарегистрировать его на организацию.
После прохождения регистрации создайте свою первую капчу и вы получите 2 ключа (клиентский и серверный). У Яндекса хорошая и понятная документация, проблем быть не должно.
Это бесплатно?
На момент публикации (январь 2024) Яндекс дает 250000 бесплатных проверок на спам в месяц, больше уже за деньги.
Настройка компонента
Перейдите в системные настройки, выберите пространство yasmartcaptcha, и пропишите ключи:
- yasmartcaptcha_client_key — Клиентский ключ
- yasmartcaptcha_server_key — Серверный ключ
Добавление капчи в форму
Вообще принцип работы такой же, как в Google Recaptcha v2, если вы пользовались им ранее, то трудностей быть не должно.
Шаг 1. В том месте, где вам нужно добавить капчу, добавьте некешированный вызов сниппета:
[[!YaSmartCaptcha]]Данный сниппет подключит на страницу (перед закрывающимся body) скрипт
https://smartcaptcha.yandexcloud.net/captcha.jsи добавит html блок с капчей.
У сниппета единственный параметр tpl, имеющий значение по умолчанию tpl.YaSmartCaptcha.
Шаг 2. Добавьте хук YaSmartCaptcha к FormIt, например:
[[!FormIt?
&hooks=`YaSmartCaptcha,email`
..
]]Если проверка не будет пройдена, то хук установит сразу 2 одинаковые ошибки с ключами smart-token и yasmartcaptcha.
Можете использовать любой ключ для показа ошибки, они равнозначны, просто первая соответствует названию hidden поля, создаваемого SmartCaptcha, а вторая названию компонента.
Ссылки
Ссылка на github:
https://github.com/createit-ru/YaSmartCaptcha
Скачать пакет:
https://modstore.pro/packages/utilities/yasmartcaptcha
Также ссылка на транспортный пакет есть на github в разделе Releases (правда не гарантирую, что раздел Releases не забуду обновлять).
В заключение
Компонент бесплатный, но если вам понравился и пригодился — можно поблагодарить финансово по ссылке:

Ваши благодарности ускорят внедрение новых функций, увеличат мою мотивацию, заставят внимательнее прислушиваться к пожеланиям!
Комментарии: 37
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Я только для formit писал. И исправили верно сниппет.
Если я доберусь до github и будет свободное время — нужно сделать обновление)
Может PR сделаете, чтобы не забыл? Или issue)
titanremont.ru/pages-2024
Здесь отображается капча в форме на странице, а в модалке из шапки капчи нет. Но в коде видно, что блоку «smart-captcha» присвоен стиль «height:0». Если я отключаю стиль или своим css его перебиваю, то капча уже отображается и работает.
С чем может быть такое поведение связано?
Нормально работает, эти стили не перебивались.
Еще обнаружил странный баг в модальном окне на fancybox. Если стоит такой стиль на внешнем контейнере .modal {width: 100%;}, то бегунок капчи двигается но проверка не происходит и он снова сбрасывается в начало. Заменил параметр на «width: auto;» и все заработало.
Я же правильно понимаю, что название сниппета нужно добавлять в preHooks? Больше ведь ничего не надо делать? (ну кроме вызова сниппет в html-форме)
500 ошибка — надо смотреть логи сервера…
Fatal error: Uncaught Error: Object of class FormIt could not be converted to string in /core/components/yasmartcaptcha/model/yasmartcaptcha.class.php:60 Stack trace: #0
Подскажите в чем может быть проблема. Причем не важно пройдена капча или нет.
github.com/createit-ru/YaSmartCaptcha/blob/1.0.1-pl/core/components/yasmartcaptcha/model/yasmartcaptcha.class.php#L60
В этом файле ни слова про FormIt нету
Установил, настроил, капча выводится, но если не чекнуть её и отправить форму получаю ошибку: Журнал ошибок ModX пуст.
Modx 3.1.2-pl, YaSmartCaptcha 1.0.2-pl, Formit 5.1.1-pl.
В логе сервера такая ошибка:
Подскажите, пожалуйста, может я что-то не так настроил?
Попробуйте… я просто убрал код, вызывающий ошибку, но к сожалению самому проверить сейчас негде.
Еще раз в этом случае — сниппет Login не работает с pdoTools и Fenom синтаксисом.
На странице в модальных окнах есть 5 форм.
В каждой форме вставлен [[!YaSmartCaptcha]] в нужное место.
Из-за этого он 5 раз закачивает два файла:
* smartcaptcha.cloud.yandex.ru/slider.xxxxxxxxxx.js
* smartcaptcha.cloud.yandex.ru/captchapgrd
Из-за этого размер страницы сильно раздувается.
Как можно решить проблему дублирования?
Странная ситуация, на тестовом домене/сайте в Менеджере пакетов есть YaSmartCaptcha, а на основном домене/сайте нет в списке доступных пакетов. Почему такое может быть?
Уже проверил и пофиксил, плюс скачал пакет с GitHub дополнительно
Кто-то одаренный на основном домене переключил версию PHP с 8.2 на 7.1, со всеми прелестями 500 ошибок )))