SMS

Отправка обычных SMS сообщений или с кодами подтверждений
Автор дополнения
crow
Пакетов
7
Закачек
51
Обычно отвечает в течение 4 часов
Автор дополнения
Пакетов
7
Закачек
51
Обычно отвечает в течение 4 часов
Версия 1.2.2-pl
Дата выпуска 19.04.2018
Загрузки 18
Просмотры 1 753
Внимание, этот компонент требует версию PHP 5.6 или выше! Если ваш сайт использует PHP ниже требуемого, установка этого дополнения может его сломать.
Внимание, этот компонент требует версию MODX не ниже 2.5 !
Полностью автономный компонент для отправки смс сообщений. Использовать его можно абсолютно везде в PHP коде (хуки, плагины, сниппеты, классы, свои компоненты).

В компоненте присутствуют: системные настройки, права доступа (устанавливаются в шаблон политики доступа с ID 1, с префиксом “sms_”) и стандартный чанк для отправки смс с кодом подтверждения.

Возможности:
  • отправка смс через разные сервисы (в коробке предоставляется 2 сервиса на выбор: smsc.ru или turbosms.ua)
  • генерировать и обрабатывать коды подтверждения (в настройках можно настроить вид генерируемого кода)
  • блокировка реальной отправки сообщений
  • логирование всех отправляемых SMS
  • детальный просмотр отправленных SMS
  • возможность разделять все отправляемые коды на категории, таким образом пользователю на 1 и тот же телефон можно отправить одновременно 2 и более кодов подтверждений для разных разделов сайта и оба кода не будут пересекаться и мешать друг другу
  • может быть использован для системы защиты (с кодом по смс) закрытых файлов, страниц, видео и т.д.

Для интеграции из коробки, для начала необходимо вызвать в шаблоне сниппет для подключения js и css файлов
[[!smsLoad]]
В данном сниппете есть параметр «js» для подключения кастомного js файла, пример
[[!smsLoad?&js=`/assets/js/sms.js`]]
Потом необходимо разместить чанк «sms_form» со стандартной формой
[[$sms_form]]

Серверная интеграция:
Присутствуют события плагинов:
  • SMSBeforeCodeSend — перед отправкой кода
  • SMSAfterCodeSend — после отправки кода
  • SMSBeforeCodeCheck — перед проверкой кода
  • SMSAfterCodeCheck — после проверки кода
  • SMSCodeActivate — после активации кода
Пример кода плагина для всех событий (не распространяется на отправку обычных смс):
<?php
switch($modx->event->name){
    case "SMSBeforeCodeSend":
        $val = &$modx->event->returnedValues;
        // $val['response']['message'] = 'Отправка кода заблокирована в плагине';
        // $modx->log(1,'Перед отправкой кода');
        // $modx->log(1,'tpl - '.print_r($tpl,1));
        // $modx->log(1,'code - '.print_r($code,1));
        // $modx->log(1,'phone - '.print_r($phone,1));
        // $modx->log(1,'mode - '.print_r($mode,1));
        // $modx->log(1,'values - '.print_r($values,1));
        break;
    case "SMSAfterCodeSend":
        $val = &$modx->event->returnedValues;
        // if($response['success']){
        //     $val['response']['message'] = 'Текст из плагина об отправке сообщения (успех)';
        // }else{
        //     $val['response']['message'] = 'Текст из плагина об отправке сообщения (ошибка)';
        // }
        // $modx->log(1,'После отправки кода');
        // $modx->log(1,'data - '.print_r($data,1));
        // $modx->log(1,'code - '.print_r($code,1));
        // $modx->log(1,'phone - '.print_r($phone,1));
        // $modx->log(1,'mode - '.print_r($mode,1));
        // $modx->log(1,'values - '.print_r($values,1));
        break;
    case "SMSBeforeCodeCheck":
        $val = &$modx->event->returnedValues;
        // $val['response']['message'] = 'Проверка кода заблокирована в плагине';
        // $modx->log(1,'Перед проверкой кода');
        // $modx->log(1,'codeObj - '.print_r($codeObj->toArray(),1));
        // $modx->log(1,'code - '.print_r($code,1));
        // $modx->log(1,'phone - '.print_r($phone,1));
        // $modx->log(1,'mode - '.print_r($mode,1));
        // $modx->log(1,'values - '.print_r($values,1));
        break;
    case "SMSAfterCodeCheck":
        $val = &$modx->event->returnedValues;
        // if($response['success']){
        //     $val['response']['message'] = 'Текст из плагина о проверке сообщения (успех)';
        // }else{
        //     $val['response']['message'] = 'Текст из плагина о проверке сообщения (ошибка)';
        // }
        // $modx->log(1,'После проверки кода');
        // $modx->log(1,'response - '.print_r($response,1));
        // $modx->log(1,'codeObj - '.print_r($codeObj->toArray(),1));
        // $modx->log(1,'code - '.print_r($code,1));
        // $modx->log(1,'phone - '.print_r($phone,1));
        // $modx->log(1,'mode - '.print_r($mode,1));
        // $modx->log(1,'values - '.print_r($values,1));
        break;
    case "SMSCodeActivate":
        // $modx->log(1,'После активации кода');
        // $modx->log(1,'codeObj - '.print_r($codeObj->toArray(),1));
        // $modx->log(1,'code - '.print_r($code,1));
        // $modx->log(1,'phone - '.print_r($phone,1));
        // $modx->log(1,'mode - '.print_r($mode,1));
        // $modx->log(1,'values - '.print_r($values,1));
        break;
}
В событиях «SMSBeforeCodeSend» и «SMSBeforeCodeCheck» устанавливая массив значений в "$values['response']" (это должен быть обязательно массив), компонент будет останавливаться на данном шаге и не пускать к следующему.
В событиях «SMSAfterCodeSend» и «SMSAfterCodeCheck» в массиве "$values['response']" находится ответ отправляемый на клиентскую часть сайта, его можно менять на свое усмотрение.
В событии «SMSBeforeCodeSend» предусмотрена возможность подмены чанка сообщения при установке значения в массив "$values['tpl']".

В примере плагина показаны все доступные PHP переменные:
  • $values — значения пришедшие из формы
  • $tpl — текущий чанк для отправки кода
  • $code — код который отправляется или вводится пользователем (зависит от события)
  • $phone — телефон пользователя
  • $mode — категория смс сообщения
  • $codeObj — XPDO обьект кода из базы данных
  • $data — не форматированные данные ответа для вывода на клиент
  • $response — данные ответа для вывода на клиент

Клиентская интеграция:
При подключении встроенного JS файла, доступны два события на клиенте, которые можно перехватить своим JS кодом:
$(document).on('smsCodeSend', function (event, data) { // при отправке смс
    //console.log('code send');
    //console.log(data);
});
$(document).on('smsCodeCheck', function (event, data) { // при проверке кода
    //console.log('code check');
    //console.log(data);
});
в «response» присутствуют следующие данные:
  • response.form — обьект формы
  • response.response — серверный ответ
  • response.values — данные собранные из формы

Ручная отправка сообщений с помощью API компонента, для использования в своих хуках, плагинах, сниппетах и компонентах: (более детальная документация находится во внутренней документации компонента)
$modx->getService('sms', 'sms', MODX_CORE_PATH . 'components/sms/model/sms/'); // загрузка компонента
$modx->sms->initialize(); // инициализация сервиса для отправки смс
$response = $modx->sms->sendSms($text, $phones); // отправка обычного сообщения
  • $text — текст смс (string) (обязательно)
  • $phones — номер телефона или если сервис позволяет, то несколько телефонов (через запятую) на которые необходимо отправить данное смс (string) (обязательно)

Внимание! В данный момент нет инструкций по добавлению своих сервисов смс, но возможно будет в будущем.
Компонент не обязывает Вас использовать функционал связи клиент-сервер из коробки, данная связь сделана как пример и для более быстрой интеграции самого компонента.


1.2.2-pl (19.04.2018)

  • добавлено взаимодействие клиент-сервер для отправки и обработки кода подтверждения
  • добавлены события плагина и js callback

1.2.1-pl (28.03.2018)

  • обновлена лицензия

Последние обсуждения в сообществе MODX.pro