• Модуль: 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;
}