СМС-валидация AjaxForm по номеру телефона

Поступила заявка на реализацию функционала проверки номера телефона через СМС при отправке формы на основе AjaxForm+FormIt. Основными требованиями были:

1. Невмешательство в ядро AjaxForm
2. Простота интеграции в действующую форму (в идеале, как говорится, в пару кликов).
3. Интервал между отправкой повторного СМС для предотвращения скликивания баланса.
4. Наличие тестового режима
5. Компонент срабатывает только в случае заполненных обязательных полей формы
6. Возможность добавления новых классов СМС-провайдера

Был написан и собран в пакет простенький компонент, реализующий СМС-верификацию формы перед ее отправкой.

Компонент работает при наличии установленного AjaxForm, должен быть подключен jquery. Версия php 7+, версия MODX не ниже 2.7 (на тройке не тестировал). В ходе установки добавляется шаблон с примером вызова AjaxForm и чанк с примером разметки формы, подключается отдельный файл с jquery кодом на событие af_complete.

После установки можно сразу протестить работу компонента, прикрепив новый шаблон к какому-либо ресурсу. По умолчанию включен тестовый режим, код для СМС выводится на экран и в лог админки.

В качестве смс-провайдеров добавлены два класса:
1. smsRu, файл smsru.class.php (сервис sms.ru)
2. intisteleSms, файл intistelesms.class.php (сервис intistele.com)

Но легко можно добавить свой собственный класс, описание настроек тут — github.com/alexxx-ivanow/smsValidate

Быстрый старт

1. Установить компонент из транспортного пакета.
2. В коде вызова сниппета AjaxForm добавить параметры:

'renderHooks' => 'smsValidateInit',
'customValidators' => 'smsValidate',
в параметр 'validate' добавить обращение к СМС-валидатору
'sms_code:smsValidate=^phone^'
(где 'phone — имя поля для ввода телефона)

3. В коде чанка с формой добавить блок с разметкой поля для валидации по СМС. Пример в чанке 'smsvalidate_form'. Классы разметки с префиксом js служебные, их нельзя удалять или менять, также нельзя удалять инпуты и спан с классом error_sms_code из этого контейнера. Соблюдая эти условия, можно без проблем стилизовать контейнер доп.классами под текущий дизайн сайта.

=============

Как демо-вариант, можно подключить установленный из пакета шаблон на ресурс, по умолчанию включен тестовый режим, когда код для СМС выводится на экран и в лог админки.

скачать пакет
=============
AjaxForm более не поддерживается, появились более современные обертки для FormIt. Перейти на эти обертки, так понимаю, не очень сложно, в основном, это касается js-составляющей. Но есть сайты, владельцы которых по какой-то причине не готовы переписывать код, поэтому компонент может быть кому-то полезен. Да и в принципе обратная связь приветствуется. Плюс это практически 100% защита от спама, хотя, мне кажется, в этом направлении не будет спроса, так как отправка СМС — вещь платная.

P.S. Обращаю внимание, что некоторые странности в логике формирования ответа сервера из класса (к примеру, добавление кнопки повтора в разметку) продиктованы именно условием невмешательства в AjaxForm.

Всем добра!
Alexey
10 ноября 2024, 18:32
modx.pro
1
108
+7

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0