Как работает оплата по QR-коду (НСПК/СБП)
"Оплатите, пожалуйста, по QR-коду" — слышу это на кассе каждый день.
Вчера задумался: а как это вообще работает изнутри?
Когда я впервые описывал интеграцию с НСПК для оплаты по QR, думал: "Ну что там сложного? Генерируем код, показываем, деньги пришли." Рас рас, и готово.
Но оказалось там два разных сценария, касса не получает уведомления от банка (а сама его спрашивает!), и куча нюансов.
(Кстати, если интересно, почему кассиры так просят оплатить по QR — напишите «почему», расскажу. А если знаете - пишите сами)
Два типа QR-кодов
🔸 Статический — один на всю точку, печатается на табличке. Раньше покупатель сам вводил сумму (фрод). Сейчас QR ведёт на веб-страницу, которая подтягивает сумму от кассы. 🔸 Динамический — генерируется для каждой транзакции, сумма уже в коде.
Как касса узнаёт, что оплатили?
Обычно думаешь: покупатель оплатил → банк отправляет уведомление на кассу (webhook) → "Оплачено ✓"
Но нет.
Касса сама спрашивает банк каждые 2-3 секунды: "Оплатили OrderID=ORD-001?" → Нет → пауза → снова спрашивает → Да → "Оплачено ✓"
Это называется polling (опрос).
Почему? Кассе нельзя "позвонить" из интернета — она за роутером, у неё нет постоянного адреса. Или работает через 4G-модем.
Зато касса сама может позвонить в банк — это работает откуда угодно.
Как работает (динамический QR):
- Кассир пробивает товар, 350₽ → генерирует уникальный OrderID
- Запрашивает у банка API создание QR → показывает на экране
- Покупатель сканирует → в приложении сумма уже заполнена → подтверждает
- Касса начинает polling: "Оплатили OrderID?"
- Банк отвечает "Да" → касса печатает чек
[Диаграмма]
Выводы для аналитика
🔸 Уточняйте тип QR — статический или динамический (разные flow) 🔸 Если устройство за NAT/роутером (у него не статический IP адрес, так просто до него не дотянуться) — polling, не webhook 🔸 Проверяйте уникальность OrderID — формат типа ORD-{TerminalID}-{Timestamp} 🔸 Думайте о коллизиях — что если на точке несколько касс и несколько активных чеков? При статическом QR это проблема 🔸 Крайние случаи — что если интернет пропал? Кто отменяет транзакцию?
Да не суть, но именно эти детали делают разницу между "описал на коленке" и "продумал как надо".
А вы сталкивались с описанием платёжных интеграций?
Пишите в комментах 👇
@analyst_exe