Программирование

СБП QR-код: генерация для оплаты в CRM без редиректа

Как сгенерировать СБП QR-код и платежную ссылку в CRM через API банков (Точка, Raiffeisen) или НСПК. Интеграция без редиректа: примеры запросов, типы QR, чеклист для бизнеса. Получите payload и image напрямую.

Как сгенерировать QR‑код для оплаты через СБП в собственной CRM? Нужно получить платежную ссылку от мерчанта, чтобы отображать QR‑код на дисплее покупателя. Я изучил API Юкассы, Робокассы и Тинькофф, но они требуют перенаправления на их сайт или открытие отдельного расчетного счета. Есть ли агрегаторы мерчантов, которые позволяют напрямую получать ссылку для СБП, либо можно ли это сделать через НСПК?

Да — в собственной CRM реально сгенерировать сбп qr код и сразу получить платежную ссылку сбп (payload), чтобы показывать QR‑изображение на дисплее покупателя без редиректа. Для этого обычно интегрируются с банком/эквайром или с PSP, который в ответе API возвращает payload и image (пример — Точка, Raiffeisen, MapCard, PayKeeper); прямой доступ через НСПК возможен, но требует регистрации ТСП и участия банка. Ниже — пошагово: варианты, пример запросов, что проверять при интеграции сбп.


Содержание


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

Схема проста и предсказуема: вы создаёте заказ в CRM → делаете серверный запрос к API банка/PSP/НСПК на формирование QR/ссылки → в ответ получаете payload (платежную ссылку вида типа https://qr.nspk.ru/…), идентификатор и изображение (base64 или URL) → показываете QR на дисплее покупателя → клиент сканирует в мобильном банке и подтверждает платёж. Платёж подтверждается почти мгновенно, а провайдер сообщает результат через webhook или через endpoint для опроса статуса. Подробно о вариантах прямой генерации через API и маршрутах без редиректа — в обзоре по интеграции НСПК и примерах банков: https://habr.com/ru/companies/nspk/articles/586876/ и https://sbp.nspk.ru/api/.


Генерация СБП QR‑кода в CRM

Краткий план действий (реально применимый):

  • Выберите путь интеграции: напрямую с банком/эквайром или через PSP, который возвращает payload (без редиректа). Примеры банков/PSP, дающих прямой payload: Точка, Raiffeisen, MapCard, PayKeeper — их документация показывает именно такой сценарий (payload + image) для отображения в вашей CRM без перенаправления клиента: https://developers.tochka.com/docs/tochka-api/opisanie-metodov/sbp-sistema-bystryh-platezhej, https://pay.raif.ru/doc/sbp.html, https://doc.mapcard.pro/current/queries/qr-generate-formirovanie-qr-koda-sbp, https://docs.paykeeper.ru/vozmozhnosti-i-primery-ispolzovaniya/generatsiya-qr-koda/.

  • Зарегистрируйте мерчанта/ТСП у выбранного партнёра. Если идти “чисто через НСПК” — потребуется регистрация ТСП в реестре НСПК/взаимодействие через банк-партнёр (см. статью о C2B и регистрациях ТСП на Хабре).

  • Реализуйте серверный вызов: создаёте order у провайдера, передаёте сумму, валюту, номер заказа, реквизиты счёта мерчанта и тип QR (dynamic/static/cash-register), получаете qrcId/id, payload и image/url.

Важное о параметрах (вариации между провайдерами)

  • Формат amount: у некоторых API — сумма в копейках (например, MapCard), у других — в рублях с копейками. Всегда сверяйтесь с документацией провайдера.
  • Поля: в ответе обычно есть payload (прямая ссылка), image или url для картинки QR, а также идентификатор запроса/заказа для проверки статуса и вебхуков (см. примеры в документации Raiffeisen и Точки).

Пример обобщённого запроса (псевдо‑пример, адаптируйте под API выбранного провайдера):

bash
curl -X POST "https://pay.raif.ru/api/sbp/v1/qrs" \
 -H "Content-Type: application/json" \
 -H "Authorization: Bearer <YOUR_TOKEN>" \
 -d '{
 "qrType": "QRVariable", # или "dynamic"/"static" в других провайдерах
 "account": "40817...012",
 "amount": 12500, # провайдеры по-разному: 12500 = 125.00₽ или 12500 копеек
 "currency": "RUB",
 "order": {"id": "order-123", "description": "Оплата заказа #123"},
 "paymentDetails": {"ttl": 900}
 }'

Если провайдер возвращает только payload (ссылку), вы можете сгенерировать изображение QR в CRM самостоятельно (js‑библиотека qrcode, серверный python qrcode и т.д.).


Платежная ссылка СБП и что возвращают API

Что обычно приходит в ответе API:

  • payload — прямая ссылка СБП (чаще всего вида https://qr.nspk.ru/…), она открывает пользовательское банковское приложение с предзаполненными реквизитами.
  • image / url — уже готовое изображение QR (url или base64) для отображения на дисплее.
  • id / qrcId / mapOrderId — внутренний идентификатор для отслеживания и опроса статуса.
  • Дополнительно: ttl, поле типа QR, описание для клиента.

Примеры из документации:

Небольшой лайфхак: если хотите NFC‑чтение QR‑ссылки, у некоторых провайдеров (Raiffeisen в примере) payload можно подготовить с префиксом для web‑NFC — см. их документацию (подробности у провайдера).


Варианты интеграции: банк, агрегатор и НСПК — плюсы и минусы

  1. Интеграция через банк / эквайр (рекомендуемый путь для без‑редиректной работы)
  • Плюсы: банк прямо формирует payload и часто возвращает image; минимальные задержки; вы показываете QR в своей CRM без переходов.
  • Минусы: нужно коммерческое соглашение с банком, возможны тарифы; иногда требуется расчетный счёт.

Примеры: Точка (bank/neo‑bank), Raiffeisen — их API поддерживают генерацию QR и возврат payload/image: https://developers.tochka.com/, https://pay.raif.ru/doc/sbp.html.

  1. Интеграция через PSP/агрегатор
  • Плюсы: быстрее подключение, иногда проще документооборот.
  • Минусы: многие агрегаторы (включая YooKassa, Robokassa) по умолчанию направляют клиента на свою страницу или требуют отдельный расчётный счёт/подмерчант; но есть PSP, которые дают прямой payload в API (см. MapCard, PayKeeper).
  • По запросу можно у агрегатора уточнить, возвращают ли они payload и image, или только ссылку на свою страницу. Документация PayKeeper и MapCard показывает сценарии с payload и image: https://docs.paykeeper.ru/, https://doc.mapcard.pro/.
  1. Прямая интеграция с НСПК
  • Теоретически НСПК предоставляет API для создания ссылок/QR, и это самый “чистый” вариант без посредников. На практике доступ к API НСПК — через регистрацию ТСП и взаимодействие с НСПК/банком‑эквайром; простого публичного “ключа” для любителей нет. См. обзор C2B и работу с ТСП: https://habr.com/ru/companies/nspk/articles/586876/ и https://sbp.nspk.ru/api/.
  • Минусы: бюрократия и требования к юридическим данным, обычно нужен банк‑партнёр.

Вывод: если не хотите редирект — ищите банк или PSP, который в API возвращает payload и image; если хотите абсолютный контроль и отсутствие посредников — обсуждайте с банком или готовьтесь к регистрации ТСП у НСПК.


Техническая реализация: пример запроса, рендер QR и проверка статуса

  1. Генерация QR (сервер)
  • Всегда делайте запросы с сервера (без секретов в клиенте).
  • Храните secretKey/token в защищённом хранилище, используйте TLS и ротацию ключей.
  • Пример (обобщённый cURL для Raiffeisen — см. их документ): https://pay.raif.ru/doc/sbp.html
  1. Рендер на дисплее покупателя
  • Если API вернул image (base64 или URL) — просто вставляете .
  • Если API вернул только payload — генерируйте QR в CRM (js‑библиотеки: qrcode, QRCode.js) и выводите на экран.

Пример JS (Node/browser) для генерации из payload:

js
// пример с библиотекой 'qrcode'
import QRCode from "qrcode";

const payload = "https://qr.nspk.ru/...";
QRCode.toDataURL(payload)
 .then(url => {
 document.getElementById('qr').src = url; // <img id="qr">
 })
 .catch(err => console.error(err));
  1. Проверка статуса платежа
  • Предпочтительней webhook: провайдер шлёт вам уведомление об успешной оплате.
  • Если webhook нет — используйте polling GET /api/sbp/v1/orders/ или эквивалент у провайдера. В документации Raiffeisen есть пример получения статуса, где status.value может быть SUCCESS или FAILED: https://pay.raif.ru/doc/sbp.html.
  • Логика в CRM: при SUCCESS — пометить заказ оплачен, пробить чек/фискализацию (если требуется), отправить уведомление клиенту.
  1. Безопасность вебхуков
  • Проверяйте подпись/хедеры от провайдера (если есть).
  • Подтверждайте id заказа и сумму — чтобы избежать подделки уведомлений.

Типы QR: статический, динамический, кассовый — возвраты и ограничения

  • Статический QR: постоянный код привязан к реквизитам мерчанта, сумма вводится пользователем. Удобен для чеков на стойке, но не фиксирует сумму заказа.
  • Динамический QR (одноразовый): формируется под конкретный заказ с фиксированной суммой; чаще всего используется в e‑commerce/кассах.
  • Кассовый QR (кассовые коды): активируются перед каждой оплатой и требуют учёта фискальных требований — их поведение зависит от интеграции с ККТ.

Особенности возврата:

  • Не все типы QR напрямую поддерживают возврат через СБП. В документации Точки прямо указано, что статические и кассовые QR‑коды не поддерживают возврат через СБП — возврат возможен через интернет‑банк или в рамках процессов эквайринга: https://developers.tochka.com/docs/tochka-api/opisanie-metodov/sbp-sistema-bystryh-platezhej.
  • Динамические QR, как правило, привязаны к конкретному платежу, работу с возвратами лучше согласовать с провайдером/банком.

Практический чеклист для внедрения в CRM

  • Решите: банк/эквайр или PSP (проверьте, возвращает ли API payload + image).
  • Зарегистрируйте мерчанта/ТСП у провайдера или уточните у банка‑партнёра возможность работы через НСПК.
  • Получите credentials (clientId/secret/token) и права (у некоторых API нужны специальные разрешения, например у Точки — EditSBPData/ReadSBPData).
  • Реализуйте серверный endpoint для создания QR и сохранения mapOrderId/qrcId.
  • Реализуйте отображение QR на дисплее (image от API или сгенерированный из payload).
  • Настройте webhook + проверку подписи; если нет — настройте polling по /orders/.
  • Пропишите обработку краевых сценариев: таймаут, отмена, дубли, возврат.
  • Учтите фискализацию (ККТ) — при необходимости интегрируйтесь с оператором фискальных данных.
  • Протестируйте на тестовом окружении провайдера (в большинстве API есть тестовые сценарии).

Источники


Заключение

Коротко: для отображения сбп qr код в вашей CRM без редиректа лучше интегрироваться с банком или PSP, который в API возвращает платежную ссылку (payload) и/или изображение QR — примеры и практические инструкции есть у Точки, Raiffeisen, MapCard и PayKeeper. Прямой путь через НСПК возможен, но требует регистрации ТСП и участия банка‑партнёра. Начните с выбора провайдера, проверьте в их документации наличие поля payload и image, затем реализуйте серверную генерацию, рендер QR и проверку статуса через webhook или опрос — и сможете показывать QR на дисплее покупателя без перехода на сайты посредников.

Авторы
Проверено модерацией
Модерация
СБП QR-код: генерация для оплаты в CRM без редиректа