• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/classes/general/user.php
  • Класс: CAllUser
  • Вызов: CAllUser::VerifyPhoneCode
static function VerifyPhoneCode($phoneNumber, $code)
{
	if ($code == '')
	{
		return false;
	}

	$phoneNumber = MainUserPhoneAuthTable::normalizePhoneNumber($phoneNumber);

	$row = MainUserPhoneAuthTable::getList(["filter" => ["=PHONE_NUMBER" => $phoneNumber]])->fetch();
	if ($row && $row["OTP_SECRET"] != '')
	{
		if ($row["ATTEMPTS"] >= 3)
		{
			return false;
		}

		$totp = new MainSecurityMfaTotpAlgorithm();
		$totp->setInterval(self::PHONE_CODE_OTP_INTERVAL);
		$totp->setSecret($row["OTP_SECRET"]);

		try
		{
			[$result,] = $totp->verify($code);
		}
		catch (MainArgumentException $e)
		{
			return false;
		}

		$data = [];
		if ($result)
		{
			if ($row["CONFIRMED"] == 'N')
			{
				$data["CONFIRMED"] = 'Y';
			}

			$data['DATE_SENT'] = '';
		}
		else
		{
			$data["ATTEMPTS"] = (int)$row["ATTEMPTS"] + 1;
		}

		if (!empty($data))
		{
			MainUserPhoneAuthTable::update($row["USER_ID"], $data);
		}

		if ($result)
		{
			return $row["USER_ID"];
		}
	}
	return false;
}