Интеграция оплаты по СБП от Т-Банка на InSales
Подключение оплаты через Систему быстрых платежей (СБП) от Т-Банка для InSales. Оплата по QR-коду напрямую из карточки заказа, серверная обработка платежей, контроль жизни ссылок.
Задача
Подключить оплату через СБП (Систему быстрых платежей) от Т-Банка с возможностью оплаты по QR-коду прямо из карточки заказа.
Требование: одна кнопка "Оплатить через СБП". Другие способы оплаты не показывать.
Проблема безопасности
InSales не позволяет реализовать полноценную передачу ключей API и обработку статусов напрямую в браузере. Это сделано по соображениям безопасности.
Если передавать TerminalKey и Password в коде страницы, любой человек сможет их увидеть в исходном коде и использовать для своих целей.
Почему нельзя в браузере
Если API-ключи окажутся в коде страницы, злоумышленник сможет создавать платежи от имени магазина, получать информацию о транзакциях, манипулировать статусами оплаты.
Техническое решение
Создали внешний серверный сервис, который обрабатывает все запросы к API Т-Банка. Ключи хранятся на сервере, в код страницы не попадают.
Как это работает
- Покупатель нажимает кнопку "Оплатить через СБП" в карточке заказа
- Браузер отправляет запрос на наш backend-сервис
- Сервис генерирует токен, обращается к API Т-Банка
- Вызывает методы
/initи/getQr - Получает ссылку на оплату с QR-кодом
- Возвращает ссылку в браузер
- Покупатель переходит по ссылке, сканирует QR
- Оплачивает в приложении банка
Состав заказа
В чек передается единая строка: "Оплата по заказ-наряду за авто-мультимедиа/монтаж". Это требование клиента — не передавать детальный состав заказа.
Налоговый режим
Клиент работает на патенте. Передаем в чек соответствующий налоговый режим через параметры API.
Интеграция с InSales
Внешний способ оплаты
В админке InSales создали способ оплаты "Оплата через СБП". Это внешний способ — платеж обрабатывается не через встроенные модули InSales.
Условия показа кнопки
Кнопка "Перейти к оплате" показывается только при статусе заказа "Ожидает оплату". Если заказ уже оплачен или отменен — кнопки нет.
Сохранение данных платежа
После генерации ссылки система сохраняет в заказе InSales:
- Номер транзакции (PaymentId)
- URL для оплаты
- Время создания ссылки
Таймер жизни ссылки
Ссылка на оплату живет 20 часов. По истечении времени система автоматически генерирует новую.
Это нужно, чтобы избежать ошибок: если покупатель попытается оплатить по старой ссылке через несколько дней, система создаст актуальную.
UX/UI решения
Кнопка оплаты
Кнопка появляется только при нужном статусе. Покупатель не видит лишних вариантов — только "Оплатить через СБП".
Уведомление после оплаты
После оплаты показывается всплывающее окно: "Спасибо за оплату! Ваш заказ принят в работу."
Автоматическая проверка статуса
При загрузке страницы заказа система проверяет статус платежа через API. Если покупатель оплатил, но не вернулся на сайт — статус все равно обновится.
Повторное использование ссылки
Если покупатель нажимает кнопку повторно, система проверяет: есть ли уже созданная ссылка и не истекла ли она. Если ссылка актуальна — используется сохраненная.
Это исключает ошибки дублирования платежей в системе Т-Банка.
Безопасность
- Все операции с API выполняются на сервере
- В коде страницы нет ключей или паролей
- Токены генерируются на стороне backend
- Проверка подписи запросов от Т-Банка
- Защита от повторной отправки платежей
Технические детали
API Т-Банка
Используем два метода API:
/init— создание платежа, получение PaymentId/getQr— генерация QR-кода и ссылки на оплату
Обработка статусов
Т-Банк отправляет уведомления о статусах платежа (webhook). Сервер принимает эти уведомления и обновляет статус заказа в InSales.
Статусы: NEW (создан), CONFIRMING (идет оплата), CONFIRMED (оплачен), REJECTED (отклонен).
Сохранение в InSales
Данные платежа сохраняются в дополнительных полях заказа через API InSales. Это позволяет менеджерам видеть информацию о транзакции в админке.
Комментарий разработчика
«Клиент хотел обойтись без внешнего сервиса. Но в процессе тестирования стало понятно, что полноценная реализация с контролем статуса, безопасной генерацией токенов и обработкой откатов требует серверной логики. Нашли компромиссное решение, совместимое с InSales, которое позволяет использовать СБП и масштабировать функционал в будущем.»
Результат
- Оплата по СБП работает напрямую из карточки заказа
- Ссылка на оплату работает в браузере, почте, мессенджерах
- Контроль жизни ссылки — автоматическое обновление через 20 часов
- Покупатель видит только одну кнопку — "Оплатить через СБП"
- Статус заказа обновляется автоматически после оплаты
- Защита от ошибок дублирования и устаревших ссылок
- Безопасное хранение API-ключей на сервере
Похожие кейсы
- Доработка платежной формы Яндекс.Кассы на Shopify
- Интеграция InSales с международной системой Doku.com
- Интеграция Сбер Pay QR и InSales
- Интеграция Сбербанк Кредит и InSales
- Интеграция Тинькофф Кредит и InSales
- Интеграция эквайринга InvoiceBox для micro-mobility.ru