TGViewer
analyst_exe | инженерное мышление в IT analyst_exe | инженерное мышление в IT @analyst_exe · 511 subscribers
Post #563 359
Как работает оплата по QR-коду (СБП)

"Оплатите, пожалуйста, по QR-коду" – слышу это на кассе каждый день.

Вчера задумался: а как это вообще работает изнутри?

Когда я впервые описывал интеграцию с НСПК для оплаты по QR, думал: "Ну что там сложного? Генерируем код, показываем, деньги пришли". Рас рас и готово.

Но оказалось, что там куча нюансов.

(Кстати, если интересно, почему кассиры так просят оплатить по QR – напишите «почему», расскажу. А если знаете – поделитесь в комментах)

Два типа QR-кодов

🔸 Статический – один на всю точку, печатается и вывешивается у кассы. Раньше покупатель сам вводил сумму (фрод). Сейчас QR ведёт на веб-страницу, которая подтягивает сумму от кассы.
🔸 Динамический – генерируется для каждой транзакции, сумма уже в коде.

Как касса узнаёт, что оплата прошла?

Логично предположить: покупатель оплатил → банк отправляет уведомление на кассу (webhook) → "Оплачено ✓"

Но нет.

Касса сама спрашивает банк каждые 2-3 секунды:
"Заказ [OrderID] оплачен?"
→ Нет → пауза → снова спрашивает
→ Да → "Оплачено ✓"

Это называется polling (опрос).

Почему?
Кассе нельзя "позвонить" из интернета: она за роутером, у неё нет постоянного адреса. Или работает через 4G-модем.

Зато касса сама может позвонить в банк – это работает откуда угодно.

Как работает динамический QR:

1. Кассир пробивает товар, например, на 350 ₽ → касса генерирует уникальный OrderID
2. Касса через API банка запрашивает создание QR на 350 ₽ → показывает QR на экране
3. Касса начинает polling: "Оплатили OrderID?"
4. Покупатель сканирует → в приложении сумма уже заполнена → оплачивает
5. При очередном запросе от кассы "Оплатили OrderID?" банк отвечает "Да" → касса печатает чек

[сиквенс-диаграммы в комменте под постом]

Выводы для аналитика

🔸Уточняйте тип QR – статический или динамический (разные flow)
🔸Если устройство за NAT/роутером (у него не статический IP адрес, оно недоступно из внешней сети) – polling, не webhook
🔸 Проверяйте уникальность OrderID – формат типа ORD-{TerminalID}-{Timestamp}
🔸 Думайте о коллизиях – что если на точке несколько касс и несколько активных чеков? При статическом QR это проблема
🔸 Крайние случаи – что если интернет пропал? Кто отменяет транзакцию?

Именно в таких деталях кроется разница между "описал на коленке" и "продумал как надо".

А вы сталкивались с описанием платёжных интеграций?

Пишите в комментах 👇

@analyst_exe
  • ❤ 9
  • 🔥 8
More from @analyst_exe
  1. Sep 21, 2026Ну это не дело, сами из резюме вытащить не могут? @analyst_exe
  2. Sep 20, 202614 моделей рисуют BPMN. Кто рабочая лошадь, а кто заставит зайца ждать? Взял историю про П…
  3. Sep 20, 2026Есть идеи, чем я таким сижу занимаюсь? Пишите варианты в комментариях) @analyst_exe
  4. Sep 19, 2026В субботу отдыхаем честно украденным мемом @analyst_exe
  5. Sep 16, 2026Господа, расскажите в комментариях, что происходит с рынком труда нынче? Кто смотрел? Кто…
  6. Sep 14, 2026Все ясно, вам нужны только мемы Их есть у меня @analyst_exe
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →