ePochta

21 августа 2017, 18:14

Компонент реализует API сервиса ePochta в части отправки СМС на номер, а так же представляет функционал валидации номера сотового телефона через ввод кодового слова (притом не обязательно с отправкой на СМС - в плагине можно указывать отправку почты, например)

Настройка компонента

  • ID переадресации - используется при валидации номера по SMS, если не 0 – то после успешного завершения пользователь будет переадресован на ID этой страницы.
  • Длина кода – длина кодового слова в SMS сообщении при валидации
  • Символы SMS кода – JSON массив С указанием требуемых символов, которые могут использоваться в коде.
  • Время жизни СМС-кода - время действия СМС кода, указывает через какой интервал будет сгенерирован новый проверочный код для пользователя.
  • Таймаут отправки СМС – время между двумя возможными отправками SMS.

Основные настройки

В личном кабинете активируем API 3.0. Выбираем требуемый вариант отправки из списка ниже, если выбран с буквенным именем то его нужно указать в настройках компонента.

В настройках компонента:

  • От кого СМС – буквенное имя отправителя. Спецсимволы лучше не использовать.
  • Приватный ключ – копируем из ЛК
  • Публичный ключ – копируем из ЛК
  • Время жизни СМС - лучше оставить по умолчанию
  • Режим тестирования - при тестировании сообщения будут уходить на сервер EPochta и не отправляться клиенту , если выставить НЕТ – то будет боевой режим и СМС будут отсылаться.
  • URL сервиса - лучше оставить по умолчанию.

Принцип работы:

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

$ePochta->sendSMS_now($phone, $message, 0))

где $phone - номер телефона в международном формате, $message - текст сообщения, 0 - отправить немедленно

Отправка СМС:

<?php
$message = 'Тест';
$phone=7922; //номер в международном формате, например 79657008900

$ePochta = $modx->getService('epochta', 'ePochta', $modx->getOption('epochta_core_path', null, $modx->getOption('core_path') . 'components/epochta/') . 'model/epochta/', $scriptProperties);
$ePochta->initialize();
if (!($ePochta instanceof ePochta)) exit('Could not initialize ePochta!');

if (!$ePochta->sendSMS_now($phone, $message, 0)) {
    //вернется false если сообщение не отправилось
    echo "ERROR!";
}

В случае неудачи функция вернет FALSE,а в лог выдастся подробная ошибка с набором данных:

[2014-03-11 22:36:53] (ERROR @ /index.php) [ePochta] Error send sms to [7922], text [Тест] user_id [2]
[2014-03-11 22:36:53] (ERROR @ /index.php) Array
(
[error] => no_good_recipients
[code] => 303
[result] => 464322
)

Сниппет epValidate

Параметры:

  • tplCheck - чанк с формой для валидации номера телефона.
  • tplExists - чанк для вывода формы, когда у пользователя уже есть привязанный номер телефона (Mobile Phone).

Принцип работы:

Все упирается в авторизированного пользователя.Если он авторизирован – делается проверка на наличие mobilephone в его профиле.Если такое поле пустое – то тогда будет выведена форма с подтверждением сотового телефона, если нет – то будет выведен чанк tplExists.

Если номера нет, то может выдастся как первая часть формы (с вводом номера) так и вторая – с полем для ввода кода. Все зависит от параметра таймаута отправки SMS сообщений. Именно исходя из этого параметра и рассчитывается таймер обратного отсчета для повторной отправки кода или смены номера.

Сниппет использует процессоры, а процессор в ходе своей работы вызывает 4 разных событий:

  • OnBeforeCodeValidate - событие до валидации кода
  • OnAfterCodeValidate - событие после успешной валидации кода
  • OnBeforePhoneCheck - соответственно событие до валидации номера
  • OnAfterPhoneCheck - событие после успешного ввода номера

В стандартной поставке идёт плагин, который проверяет уникальность номера телефона, а так же отправляет смс и, в случае успешного подтверждения, меняет номер в профиле.