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

Собственный СМС сервис

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

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

Код можно разместить в файле /bitrix/php_interface/init.php


// регистрируем обработчики событий


$eventManager = \Bitrix\Main\EventManager::getInstance();

$eventManager->addEventHandler(
    "bxmaker.authuserphone",
    "onSendCode",
    ['CBXmakerTools', 'authUserPhoneonSendCode']
);
$eventManager->addEventHandler(
    "bxmaker.authuserphone",
    "onUserChangePassword",
    ['CBXmakerTools', 'authUserPhoneonUserChangePassword']
);
$eventManager->addEventHandler(
    "bxmaker.authuserphone",
    "onUserAdd",
    ['CBXmakerTools', 'authUserPhoneUserAdded']
);



class CBXmakerTools
{

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

    /**
     * Отправка временного кода
     * @param $arFields
     */
    public static function authUserPhoneonSendCode(\Bitrix\Main\Event $event)
    {
        $arFields = (array) $event->getParameter('fields');

        if (self::sendSms($arFields['PHONE'], 'Ваш временный код - ' . $arFields['CODE'])) {
            return new \Bitrix\Main\EventResult(
                \Bitrix\Main\EventResult::SUCCESS,
                null,
            );
        } else {
            return new \Bitrix\Main\EventResult(
                \Bitrix\Main\EventResult::ERROR,
                new \Bitrix\Main\Error('Eroror send sms', 'ERROR_SMS_SEND')
            );
        }

    }

    /* после смены пароля */
    public static function authUserPhoneonUserChangePassword(\Bitrix\Main\Event $event)
    {
        $arFields = (array) $event->getParameter('fields');

        if (self::sendSms($arFields['PHONE'], 'Ваш новый пароль - ' . $arFields['PASSWORD'])) {
            return new \Bitrix\Main\EventResult(
                \Bitrix\Main\EventResult::SUCCESS,
                null,
            );
        } else {
            return new \Bitrix\Main\EventResult(
                \Bitrix\Main\EventResult::ERROR,
                new \Bitrix\Main\Error('Eroror send sms', 'ERROR_SMS_SEND')
            );
        }
    }

    /* после регистрации */
    public static function authUserPhoneUserAdded(\Bitrix\Main\Event $event)
    {
        $arFields = (array) $event->getParameter('fields');

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


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

        $arFields = [
            '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('https://example.com/api', $arFields); // вместо * - нужно указать адрес API смс сервиса  на которые нужно отправлять запросы

        return true;
    }

}