Авторизация по номеру телефона

Настройка смс сервисов

В модуле есть возможность подтверждения номера телефона 3-мя способами:

  • код в смс
  • звонок роботу
  • звонок от робота

Звонок роботу - это вараинт подтверждения номера, когда пользвоатель получает номер телефона на экране и звонит на него. Робот сбрасывает вызов и фиксирует входящий звонок. Далее происходит проверка, если номер указанный пользователем и полученный роботом совпадают, значит номер телефона подтвержден.

Звонок от робота - это вариант, когда робот звонит на указанный пользователем номер телефона. Пользователь может как ответить на него так и отклонить. После этого пользователя вводит последние несколько цифр входящего нмоера телефона в соответсвующее поле. Если введенные цифры совпадают с теми что были получены от сервиса, то номер телефона подтвержден.

Добавление сервиса

В модуле есть несколько встроенных сервисов, из которых можно выбрать подходящий и добавить

  • sms.ru - смс код, звонок от бота, звонок боту
  • smsc.ru - смс-код, звонок от бота, звонок боту
  • new-tel.ru - звонок от бота

Для этого идем на страницу Рабочий стол / BXmaker / Авторизация по номеру телефона / Сервисы и добавляем первый сервис

2020-12-03_15-14.png

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

2020-12-03_15-16.png

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

Порядок отпрвки смс кодов, звонков

Если происходит попытка отправить временный код в смс

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

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

Если проиходит запрос номера телефона для звонка роботу или запрос звонка от робота, то происходит поиск активного настроенного сервиса с включенным соответствующим типом подтверждения. Если такой сервис для текущего сайта не найден, вернется ошибка.

Использования модуля СМС Оповещения

Если вы хотите использвоать для отправки смс кодов, один из представленых серсиов для смс в модуле СМС Оповещения, вам необходимо (чтобы небыло дубликатов смс)

  • в модуле авторизации отключить активные сервисы с типом подтверждения смс код,
  • либо убрать в активных сервисах модуля авторизации отключить тип подтверждения по смс коду

Далее (предполагаем что модуль смс оповещений уже настроен) необходимо в модуле СМС оповещений проверить наличие и активность шаблоном смс сообщений с кодами типов смс -

  • BXMAKER_AUTHUSERPHONE_SENDCODE - отправка временного кода
  • BXMAKER_AUTHUSERPHONE_USERADD - регистрация пользователя
  • BXMAKER_AUTHUSERPHONE_USERCHANGEPASSWORD - изменение пароля

Рабочий стол / BXmaker / СМС Оповещения / Список шаблонов СМС

Если они активны, они автоматически будут отправляться

2020-12-03_15-50.png

Использование штатного механизма битрикса для отправки смс

Для работы этого механизма у вас должен быть установлен модуль Служба сообщений.

Если она еще не найстроена, то переходим к настройкам модуля и настраиваем, нажмите на нужный смс сервис из списка и настраиваем его. Рабочий стол / Настройки / Настройки продукта / Настройки модулей и выберите в выпадающем списке - Служба сообщений 2020-12-03_16-16.png

Далее необходимо настроить Главный модуль, выбираем его из списка и во вкладке почта и смс выбираем нужный нам сервис и сохраняем.

2020-12-03_16-20.png

Использование других сервисов

Если в списке нет того сервиса который вам нужен, можно написать для него обработчик по подобию из исходников модуля, на примере одного из встроеных сервисов.

Либо если вам достаточно только смс кодов дял подтверждения номера телефона - используйте события модуля авторизации.

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

Ниже приведен пример обработчиков и класса, который вы можете подправить под себя и разместить в файле /bitrix/php_interface/init.php или /local/php_interface/init.php

// регистрируем обработчики событий
AddEventHandler('bxmaker.authuserphone', 'onSendCode', array('CBXmakerTools', 'authUserPhoneonSendCode'));
AddEventHandler('bxmaker.authuserphone', 'onUserChangePassword', array('CBXmakerTools', 'authUserPhoneonUserChangePassword'));
AddEventHandler('bxmaker.authuserphone', 'onUserAdd', array('CBXmakerTools', 'authUserPhoneUserAdde'));


class CBXmakerTools
{

    private static $smsLogin = '**';
    private static $smsPass = '****';
    private static $smsSender = '***';

    /**
    * Отправка временного кода
    * @param $arFields
    */
    public static function authUserPhoneonSendCode($arFields)
    {
          if(self::sendSms($arFields['PHONE'], 'Ваш временный код - ' . $arFields['CODE']))
          {
               return  new \Bitrix\Main\EventResult(
                    \Bitrix\Main\EventResult::SUCCESS,
                     null,
                    'bxmaker.smsnotice'
                );
          }
          else
          {
               return  new \Bitrix\Main\EventResult(
                    \Bitrix\Main\EventResult::ERROR,
                    array(
                        'ERROR' => new \Bitrix\Main\Error('Eroror send sms', 'ERROR_SMS_SEND')
                    ),
                    'bxmaker.smsnotice'
                );
          }

    }

    /* после смены пароля */
    public static function authUserPhoneonUserChangePassword($arFields)
    {
        if(self::sendSms($arFields['PHONE'], 'Ваш новый пароль - ' . $arFields['PASSWORD']))
        {
               return  new \Bitrix\Main\EventResult(
                    \Bitrix\Main\EventResult::SUCCESS,
                     null,
                    'bxmaker.smsnotice'
                );
          }
          else
          {
               return  new \Bitrix\Main\EventResult(
                    \Bitrix\Main\EventResult::ERROR,
                    array(
                        'ERROR' => new \Bitrix\Main\Error('Eroror send sms', 'ERROR_SMS_SEND')
                    ),
                    'bxmaker.smsnotice'
                );
          }
    }

    /* после регистрации */
    public static function authUserPhoneUserAdde($arFields)
    {
        if(self::sendSms($arFields['PHONE'], 'Вы успешно зарегистрированы на сайте, используйте для входа логин - ' . $arFields['PHONE'] . ' и пароль - ' . $arFields['PASSWORD']))
        {
               return  new \Bitrix\Main\EventResult(
                    \Bitrix\Main\EventResult::SUCCESS,
                     null,
                    'bxmaker.smsnotice'
                );
          }
          else
          {
               return  new \Bitrix\Main\EventResult(
                    \Bitrix\Main\EventResult::ERROR,
                    array(
                        'ERROR' => new \Bitrix\Main\Error('Eroror send sms', 'ERROR_SMS_SEND')
                    ),
                    'bxmaker.smsnotice'
                );
          }
    }


    public static function sendSms($phone, $text){

        $arFields = array(
            'user' => self::$smsLogin,
            'password' => self::$smsPass,
            'recipient' => $phone,
            'message' => \Bitrix\Main\Text\Encoding::convertEncoding($text, SITE_CHARSET, 'UTF-8' )
        );

        if(self::$smsSender)
       {
           $arFields['sender'] = self::$smsSender;
       }

       $oHttp = new \Bitrix\Main\Web\HttpClient();
       $oHttp->post('*********',$arFields); // вместо * - нужно указать адрес API смс сервиса  на которые нужно отправлять запросы

       return true;
    }

}