БАЗА ЗНАНЬ
PHP 5.6–8.3ionCube Loader 13+OpenCart / ocStore 2.3–3.x
Верифікація телефону

Сценарії, канали, таймінги й ліміти

Налаштуйте OTP для входу, реєстрації, профілю й оформлення, строк довіри до номера та безпечне скасування підтвердження після виходу.

На цій сторінціШвидкий перехід до конкретного налаштування

Базова конфігурація

  • сценарії OTP
  • довжина і TTL коду
  • основний і резервний канал
  • затримка повторного надсилання
  • ліміти помилкових кодів
  • тексти повідомлень

Час життя підтвердженого номера

У межах цього строку той самий номер і серверна сесія можуть повторно пройти дозволені сценарії без нового коду. Це стосується входу, реєстрації та кількох окремих замовлень.

  • рекомендований старт - 20 хвилин
  • новий код потрібен після завершення строку, зміни номера або втрати сесії
  • натискання «Вийти» скасовує довіру негайно
  • антиспам-ліміти та ідентифікатор браузера виходом не обнуляються

Перевіряйте як клієнт

ПРИМІТКА

Спочатку перевірте повторне використання в поточній сесії, потім натисніть «Вийти» й переконайтеся, що наступний телефонний вхід знову вимагає OTP. Для повністю чистого тесту використовуйте приватне вікно.

ПОВНА ІНСТРУКЦІЯ

Усі поля, варіанти та перевірки

Нижче наведено повний профільний розділ офіційної інструкції модуля, без скорочень і маркетингового переказу.

16 тематичних підрозділівТаблиці, поля й контрольні перевірки

14. OTP - підтвердження телефону

OTP - це одноразовий код, який клієнт отримує на телефон і вводить на сайті.

Як увімкнути OTP

  1. Спочатку перевірте SMS або дзвінок.
  2. Відкрийте OTP -> Налаштування OTP.
  3. Увімкніть OTP Статус.
  4. Увімкніть тільки потрібні сценарії OTP.
  5. У полі Канал надсилання OTP виберіть, через що модуль має спробувати відправити OTP-код першим: SMS, Viber або Telegram. Якщо увімкнена Авторизація дзвінком, цей блок показується як Канал OTP без дзвінка: першим буде дзвінок, а вибраний канал працює тільки для OTP без дзвінка.
  6. Налаштуйте довжину коду і часи.
  7. Перевірте маршрути сторінок, якщо оформлення замовлення нестандартне.
  8. Натисніть Зберегти.
  9. Протестуйте на сайті як клієнт.

Сценарії OTP

СценарійДе працюєКоли вмикати
АвторизаціїВхід клієнта в акаунт.Якщо вхід має бути підтверджений телефоном.
РеєстраціїСтворення нового акаунта.Якщо треба не приймати фейкові телефони.
Зміні в Особистому кабінетіЗміна телефону в профілі.Рекомендовано, щоб клієнт не поставив чужий номер.
Оформлення замовленняПеревірка під час оформлення замовлення.Найпрактичніший варіант для підтвердження телефону в замовленні.

Як OTP працює для клієнта

  1. Клієнт вводить телефон.
  2. Модуль перевіряє формат номера, країну, IP, браузер, сесію і ліміти.
  3. Якщо все нормально, модуль вибирає сценарій доставки OTP.
  4. Якщо увімкнена авторизація дзвінком і вибраний шлюз її підтримує, модуль спочатку запускає дзвінок.
  5. Якщо дзвінок не використовується, модуль створює OTP-код і відправляє його через канал, вибраний у полі Канал надсилання OTP.
  6. Якщо дзвінок не вдався і ввімкнене резервне SMS для дзвінка, модуль створює OTP-код і надсилає його саме через SMS.
  7. Клієнт вводить код або підтверджує дію через дзвінок.
  8. Модуль перевіряє код, результат дзвінка і термін дії підтвердження.
  9. Якщо перевірка успішна, номер вважається підтвердженим.

Якщо будь-яка перевірка не пройдена, код або дзвінок не запускається. Це зроблено спеціально, щоб не витрачати баланс на ботів і підозрілі запити.

Повторне використання підтвердження та явний вихід

Після успішного OTP той самий номер у цьому браузері можна повторно використовувати для входу, реєстрації та оформлення замовлення протягом значення Час життя підтвердженого номера. Звичайні переходи між сторінками, виправлення полів форми та створення кількох окремих замовлень не вимагають нового коду, поки строк довіри не завершився і номер не змінився.

Явне натискання Вийти є безпековою межею. Модуль одразу видаляє серверний стан підтвердження, незавершені дозволи оформлення та cookies телефонного входу. Навіть якщо налаштований строк довіри ще не завершився, наступний вхід за номером телефону вимагатиме новий OTP. Це захищає акаунт на спільному або переданому іншій людині пристрої. Ідентифікатор браузера для антиспам-захисту при цьому зберігається: вихід не повинен обнуляти ліміти чи приховувати підозрілу активність.

Логіка вибору каналу OTP

Для OTP є окреме поле Канал надсилання OTP. Воно не залежить від каналу звичайних повідомлень адміну, статусів замовлення, відкладених подій або масової розсилки.

Якщо ввімкнена Авторизація дзвінком, адмінка одразу змінює цей блок на Канал OTP без дзвінка. Це не декоративна назва, а захист від плутанини: поле не керує першим дзвінком або резервним SMS після його помилки.

Основна логіка така:

  1. Дзвінок має пріоритет, якщо ввімкнена Авторизація дзвінком, модуль і OTP увімкнені, а вибраний Call gateway підтримує потрібний сценарій. Це може бути SMS-шлюз із підтримкою дзвінків або окремий Stream Telecom.
  2. Резервне SMS після дзвінка спрацьовує, якщо дзвінок не запустився або не підтвердився, поле SMS при помилці дзвінка ввімкнене і налаштований основний SMS-шлюз. У цьому випадку модуль надсилає OTP саме через SMS, а не через канал, вибраний у полі Канал надсилання OTP / Канал OTP без дзвінка.
  3. Якщо дзвінок не використовується, перша спроба OTP іде через вибраний канал: SMS, Viber або Telegram.
  4. Якщо вибраний канал не спрацював, модуль перевіряє інші доступні й увімкнені канали в порядку Telegram -> Viber -> SMS, пропускаючи вже вибраний канал.
  5. Якщо інших доступних каналів немає або резервне надсилання для них вимкнене, додаткової спроби не буде.

Приклади:

Вибраний Канал надсилання OTP / Канал OTP без дзвінкаЩо модуль пробує після помилки першого каналу
SMSTelegram -> Viber, якщо ці канали підключені й доступні. SMS повторно не пробується.
ViberTelegram, якщо Telegram доступний. Потім SMS, якщо SMS-шлюз налаштований і резервне SMS після помилки Viber дозволене. Viber повторно не перевіряється.
TelegramViber, якщо Viber доступний. Потім SMS, якщо SMS-шлюз налаштований і відповідне резервне надсилання дозволене. Telegram повторно не перевіряється.

Важливо: якщо у списку вибору є тільки SMS, то після невдалого надсилання SMS запасного каналу не буде. Якщо вибрано Без SMS / тільки авторизація дзвінком, а SMS-шлюз не налаштований, резервне SMS для OTP недоступне.

Як працює резервне надсилання для OTP

НалаштуванняКоли спрацьовуєЩо буде далі
SMS при помилці дзвінкаДзвінок не запустився, не підтвердився або провайдер повернув помилку.Модуль примусово надсилає OTP-код через основний SMS-шлюз. Telegram і Viber у цьому резервному сценарії не мають пріоритету. Якщо SMS-шлюз вимкнений, резервне надсилання недоступне.
Канал надсилання OTP / Канал OTP без дзвінкаДзвінок не використовується, і треба відправити звичайний OTP-код.Вибраний канал стає першою спробою. Після помилки модуль може перейти до інших доступних каналів у порядку Telegram -> Viber -> SMS, але пропускає вже вибраний канал.
SMS якщо Telegram недоступнийTelegram недоступний або не може доставити повідомлення, і наступним доступним запасним каналом має бути SMS.Модуль може перейти на SMS. Якщо резервне надсилання вимкнене, повідомлення через SMS не піде.
SMS якщо Viber недоступнийViber не доставив повідомлення.Модуль може перейти на SMS. Якщо резервне надсилання вимкнене, після помилки Viber SMS не піде.

Приклад: якщо увімкнений дзвінок, підключений Telegram і налаштований SMS-шлюз, OTP спочатку піде через дзвінок. Якщо дзвінок провалиться і SMS при помилці дзвінка увімкнене, модуль відправить код через SMS, а не через Telegram або Viber. Якщо вибрано Без SMS / тільки авторизація дзвінком, після невдалого дзвінка SMS не піде.

Якщо дзвінок вимкнений і в Канал надсилання OTP вибрано SMS, модуль спочатку відправить SMS. Якщо SMS не спрацює, він не буде повторювати SMS, а перевірить тільки інші доступні канали: Telegram і Viber. Якщо вони не підключені, додаткової спроби не буде.

Які сценарії вмикати

Потреба магазинуЩо вмикатиЧого не вмикати без потреби
Треба перевіряти тільки телефони в замовленняхОформлення замовленняАвторизації і Реєстрації, якщо акаунти не важливі.
Треба захистити акаунти клієнтівАвторизації, Реєстрації, Зміні в Особистому кабінетіоформлення замовлення можна не чіпати, якщо телефон замовлення не критичний.
Треба максимальна чистота бази телефонівУсі сценаріїНе запускайте без тесту, бо кожна точка входу почне вимагати код.
Треба мінімум незручностей клієнтуТільки оформлення замовлення або тільки реєстраціяНе вмикайте OTP всюди одразу.

Код і таймінги

ПолеЩо робитьРекомендація
Довжина OTPВибирає 4 або 6 цифр у коді.4 простіше для клієнта, 6 безпечніше.
Час повторного відправленняЧерез скільки секунд можна попросити код повторно.30-60 секунд.
Термін дії OTPСкільки часу код дійсний.5-10 хвилин.
Час життя підтвердженого номераЯк довго той самий номер вважається підтвердженим у цьому браузері. Протягом цього часу покупець може повторно ввійти без нового коду, якщо він не натискав Вийти, та оформити кілька окремих замовлень без нового OTP.Для оформлення замовлення залиште помірне значення, наприклад 20 хвилин. Новий код знадобиться після завершення строку, зміни номера, втрати серверної сесії або явного виходу з акаунта.

Ліміти повторного надсилання

ПолеЩо робитьРекомендація
Обмежити запит OTPВмикає локальний ліміт повторних кодів для номера.Увімкніть.
Послідовні OTP-запитиСкільки разів підряд можна попросити код.Не ставте занадто багато.
Тривалість блокуванняНа скільки заблокувати після перевищення.Почніть з помірного значення.

Ліміти помилкових кодів

ПолеЩо робитьРекомендація
Обмеження помилкових спроб OTPБлокує після багатьох неправильних кодів.Увімкніть.
Кількість помилкових спроб OTPСкільки разів можна помилитися.3-5 спроб.
Тривалість блокуванняПауза після неправильних кодів.Достатня, щоб не можна було перебирати код.

Маршрути сторінок

Стандартні сторінки OpenCart модуль підключає автоматично:

  • account/register;
  • account/edit;
  • checkout/checkout.

Якщо у вас Simple, One Page Checkout або інший нестандартний модуль оформлення замовлення, OTP може не з'явитися автоматично. Тоді потрібно додати маршрут сторінки до блоку додаткових сторінок.

Для звичайного користувача правило просте: якщо OTP на оформлення замовлення не з'явився, передайте цей пункт розробнику.

Шаблон для розробника:

У модулі SAP - SMS / OTP Pro увімкнений OTP для оформлення замовлення, але на оформлення замовлення поле підтвердження не з'являється.
Потрібно перевірити маршрут сторінки оформлення замовлення і додати його в "Додаткові сторінки перевірки телефону" або "Сторінки сторонніх модулів".

Захищене оформлення замовлення та правила ризику

Функція Ризикові замовлення захищає створення замовлення на сервері, а не лише показує вікно OTP у браузері. Вона підтримує три рівні захисту: рекомендований збалансований, суворий для кожного замовлення та вибірковий за власними правилами.

Вкладка OTP -> Ризикові замовлення показується одразу після ввімкнення сценарію OTP -> Налаштування OTP -> Оформлення замовлення. Якщо цей сценарій вимкнути, вкладка ховається, а перевірка правил не виконується.

Логіка роботи:

  • Оформлення замовлення увімкнено, а Підтвердження ризикових замовлень вимкнено - оформлення вимагає підтверджений номер, але чинне підтвердження повторно використовується протягом заданого часу життя;
  • обидва перемикачі увімкнено, режим Тестовий - у журналі фіксуються випадки, які в робочому режимі вимагали б OTP, але оформлення не зупиняється;
  • у робочому збалансованому режимі чинне підтвердження потрібне гостю, новому клієнту та для непідтвердженого номера; перевірений постійний клієнт проходить без повторного коду, якщо не спрацювало власне правило;
  • у робочому суворому режимі перевіряється кожне замовлення, але чинне підтвердження того самого номера повторно використовується до завершення його строку життя;
  • у робочому режимі Лише правила чинне підтвердження потрібне тільки після збігу першого активного правила;
  • новий OTP надсилається лише коли номер ще не підтверджений, строк довіри завершився, номер змінився або серверна сесія більше не підтверджує цей номер;
  • для кожного окремого замовлення модуль створює новий correlation_id і окремий внутрішній дозвіл. Навіть коли використано чинне підтвердження без нового коду, дозвіл атомарно споживається фінальним створенням замовлення й не може бути повторно використаний паралельним запитом;
  • миттєвий повтор фінального запиту з тим самим відбитком оформлення блокується як можливий дубль. Окреме наступне замовлення з новим станом checkout отримує власний дозвіл;
  • строк внутрішнього дозволу не може перевищувати ані Час життя підтвердженого номера, ані Строк підтвердження checkout.

Безпечне ввімкнення

  1. Переконайтеся, що OTP Статус і Оформлення замовлення увімкнені.
  2. Відкрийте OTP -> Ризикові замовлення.
  3. Увімкніть перемикач у блоці Підтвердження ризикових замовлень.
  4. Залиште Режим роботи = Тестовий - лише журнал.
  5. Виберіть Рівень захисту = Збалансований.
  6. Для поля Якщо OTP неможливо надіслати залиште блокування.
  7. Задайте строк підтвердження оформлення замовлення.
  8. Виберіть статуси замовлень, які магазин вважає успішними.
  9. Створіть додаткові правила й натисніть Зберегти.
  10. Перевірте гостя, нового клієнта, постійного клієнта та хоча б одне власне правило.
  11. Перевірте блок Останні спрацювання.
  12. Лише після перевірки журналу перемкніть режим на Робочий - вимагати OTP.

Основні налаштування

ПолеЩо робитьРекомендація
Підтвердження ризикових замовленьВмикає керований серверний захист оформлення замовлення.Увімкніть після перевірки основного каналу OTP. Якщо вимкнено, сценарій оформлення працює як звичайний OTP для всіх замовлень.
Рівень захистуВизначає базову політику: Збалансований, Суворий або Лише правила.Для більшості магазинів використовуйте Збалансований. Суворий вибирайте, якщо будь-яке непідтверджене замовлення неприпустиме. Лише правила залишає прогалини між правилами й підходить лише для усвідомленої вибіркової перевірки.
Режим роботиТестовий записує випадки, які вимагали б OTP, але не зупиняє оформлення; Робочий реально застосовує вибраний рівень захисту.Починайте з тестового режиму та перевірте повну матрицю покупців до переходу в робочий.
Якщо OTP неможливо надіслатиВизначає поведінку при помилці провайдера. У збалансованому та суворому режимах модуль завжди блокує створення замовлення, щоб захист не обходився мовчки.Залиште Заблокувати оформлення замовлення. Дозвіл без OTP діє лише в режимі Лише правила і свідомо знижує захист.
Строк підтвердження checkout, хвилинСкільки часу зберігається одноразовий внутрішній дозвіл для завершення поточного оформлення. Це не загальний час довіри до номера: повторне замовлення отримує власний новий дозвіл.15 хвилин - нормальне стартове значення. Дозволено від 1 до 120 хвилин; фактичний строк не буде довшим за залишок часу життя підтвердженого номера.
Статуси успішних замовленьВизначає, які попередні замовлення враховувати в історії покупця.Виберіть статуси, які у вашому магазині означають реальне прийняте, оплачене або виконане замовлення. Не додавайте скасовані й помилкові статуси.

Матриця рівнів захисту

РівеньДля кого потрібне чинне підтвердження номераЯкщо власне правило не спрацювалоЯкщо новий OTP неможливо надіслати
ЗбалансованийГість, новий клієнт, покупець із непідтвердженим номером і будь-який покупець після збігу власного правила.Перевірений постійний клієнт проходить без повторного OTP. Чинне підтвердження повторно використовується для нових замовлень до завершення строку довіри.Замовлення блокується.
СуворийКожен покупець перед кожним замовленням.Кожне замовлення отримує окремий одноразовий дозвіл, але новий код не потрібен, поки підтвердження того самого номера чинне.Замовлення блокується.
Лише правилаПокупець, для якого збіглося перше активне правило.Оформлення дозволяється без перевірки правилами. Якщо правило збіглося, чинне підтвердження можна повторно використати.Виконується вибрана політика: блокування або свідомий дозвіл без OTP із записом у журнал.

У тестовому режимі жоден із рівнів не зупиняє покупця. Журнал показує випадки, які вимагали б OTP після переходу в робочий режим.

Як перевіряються правила

Кожне правило має назву, перемикач Активне правило, пріоритет, логіку умов і одну або кілька умов.

  • Менше число в полі Пріоритет перевіряється раніше. Наприклад, 10 має вищий пріоритет за 20.
  • Усі умови (AND) означає, що мають виконатися всі умови правила.
  • Будь-яка умова (OR) означає, що достатньо хоча б однієї умови.
  • Після першого збігу перевірка зупиняється. Саме назва цього правила потрапляє в журнал.
  • Неактивне правило не впливає на оформлення замовлення.
  • Кнопка копіювання створює копію правила, а червона кнопка видаляє його. Окрема червона кнопка в рядку умови видаляє тільки цю умову.

Показники правил

ПоказникДоступні порівнянняЩо означає значення
Сума замовленняБільше, Більше або дорівнює, Менше, Менше або дорівнює, Між значеннямиПоточна підсумкова сума оформлення замовлення. Для Між значеннями заповніть нижню і верхню межу.
Спосіб оплатиДорівнює, Не дорівнюєОбраний покупцем спосіб оплати. Список формується автоматично з установлених та увімкнених способів оплати магазину.
Тип покупцяДорівнюєГість, Авторизований клієнт або Клієнт без успішних замовлень.
Кількість успішних замовленьДорівнює, Більше, Більше або дорівнює, Менше, Менше або дорівнюєКількість попередніх замовлень у статусах, вибраних у блоці Статуси успішних замовлень. Для гостя історія шукається за нормалізованим телефоном.
Телефон підтвердженоДорівнюєЧи був номер поточного оформлення замовлення успішно підтверджений OTP у чинній сесії. Значення: Так або Ні.
Вік підтвердження телефона, днівБільше, Більше або дорівнюєСкільки повних днів минуло від останнього успішного підтвердження цього номера.
Замовлень із телефона за періодБільше або дорівнюєСкільки замовлень уже створено з тим самим нормалізованим номером за попередній період. Поле Період, хвилин приймає від 1 хвилини до 7 днів (10080 хвилин).

Тип покупця читається так:

  • Гість - покупець не авторизований;
  • Авторизований клієнт - покупець авторизований і має хоча б одне замовлення в обраних успішних статусах;
  • Клієнт без успішних замовлень - покупець авторизований, але ще не має замовлень у цих статусах.

Список для показника Спосіб оплати не зашитий у модуль. Він автоматично читає встановлені платіжні розширення та їхні статуси. Для OpenCart/ocStore 2.3 перевіряються старі ключі налаштувань, а для 3.x - нові ключі payment_*, із сумісною перевіркою в обидва боки. Якщо спосіб оплати встановлено, але він не з'явився у правилі, спочатку переконайтеся, що його статус справді Увімкнено, а потім перезбережіть сторінку модуля.

Рекомендований стартовий набір

Пороги нижче - приклад, а не універсальна істина. Суми треба адаптувати до середнього чека й валюти магазину.

ПріоритетНазваУмови
10Часті повторні замовленняЗамовлень із телефона за період >= 2, період 60 хвилин.
20Гість із підвищеною сумоюСума замовлення >= 1500 AND Тип покупця = Гість.
30Новий клієнт із великою сумоюСума замовлення >= 2500 AND Тип покупця = Клієнт без успішних замовлень.
40Велика сума для будь-якого покупцяСума замовлення >= 5000.

Тримайте правила від вузьких до загальних. Правило масових повторів має бути вище за правило великої суми, інакше журнал показуватиме тільки загальне правило, а причина ризику буде менш зрозумілою.

Останні спрацювання

Журнал показує дату, назву правила, замаскований телефон, статус рішення та ID створеного замовлення, якщо воно вже існує. Відкритий номер у журналі ризику не зберігається.

ЕлементЩо робить
Усього записівПоказує реальну кількість записів журналу.
Зберігати журнал, днівАвтоматично видаляє старі записи під час відкриття налаштувань модуля. Допустимо від 1 до 365 днів; 30 днів - нормальний старт.
Очистити журналВидаляє весь журнал після підтвердження. Дію неможливо скасувати.

Типові статуси журналу: збіг у тестовому режимі, потрібне підтвердження OTP, OTP підтверджено, чинне підтвердження використано повторно, замовлення створено, дозволено постійному клієнту, дозволено через відсутність збігу у вибірковому режимі або надсилання OTP не вдалося. У режимі приватності для адміністратора без головних прав телефон у цьому журналі маскується повністю.

Статус у журналіЩо він означає
Збіг у тестовому режиміРівень захисту або власне правило вимагали б OTP у робочому режимі, але поточне оформлення не блокувалося.
Потрібне підтвердження OTPРобочий режим зупинив створення замовлення до підтвердження номера.
OTP підтвердженоКод прийнято, але фінальне створення замовлення ще має одноразово використати дозвіл.
Чинне підтвердження використано повторноТой самий номер і серверна сесія ще перебувають у межах Часу життя підтвердженого номера. Новий код не надсилався, а для цього замовлення створено новий одноразовий дозвіл.
Замовлення дозволеноОдноразовий дозвіл атомарно використано фінальним запитом оформлення.
Замовлення створеноДозвіл пов'язано з фактичним ID створеного замовлення.
Дозволено постійному клієнтуЗбалансований режим визнав номер і покупця довіреними, а власне правило не спрацювало.
Дозволено: правила не спрацювалиУ режимі Лише правила жодна активна умова не вимагала OTP.
Надсилання OTP не вдалосяПровайдер не доставив код, а захисна політика не дозволила продовжити оформлення.
Пропуск через помилку провайдераТільки режим Лише правила: магазин свідомо дозволив оформлення без OTP і отримав запис про обхід.

Активні правила кешуються між запитами, а дані оформлення обчислюються тільки коли вони реально потрібні. Для гостя у збалансованому режимі та для будь-якого покупця в суворому модуль одразу знає, що потрібне чинне підтвердження номера, тому не читає власні правила з бази й не запускає їхні додаткові запити. Якщо підтвердження ще діє, окремий дозвіл створюється без надсилання нового OTP. Для перевіреного постійного клієнта правила все одно виконуються. Це зменшує навантаження без послаблення захисту.

17. OTP - тексти повідомлень

У цій вкладці налаштовуються тексти OTP-повідомлень.

Як налаштувати

  1. Відкрийте OTP -> Повідомлення OTP.
  2. Перевірте текст для входу, реєстрації, профілю і оформлення замовлення.
  3. Переконайтеся, що в тексті є {otp}.
  4. Натисніть Зберегти.
  5. Протестуйте кожний увімкнений сценарій.

Головне правило

У повідомленні обов'язково має бути шорткод {otp}. Саме він підставляє код.

Нормальні приклади:

Код підтвердження: {otp}
Ваш код для підтвердження телефону: {otp}. Магазин Example.

Не робіть OTP-повідомлення довгим. Клієнт має швидко побачити код.

Потрібна швидка перевірка?Відкрити діагностику →
ПРЯМИЙ ЗВ’ЯЗОК

Потрібна адаптація або Telegram-сервер?

Зв’язок з автором модуля щодо сумісності, встановлення, нестандартної теми, оформлення замовлення та платного підключення Telegram-сервера.

Підтримка SAP - SMS / OTP Pro на OpenCartForum