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

Стек
Проблема
Магазин цифровых игр выполняет заказы на консольных аккаунтах, защищённых двухфакторной авторизацией. Значит, на каждый заказ нужен одноразовый код ровно в тот момент, когда оператор с ним работает, а коды меняются каждые тридцать секунд. Операторы читали их из приложения на телефоне, пересылали в чат и теряли заказы всякий раз, когда код истекал на полпути.
Доставалось и покупателям. Тот, кто привязал собственный аккаунт, не мог посмотреть свой текущий код, не поставив аутентификатор и не пройдя привязку заново. И ничто не проверяло в момент оплаты, можно ли вообще получить код по этому заказу - проблема всплывала позже, на выдаче, когда деньги уже списаны.
До → После
| До | После |
|---|---|
| Коды вручную считываются из приложения и пересылаются в чат | Код запрашивается из магазина по адресу аккаунта |
| Привязка аккаунта - ручной перенос секрета | QR-код сканируется в браузере или загружается картинкой |
| Покупатель не мог увидеть свой текущий код | Страница самообслуживания в личном кабинете WooCommerce |
| Данные аккаунта разбросаны по переписке | Поля аккаунта в профиле, оформлении заказа и карточке заказа |
| Сломанные заказы обнаруживались на выдаче | Оплаченный заказ проверяется автоматически и помечается, если код недоступен |
| Эндпоинт кодов открыт любому, кто его нашёл | Проверка на бота перед публичными формами |
Как это работает
- Аккаунт привязывается. Покупатель открывает страницу привязки и наводит камеру на QR-код сопряжения или загружает его скриншотом. Картинка распознаётся в браузере и уходит в плагин, который регистрирует аккаунт в сервисе кодов и возвращает его идентификатор и текущий код.
- Данные аккаунта живут в профиле. Адрес консольного аккаунта хранится как поле WooCommerce, показывается в профиле пользователя в админке, в личном кабинете, при оформлении заказа и в карточке заказа, а при следующей покупке подставляется сам - переписывать ничего не нужно.
- Код запрашивается по требованию. Коды отдают два эндпоинта - по адресу аккаунта и по внутреннему идентификатору, поэтому и клиентская страница, и внутренние инструменты читают из одного источника, а не держат свои копии.
- Публичные формы закрыты проверкой. Форма запроса кода отрисовывается за проверкой на бота, чтобы эндпоинт не превратился в бесплатный справочник для всякого, кто угадает адрес.
- Оплаченные заказы проверяются. Когда заказ переходит в работу, плагин проверяет, можно ли реально получить код по указанному аккаунту, если только покупатель не попросил магазин выдать новый аккаунт. Если нельзя, сбой пишется в лог и в примечание к заказу, и проблема видна до того, как оператор возьмёт заказ.
- Всё идёт через один сервис. Эндпоинт и токен настраиваются один раз в админке; собственной логики генерации кодов у плагина нет, поэтому смена сервиса - это правка настроек.
Основные возможности
- Два шорткода - привязать аккаунт и получить текущий код
- Привязка по QR: съёмка камерой или загрузка картинки, распознавание на клиенте
- REST-эндпоинты: код по адресу, код по идентификатору, вход по QR
- Поля консольного аккаунта в профиле, кабинете, оформлении и карточке заказа
- Собственные эндпоинты WooCommerce - страницы живут внутри личного кабинета
- Наблюдатель заказов, помечающий оплаченные заказы без доступного кода
- Проверка на бота перед публичными формами
- Один экран настроек для эндпоинта и токена сервиса
Установка
- Загрузите папку плагина в
/wp-content/plugins/и активируйте - Откройте Two Fa в боковом меню админки и укажите эндпоинт и токен сервиса кодов
- Там же добавьте ключ и секрет проверки на бота
- Один раз обновите постоянные ссылки, чтобы заработали эндпоинты кабинета
link-2faиget-2fa - При необходимости разместите
[2fa_link]и[2fa_get_code]на отдельных страницах
Открыт для работы по контракту
Я доступен для работы по контракту. Если у вас есть интересная идея проекта, запишитесь на звонок через Calendly.
Записаться на 30-минутный звонок