Какие задачи решает OTP в e-commerce
Код подтверждения нужен не для каждого клика. Его применяют там, где ошибка или злоупотребление создаёт расходы для покупателя, продавца или службы доставки.
| Сценарий | Что подтверждается | Purpose |
|---|---|---|
| Регистрация | Номер нового покупателя | signup |
| Вход | Доступ к аккаунту | login |
| Восстановление | Возврат доступа | recovery |
| Смена получателя | Намерение владельца заказа | change_recipient |
| Смена адреса | Чувствительное изменение доставки | change_delivery |
| Получение заказа | Действие получателя | order_pickup |
Разные purpose не позволяют применить код входа для изменения заказа. Сервер обязан хранить связь между challenge, пользователем и конкретным действием.
Подтверждение номера при регистрации
Сначала создайте ограниченное состояние регистрации, затем отправьте OTP. Только после успешного verify помечайте номер подтверждённым и открывайте полный аккаунт.
Нормализуйте телефон на сервере и используйте одинаковое значение в send и verify. Интерфейс должен показывать маскированный номер, выбранный канал, пятиминутный срок и таймер resend.
Изменения заказа
Смена адреса, получателя или способа выдачи после оформления может быть рискованной. Перед отправкой кода проверьте, что заказ принадлежит текущему пользователю и изменение ещё разрешено.
После verify заново загрузите заказ и убедитесь, что его статус, состав и права пользователя не изменились. OTP подтверждает действие человека, но не заменяет бизнес-правила магазина.
Код и короткая ссылка
В запросе POST /api/otp/send можно передать link. Cascade создаст короткий URL и добавит его в сообщение рядом с кодом.
Это удобно для перехода к странице заказа, оплате или подтверждению получения. Не помещайте персональные или платёжные данные в URL. Конечная страница должна проверять сессию, права и срок действия ссылки.
Каналы и цена
WhatsApp и Telegram публично доступны и стоят 3 кредита за успешную доставку. После регистрации начисляется 1000 стартовых кредитов. Публичный SMS-провайдер пока не запущен.
Не обещайте покупателю SMS fallback, если он не работает для компании. Показывайте реальный канал и понятное действие при недоставке.
Что измерять
Связывайте технические события с результатом магазина:
- send и успешная доставка;
- время до verify;
- завершённая регистрация или вход;
- подтверждённое изменение заказа;
- resend на покупателя;
- брошенные формы после отправки;
- кредиты на завершённое действие;
- обращения «код не пришёл».
Так можно отличить проблему канала от неудобного интерфейса или слишком строгого лимита.
Защита от злоупотреблений
- Лимитируйте send и verify по номеру, аккаунту, IP и API-ключу.
- Не отправляйте код автоматически при каждом обновлении страницы.
- Добавьте серверный cooldown resend.
- Не раскрывайте наличие аккаунта по ответу восстановления.
- Не записывайте OTP и Bearer-токен в открытые логи.
- После успеха делайте код недействительным.
- Для дорогих и необычных заказов применяйте дополнительную проверку риска.
План пилота
Начните с регистрации или входа на тестовом контуре. Затем отдельно проверьте изменение заказа: успешный код, неверный код, истечение TTL, параллельные запросы, смену статуса заказа между send и verify и повторное использование кода.