- Модуль: main
- Путь к файлу: ~/bitrix/modules/main/classes/general/user.php
- Класс: CAllUser
- Вызов: CAllUser::SendPhoneCode
static function SendPhoneCode($phoneNumber, $smsTemplate, $siteId = null)
{
$result = new MainResult();
$phoneNumber = MainUserPhoneAuthTable::normalizePhoneNumber($phoneNumber);
$select = ["USER_ID", "DATE_SENT", "USER.LANGUAGE_ID"];
if ($siteId === null)
{
$context = MainContext::getCurrent();
$siteId = $context->getSite();
if ($siteId === null)
{
$select[] = "USER.LID";
}
}
$userPhone = MainUserPhoneAuthTable::getList([
"select" => $select,
"filter" => [
"=PHONE_NUMBER" => $phoneNumber,
],
])->fetchObject();
if (!$userPhone)
{
$result->addError(new MainError(Loc::getMessage("main_register_no_user"), "ERR_NOT_FOUND"));
return $result;
}
//alowed only once in a minute
if ($userPhone->getDateSent())
{
$currentDateTime = new MainTypeDateTime();
if (($currentDateTime->getTimestamp() - $userPhone->getDateSent()->getTimestamp()) < static::PHONE_CODE_RESEND_INTERVAL)
{
$result->addError(new MainError(Loc::getMessage("main_register_timeout"), "ERR_TIMEOUT"));
return $result;
}
}
[$code, $phoneNumber] = static::GeneratePhoneCode($userPhone->getUserId());
if ($siteId === null)
{
$siteId = CSite::GetDefSite($userPhone->getUser()->getLid());
}
$language = $userPhone->getUser()->getLanguageId();
$sms = new MainSmsEvent(
$smsTemplate,
[
"USER_PHONE" => $phoneNumber,
"CODE" => $code,
]
);
$sms->setSite($siteId);
if ($language != '')
{
//user preferred language
$sms->setLanguage($language);
}
$result = $sms->send(true);
$result->setData(["USER_ID" => $userPhone->getUserId()]);
return $result;
}