← Назад к решениям
ПлагинPHPПлатно

WP Two-Factor Bridge

Плагин WordPress, приносящий сменяемые коды двухфакторной авторизации консольных аккаунтов внутрь магазина WooCommerce. Привязка по QR прямо из браузера, страница самообслуживания в кабинете, REST-эндпоинты для внутренних инструментов и проверка оплаченных заказов, по которым код получить нельзя.

WP Two-Factor Bridge

Стек

PHPWordPressWooCommerceREST APITOTPJavaScript

Проблема

Магазин цифровых игр выполняет заказы на консольных аккаунтах, защищённых двухфакторной авторизацией. Значит, на каждый заказ нужен одноразовый код ровно в тот момент, когда оператор с ним работает, а коды меняются каждые тридцать секунд. Операторы читали их из приложения на телефоне, пересылали в чат и теряли заказы всякий раз, когда код истекал на полпути.

Доставалось и покупателям. Тот, кто привязал собственный аккаунт, не мог посмотреть свой текущий код, не поставив аутентификатор и не пройдя привязку заново. И ничто не проверяло в момент оплаты, можно ли вообще получить код по этому заказу - проблема всплывала позже, на выдаче, когда деньги уже списаны.

До → После

ДоПосле
Коды вручную считываются из приложения и пересылаются в чатКод запрашивается из магазина по адресу аккаунта
Привязка аккаунта - ручной перенос секретаQR-код сканируется в браузере или загружается картинкой
Покупатель не мог увидеть свой текущий кодСтраница самообслуживания в личном кабинете WooCommerce
Данные аккаунта разбросаны по перепискеПоля аккаунта в профиле, оформлении заказа и карточке заказа
Сломанные заказы обнаруживались на выдачеОплаченный заказ проверяется автоматически и помечается, если код недоступен
Эндпоинт кодов открыт любому, кто его нашёлПроверка на бота перед публичными формами

Как это работает

  1. Аккаунт привязывается. Покупатель открывает страницу привязки и наводит камеру на QR-код сопряжения или загружает его скриншотом. Картинка распознаётся в браузере и уходит в плагин, который регистрирует аккаунт в сервисе кодов и возвращает его идентификатор и текущий код.
  2. Данные аккаунта живут в профиле. Адрес консольного аккаунта хранится как поле WooCommerce, показывается в профиле пользователя в админке, в личном кабинете, при оформлении заказа и в карточке заказа, а при следующей покупке подставляется сам - переписывать ничего не нужно.
  3. Код запрашивается по требованию. Коды отдают два эндпоинта - по адресу аккаунта и по внутреннему идентификатору, поэтому и клиентская страница, и внутренние инструменты читают из одного источника, а не держат свои копии.
  4. Публичные формы закрыты проверкой. Форма запроса кода отрисовывается за проверкой на бота, чтобы эндпоинт не превратился в бесплатный справочник для всякого, кто угадает адрес.
  5. Оплаченные заказы проверяются. Когда заказ переходит в работу, плагин проверяет, можно ли реально получить код по указанному аккаунту, если только покупатель не попросил магазин выдать новый аккаунт. Если нельзя, сбой пишется в лог и в примечание к заказу, и проблема видна до того, как оператор возьмёт заказ.
  6. Всё идёт через один сервис. Эндпоинт и токен настраиваются один раз в админке; собственной логики генерации кодов у плагина нет, поэтому смена сервиса - это правка настроек.

Основные возможности

  • Два шорткода - привязать аккаунт и получить текущий код
  • Привязка по QR: съёмка камерой или загрузка картинки, распознавание на клиенте
  • REST-эндпоинты: код по адресу, код по идентификатору, вход по QR
  • Поля консольного аккаунта в профиле, кабинете, оформлении и карточке заказа
  • Собственные эндпоинты WooCommerce - страницы живут внутри личного кабинета
  • Наблюдатель заказов, помечающий оплаченные заказы без доступного кода
  • Проверка на бота перед публичными формами
  • Один экран настроек для эндпоинта и токена сервиса

Установка

  1. Загрузите папку плагина в /wp-content/plugins/ и активируйте
  2. Откройте Two Fa в боковом меню админки и укажите эндпоинт и токен сервиса кодов
  3. Там же добавьте ключ и секрет проверки на бота
  4. Один раз обновите постоянные ссылки, чтобы заработали эндпоинты кабинета link-2fa и get-2fa
  5. При необходимости разместите [2fa_link] и [2fa_get_code] на отдельных страницах

Открыт для работы по контракту

Я доступен для работы по контракту. Если у вас есть интересная идея проекта, запишитесь на звонок через Calendly.

Записаться на 30-минутный звонок