Верификация номера телефона по SMS - это подтверждение доступа к указанному номеру с помощью кода. Пользователь получает сообщение и вводит код на сайте или в приложении. Проверку введённого значения выполняет система, к которой он подключается.
SMS-коды используют при регистрации, входе и восстановлении доступа. Ниже разобран вариант подключения, в котором ваш сайт готовит текст сообщения и проверяет код, а TargetSMS используется для отправки SMS и получения статуса доставки. Это пример организации интеграции, а не описание автоматических настроек сервиса.
В таком сценарии сайт связывает успешный ввод кода с подтверждением номера. Доставка сообщения и ввод кода остаются разными событиями: SMS может дойти до телефона, но пользователь ещё не отправил код на проверку.
В руководстве TargetSMS по HTTPS описаны отправка текста, получение ID сообщения и запрос его статуса. Статус доставки не следует использовать вместо результата проверки кода в вашем приложении. Из описания SMS API также не следует, что сервис проверяет паспортные данные или личность владельца номера.
На странице SMS-авторизации TargetSMS приведены сценарии регистрации, входа в личный кабинет и изменения данных. Для проекта заранее выберите действие, которое пользователь будет подтверждать кодом.
Рекомендация разработчику: не переносите один сценарий без изменений на все действия. Отдельно определите, какие проверки нужны при создании аккаунта, входе и изменении телефона.
Пример последовательности для сайта, который самостоятельно проверяет коды:
В руководстве по HTTPS API TargetSMS описаны параметры отправки и запроса статуса. Генерацию кода, срок его действия и обработку повторных запросов согласуйте с разработчиком выбранной интеграции. Не считайте эти настройки автоматически включёнными при подключении SMS API.
Для описанного варианта понадобятся форма ввода номера и кода, обработчик проверки в вашем приложении и подключение к API отправки SMS. Документация TargetSMS также содержит PHP-библиотеку со скриптами отправки сообщения, запроса статуса и баланса. Наличие этих скриптов само по себе не описывает готовый процесс проверки пользователя.
В инструкции TargetSMS по оформлению кодов авторизации указано, что текст должен содержать название сайта, компании, товарного знака или сервиса клиента. Пример текста: «Код для входа на сайт example.ru: 4162». Домен и код здесь условные; для отправки используйте данные своего проекта.
Рекомендуемый сценарий для разработчика: после нажатия «Получить код» приложение создаёт запрос на подтверждение конкретного номера и отправляет подготовленный текст через TargetSMS. Факт доставки учитывается отдельно от успешного ввода кода.
Рекомендации по проверке: связывайте код с нужным запросом и номером, проверяйте срок действия и допускайте продолжение регистрации только после успешного результата. Если вы выпускаете новый код при повторном запросе, рекомендуется отменять прежний. Это правила настройки приложения, не обещание автоматической работы TargetSMS.
В инструкции TargetSMS по защите форм рекомендованы задержка повторного запроса, ограничения по IP-адресу и номеру, а также CAPTCHA. Эти меры настраиваются на стороне сайта; инструкция не обещает абсолютной защиты.
Дополнительные рекомендации разработчику из руководства OWASP по одноразовым кодам:
Это рекомендации по проектированию, а не перечень функций SMS-шлюза. Точные ограничения выбирайте для своего приложения. По определению OWASP, двухфакторная проверка использует разные факторы, например пароль и код на телефон. Один SMS-код сам по себе не является двумя факторами.
Сначала проверьте результат запроса на отправку. В руководстве HTTPS API перечислены ошибки, в том числе отсутствие текста, отправителя, недостаток средств и отклонение модератором. Если получен ID сообщения, по нему можно запросить статус.
Ниже приведены значения именно из руководства HTTPS API TargetSMS. Это статусы SMS, не результаты ввода кода:
| Статус API | Значение по документации |
|---|---|
| send | Статус сообщения не получен. Это не подтверждение доставки. |
| not_deliver | Сообщение не доставлено. Конечный статус. |
| expired | Абонент находился вне сети во время попыток доставки. Конечный статус. Он не обозначает истечение срока кода в приложении. |
| deliver | Сообщение доставлено. Конечный статус. Результат проверки кода учитывайте отдельно. |
| partly_deliver | Сообщение отправлено, но статус так и не получен. В руководстве он указан как конечный; для выяснения причин предлагается обратиться в поддержку. |
По инструкции о детальной статистике в кабинете доступны ID сообщения, номер получателя, время отправки, статус, число сегментов и стоимость. Рекомендация для диагностики: сопоставляйте эти данные с событиями своего приложения, не раскрывая коды и лишние данные пользователя.
Если SMS доставлено, а код не принят, проверьте обработчик приложения. Рекомендуется отдельно разбирать неверный ввод, истечение срока и повторный запрос, если такие проверки предусмотрены вашей реализацией. По одному статусу SMS установить причину отказа приложения нельзя.
На странице тарифов TargetSMS указано, что стоимость зависит от оператора получателя, количества сообщений, длины текста и условий имени отправителя. В детальной статистике есть число сегментов и стоимость отправки.
Рекомендация для расчёта бюджета: учитывайте повторные отправки отдельно от числа регистраций и проверяйте число частей сообщения. Актуальную цену берите из действующих тарифов и своего кабинета.
Рекомендация перед запуском: протестируйте отправку SMS и проверку кода в своём приложении как два отдельных этапа. На странице услуги TargetSMS указан тестовый баланс 100 рублей после регистрации.
Условия подключения SMS-авторизации TargetSMS