СБП QR-код: генерация для оплаты в CRM без редиректа
Как сгенерировать СБП QR-код и платежную ссылку в CRM через API банков (Точка, Raiffeisen) или НСПК. Интеграция без редиректа: примеры запросов, типы QR, чеклист для бизнеса. Получите payload и image напрямую.
Как сгенерировать QR‑код для оплаты через СБП в собственной CRM? Нужно получить платежную ссылку от мерчанта, чтобы отображать QR‑код на дисплее покупателя. Я изучил API Юкассы, Робокассы и Тинькофф, но они требуют перенаправления на их сайт или открытие отдельного расчетного счета. Есть ли агрегаторы мерчантов, которые позволяют напрямую получать ссылку для СБП, либо можно ли это сделать через НСПК?
Да — в собственной CRM реально сгенерировать сбп qr код и сразу получить платежную ссылку сбп (payload), чтобы показывать QR‑изображение на дисплее покупателя без редиректа. Для этого обычно интегрируются с банком/эквайром или с PSP, который в ответе API возвращает payload и image (пример — Точка, Raiffeisen, MapCard, PayKeeper); прямой доступ через НСПК возможен, но требует регистрации ТСП и участия банка. Ниже — пошагово: варианты, пример запросов, что проверять при интеграции сбп.
Содержание
- Как это работает: кратко
- Генерация СБП QR‑кода в CRM
- Платежная ссылка СБП: что возвращают API и как её использовать
- Варианты интеграции: банк, агрегатор и НСПК — плюсы и минусы
- Техническая реализация: пример запроса, рендер QR и проверка статуса
- Типы QR: статический, динамический, кассовый — возвраты и ограничения
- Практический чеклист для внедрения в CRM
- Источники
- Заключение
Как это работает: кратко
Схема проста и предсказуема: вы создаёте заказ в 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 выбранного провайдера):
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, описание для клиента.
Примеры из документации:
- Точка.API показывает, что при создании QR вы получаете qrcId, payload и image и можете отображать QR в CRM без редиректа: https://developers.tochka.com/docs/tochka-api/opisanie-metodov/sbp-sistema-bystryh-platezhej.
- Raiffeisen возвращает id, payload и url на изображение; их payload — прямая ссылка СБП, которую клиент сканирует и оплачивает в мобильном банке (в документации есть примеры и разбор статусов): https://pay.raif.ru/doc/sbp.html.
- MapCard/other PSP дают схожие поля в ответе и mapOrderId для отслеживания: https://doc.mapcard.pro/current/queries/qr-generate-formirovanie-qr-koda-sbp.
Небольшой лайфхак: если хотите NFC‑чтение QR‑ссылки, у некоторых провайдеров (Raiffeisen в примере) payload можно подготовить с префиксом для web‑NFC — см. их документацию (подробности у провайдера).
Варианты интеграции: банк, агрегатор и НСПК — плюсы и минусы
- Интеграция через банк / эквайр (рекомендуемый путь для без‑редиректной работы)
- Плюсы: банк прямо формирует payload и часто возвращает image; минимальные задержки; вы показываете QR в своей CRM без переходов.
- Минусы: нужно коммерческое соглашение с банком, возможны тарифы; иногда требуется расчетный счёт.
Примеры: Точка (bank/neo‑bank), Raiffeisen — их API поддерживают генерацию QR и возврат payload/image: https://developers.tochka.com/, https://pay.raif.ru/doc/sbp.html.
- Интеграция через PSP/агрегатор
- Плюсы: быстрее подключение, иногда проще документооборот.
- Минусы: многие агрегаторы (включая YooKassa, Robokassa) по умолчанию направляют клиента на свою страницу или требуют отдельный расчётный счёт/подмерчант; но есть PSP, которые дают прямой payload в API (см. MapCard, PayKeeper).
- По запросу можно у агрегатора уточнить, возвращают ли они payload и image, или только ссылку на свою страницу. Документация PayKeeper и MapCard показывает сценарии с payload и image: https://docs.paykeeper.ru/, https://doc.mapcard.pro/.
- Прямая интеграция с НСПК
- Теоретически НСПК предоставляет API для создания ссылок/QR, и это самый “чистый” вариант без посредников. На практике доступ к API НСПК — через регистрацию ТСП и взаимодействие с НСПК/банком‑эквайром; простого публичного “ключа” для любителей нет. См. обзор C2B и работу с ТСП: https://habr.com/ru/companies/nspk/articles/586876/ и https://sbp.nspk.ru/api/.
- Минусы: бюрократия и требования к юридическим данным, обычно нужен банк‑партнёр.
Вывод: если не хотите редирект — ищите банк или PSP, который в API возвращает payload и image; если хотите абсолютный контроль и отсутствие посредников — обсуждайте с банком или готовьтесь к регистрации ТСП у НСПК.
Техническая реализация: пример запроса, рендер QR и проверка статуса
- Генерация QR (сервер)
- Всегда делайте запросы с сервера (без секретов в клиенте).
- Храните secretKey/token в защищённом хранилище, используйте TLS и ротацию ключей.
- Пример (обобщённый cURL для Raiffeisen — см. их документ): https://pay.raif.ru/doc/sbp.html
- Рендер на дисплее покупателя
- Если API вернул image (base64 или URL) — просто вставляете
.
- Если API вернул только payload — генерируйте QR в CRM (js‑библиотеки: qrcode, QRCode.js) и выводите на экран.
Пример JS (Node/browser) для генерации из payload:
// пример с библиотекой '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));
- Проверка статуса платежа
- Предпочтительней webhook: провайдер шлёт вам уведомление об успешной оплате.
- Если webhook нет — используйте polling GET /api/sbp/v1/orders/
или эквивалент у провайдера. В документации Raiffeisen есть пример получения статуса, где status.value может быть SUCCESS или FAILED: https://pay.raif.ru/doc/sbp.html. - Логика в CRM: при SUCCESS — пометить заказ оплачен, пробить чек/фискализацию (если требуется), отправить уведомление клиенту.
- Безопасность вебхуков
- Проверяйте подпись/хедеры от провайдера (если есть).
- Подтверждайте 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 есть тестовые сценарии).
Источники
- Система быстрых платежей (СБП) — Точка.API
- Raiffeisenbank e‑commerce API — SBP
- СБП C2B. Снаружи и изнутри — Хабр (о НСПК и ТСП)
- generateQR — Формирование QR‑кода СБП (theMAP / MapCard)
- СБП API для Агентов ТСП — NSPK
- Генерация QR‑кода — PayKeeper (интеграция)
- Как создать QR‑код для оплаты — Yandex.Pay (обзор)
- STQR — генератор QR для СБП (пример сервиса)
- Примеры API по генерации QR на sbqr.ru
- Sber API — PlatiQR (демонстрация возможностей)
Заключение
Коротко: для отображения сбп qr код в вашей CRM без редиректа лучше интегрироваться с банком или PSP, который в API возвращает платежную ссылку (payload) и/или изображение QR — примеры и практические инструкции есть у Точки, Raiffeisen, MapCard и PayKeeper. Прямой путь через НСПК возможен, но требует регистрации ТСП и участия банка‑партнёра. Начните с выбора провайдера, проверьте в их документации наличие поля payload и image, затем реализуйте серверную генерацию, рендер QR и проверку статуса через webhook или опрос — и сможете показывать QR на дисплее покупателя без перехода на сайты посредников.