В СБП используется формат двухмерного кода QR Code (ISO/IEC 18 004--2015).
Payload QR-кода может быть представлен в двух вариантах:
Короткий вариант Payload: https://HOST/QR_ID
Длинный вариант Payload: https://HOST/QR_ID?type=QR_TYPE&bank=MEMBER_ID&sum=SUM&cur=CUR&crc=CRC
Описание параметров URL-based payload:
| Параметр | Описание | required | Формат |
|---|---|---|---|
| HOST | qr.nspk.ru — для QR_TYPE = 01 и 02 sub.nspk.ru — для QR_TYPE = 03 | y | String |
| QR_ID | Идентификатор зарегистрированного QR кода в СБП | y | String 32 символа |
| QR_TYPE | Тип QR кода: 01 — QR Static (QR наклейка); 02 — QR Dynamic (QR на кассе); 03 — QR-Subscription (Оформление привязки счета). | y | String 2 цифры |
| MEMBER_ID | Идентификатор Банка Получателя (ТСП) (Member_ID) | y | String 12 символов |
| SUM | Сумма в копейках | y (если QR_TYPE = 02); Отсутствует, если QR_TYPE = 03 | String до 12 цифр |
| CUR | Валюта операции | y (если присутствует SUM) | String 3 символа |
| CRC | Значение контрольной суммы | y | String 4 символа |
Полный перечень кодов представлен на сайте НСПК. Данная спецификация не описывает всего перечня кодов ответов т. к. в случае исключительных ситуаций системой возможна генерация собственных кодов. Не описанные в документе коды следует обрабатывать как техническую (системную) ошибку.
| ErrorCode | message |
|---|---|
| «-999» | Прочее сообщение FSCryptoProxy |
| «-71» | Неверные данные Basic авторизации запроса. Не прошла проверка авторизации запроса от fsCryptoProxy → GW |
| «-9» | Система перегружена. Повторите запрос через несколько секунд. Очередь: %1 |
| «-8» | Запрос отклонен. '%1' превышено ограничение на размер очереди. Ограничение: %2 Очередь: %3 |
| «-7» | Неверная подпись сообщения. Не прошла проверка связки запроса от fsCryptoProxy → GW, закрытый ключ, указанный в настройках fsCryptoProxy (proxyAlias) не соответствует открытому ключу, указанному в GW, продукции у БС в настройке PublicKeyFile |
| «-6» | Не передана подпись сообщения в параметре Authorization заголовка |
| «-5» | Тип запроса %1 не поддерживается |
| «-4» | При получении данных возникли проблемы: %1 |
| «-3» | При создании потока JSON не образовался потоковый объект |
| «-2» | Возникли проблемы при преобразовании объекта в JSON %1 |
| «-1» | Возникли проблемы при обработке запроса %1 |
| «0» | «OK» |
| «1» | Внутренняя ошибка %1 |
| «2» | Терминал %1 не обнаружен |
| «3» | Не заполнены данные запроса %1 |
| «301» | Некорректно заполнены данные запроса %1 |
| «4» | Не передан qrcId или payrrn |
| «5» | Не получены данные от СПБ |
| «8» | Таймаут ответа, попробуйте позже |
| «9» | Ошибка идентификации, попробуйте позже |
| «10» | Не передан реквизит command |
| «11» | Данная команда не поддерживается |
| «12» | «Не найдены данные для возврата» |
| «13» | Не найден успешный ответ на вызов GetQRCreversalData по причине: %1 |
| «14» | Повторное открытие смены невозможно. Смена уже открыта. |
| «15» | Закрытие смены невозможно. Смена не открыта |
| «16» | Не передан TermNo |
| «17» | Не удалось найти QR по payrrn |
| «18» | Платеж не найден в запросах B07%1 |
| «19» | Платеж не найден в запросах B08%1 |
| «20» | Получен отказ на запрос возврата. Статус %1%2%3 |
| «21» | Не удалось получить получателя перевода |
| «22» | payrrn=%1 в запросе не соответствует данным qrcId=%2 у которого payrrn=%3 |
| «23» | Возврат невозможен для указанных параметров. Для payrrn=%1 соответствует trxId=%2, а в запросе получен %3 |
| «24» | Возврат невозможен для указанных параметров. Для qrcId=%1 соответствует trxId=%2, а в запросе получен %3 |
| «25» | «Терминал %1 заблокирован |
| «26» | «Ошибка идентификации» |
| «27» | «Невозможно выполнить возврат по данному Терминалу, т. к. счет зачисления не равен счету списания» |
| «28» | Запрос QR-кода не удался, не был получен Идентификатор QR-кода |
| «29» | Возврат невозможен. Для qrcId=%1 не удалось найти успешный ответ на запрос GetQRCstatus |
| «30» | Отсутствуют данные в переданных параметрах |
| «31» | Не удалось определить параметры: legalid или Для legalid не удалось найти данные в спр. счетов или в спр. клиентов |
| «32» | Отсутствуют данные получателя |
| «33» | Отсутствуют данные отправителя |
| «34» | Значения параметров запроса не совпадают с данными предыдущего шага |
| «35» | Не заполнен обязательный параметр REF |
| «40» | Возврат невозможен. Для payrrn=%1 не удалось найти успешный ответ на запрос GetQRCstatus |
| «41» | При активации кассовой ссылки, не удалось получить paramsId |
| «42» | Счет %1 не зарегистрирован у клиента. Изменение невозможно. |
| «43» | Данные об оплате еще не известны. По qrcId не получено уведомление (Notification) от НСПК |
| «44» | Кассовая ссылка зарегистрирована на устройстве #'%1' и может быть использована только на этом устройстве. |
| «45» | Общая Ошибка поиска архивной операции C2B |
| «46» | Ошибка поиска архивной операции C2B, по причине: %1 |
| «47» | Для выяснения статуса возврата необходимо передать один из параметров запроса: messageID, trxId или opkcRefundRequestId |
| «48» | Возврат с messageID '%1' на устройстве #'%2' не обнаружен |
| «49» | По возврату с messageID '%1' не обнаружен Идентификатор Операции СБП B2C по сценарию Возврат по Операции СБП C2B |
| «50» | Идентификаторы Операции СБП B2C по сценарию Возврат по Операции СБП C2B переданный в запросе '%1' отличается от данных возврата '%2' полученного по messageID '%3' |
| «51» | Возврат по Идентификаторы Операции СБП B2C '%1' не обнаружен |
| «52» | Если передан реквизит opkcRefundRequestId запроса, то для выяснения статуса возврата необходимо также передать один из параметров запроса payrrn или originalTrxId |
| «53» | По данным payrrn '%1' не удалось определить Идентификатор исходной Операции СБП C2B |
| «54» | Не передан параметр LegalId |
| «55» | Не передан параметр quantity |
| «67» | ТСП '%1' не обнаружено с справочнике системы |
| «68» | Выплата по ТСП '%1' для устройства '%2' — запрещена |
| «101» | Тип запроса command='%1' не поддерживается |
| «121» | Возврат не может быть осуществлен, т. к. операция оплаты не имеет финального статуса |
| «201» | Получен отказ на запрос возврата. «Статус %1, Недостаточно средств на счете» |
| «1001» | «Сервис временно недоступен» |
| «RQ00000» | Запрос обработан успешно. |
| «RQ00030» | Согласие на выполнение платежа. |
| «RQ00031» | Ожидание решения по возврату от Банка Плательщика. |
| «RQ02034» | Некорректное значение code. |
| «RQ03001» | Ошибка валидации. Неверный формат запроса. |
| «RQ05001» | Значение agentId отсутствует в ОПКЦ СБП (Агент с указанным идентификатором не найден). |
| «RQ05002» | Значение memberId отсутствует в ОПКЦ СБП (участник с указанным идентификатором не найден). |
| «RQ05003» | Значение LegalId отсутствует в ОПКЦ СБП (юридическое лицо с указанным идентификатором не найдено). |
| «RQ05004» | Счет юридического лица не найден. |
| «RQ05005» | Значение merchantId отсутствует в ОПКЦ СБП (ТСП с указанным идентификатором не зарегистрировано в СБП). |
| «RQ05006» | Некорректное значение currency (код валюты). |
| «RQ05007» | Неверная версия шаблона Платежной или Информационной ссылки СБП (неверная версия шаблона QRC). |
| «RQ05008» | Неверный тип Платежной или Информационной ссылки СБП (неверный тип QRC). |
| «RQ05009» | Значение amount меньше минимально допустимого |
| «RQ05010» | Значение amount больше максимально допустимого |
| «RQ05011» | amount и currency должны одновременно присутствовать или одновременно отсутствовать при qrcType = 01 (QR-Static) |
| «RQ05012» | Отсутствует currency при qrcType = 02 (QR-Dynamic) |
| «RQ05013» | Отсутствует amount при qrcType = 02 (QR-Dynamic) |
| «RQ05014» | Значение qrcId не найдено |
| «RQ05015» | Превышено допустимое значение элементов в запросе |
| «RQ05016» | Некорректный формат qrcId |
| «RQ05017» | Некорректный формат или отсутствует paymentPurpose |
| «RQ05018» | Некорректный формат subscriptionPurpose |
| «RQ05019» | Отсутствует amount при активации Кассовой ссылки СБП |
| «RQ05020» | Период использования динамической Платежной ссылки СБП в поле qrTtl выходит за допустимый диапазон |
| «RQ05021» | Некорректный формат subscriptionToken |
| «RQ05022» | Невозможно деактивировать Кассовую ссылку СБП |
| «RQ05023» | qrTtl для Кассовой ссылки СБП выходит за допустимый диапазон |
| «RQ05024» | Некорректный формат redirectUrl |
| «RQ05025» | Отказ в смене счета ЮЛ, ИП или самозанятого. Кассовая ссылка СБП не деактивирована |
| «RQ05026» | Кассовая ссылка с указанным идентификатором уже существует |
| «RQ05030» | Отказ Банка Плательщика. Плательщик отказался от привязки счета |
| «RQ05031» | Отказ Банка Плательщика. Привязка счета не найдена |
| «RQ05032» | Отказ Банка Плательщика в выполнении платежа |
| «RQ05033» | Отказ в повторном платеже |
| «RQ05034» | Сценарий не поддерживается Банком Плательщика |
| «RQ05035» | Истекло время ожидания решения Банка Плательщика |
| «RQ05036» | Дублирование идентификатора запроса, назначаемого ТСП или Агентом ТСП, — agentRefundRequestId |
| «RQ05037» | Предыдущий запрос на возврат по Операции СБП C2B еще не обработан |
| «RQ05038» | Параметры запроса отличаются от параметров исходной Операции СБП C2B |
| «RQ05039» | Не найдена исходная Операция СБП C2B |
| «RQ05040» | Отказ от Банка Плательщика. Сумма возврата превышает сумму исходной Операции СБП C2B |
| «RQ05041» | Запрос на возврат по операции C2B не найден |
| «RQ05042» | Некорректный формат или отсутствует amount |
| «RQ05043» | Некорректный формат или отсутствует takeTax |
| «RQ05044» | Некорректный формат или отсутствует totalTaxAmount |
| «RQ05045» | Некорректный формат uip |
| «RQ05046» | Неверный тип платежной ссылки |
| «RQ05047» | Запрос на возврат с указанным идентификатором не найден |
| «RQ05050» | Сценарии с привязкой счета для ЮЛ/ИП недоступны |
| «RQ05051» | Решение выполнения оплаты с привязанного счета от Банка Плательщика еще не получено |
| «RQ05052» | Распоряжение от Банка Плательщика не было получено в ожидаемое время |
| «RQ05053» | От Банка Плательщика было получено положительное решение об оплате с привязанного счета Плательщика |
| «RQ07999» | Техническая ошибка |
Ошибки по методу GetQRCd
| Код | Описание |
|---|---|
| -1 | Возникли проблемы при обработке запроса: <...> |
| 1 | Внутренняя ошибка <...> |
| 3 | Не заполнены данные: <...> |
| 8 | Таймаут ответа, попробуйте позже |
| 26 | Ошибка идентификации |
| 28 | Запрос QR-кода не удался, не был получен Идентификатор QR-кода |
| 301 | Некорректно заполнены данные данные: <...> |
| 100 | Ошибка во время выполнения SQL-запроса для поиска AccountDR для TermNo=<TermNo> |
| 101 | Ошибка во время выполнения SQL-запроса для проверки isUniQR для QrcId = <QrcId> |
| 999* | Неизвестная ошибка. Необходимо уточнить статус операции |
Ошибки по методу GetQRCstatus
| Код | Описание |
|---|---|
| -1 | Возникли проблемы при обработке запроса: <...> |
| 1 | Внутренняя ошибка <...> |
| 2 | Терминал <номер терминала> не обнаружен |
| 4 | Не передан qrcId или payrrn |
| 5 | Не получены данные от СПБ |
| 8 | Таймаут ответа, попробуйте позже |
| 9 | Ошибка идентификации, попробуйте позже |
| 16 | Не передан параметр TermNo |
| 18 | Платеж не найден в запросах B07,B23 <...> |
| 25 | Терминал <номер терминала> заблокирован |
| 999* | Неизвестная ошибка. Необходимо уточнить статус операции. |
Ошибки по методу GetQRCreversalData
| Код | Описание |
|---|---|
| -1 | Возникли проблемы при обработке запроса: <текст с более подробным описанием ошибки> |
| 1 | Внутренняя ошибка <текст с более подробным описанием ошибки> |
| 2 | Терминал <номер терминала> не обнаружен |
| 3 | Не заполнены данные: <текст с более подробным описанием ошибки> |
| 8 | Таймаут ответа, попробуйте позже |
| 12 | Не найдены данные для возврата |
| 16 | Не передан параметр TermNo |
| 20 | Получен отказ на запрос возврата. Статус <статус и при наличии код с текстом ошибки> |
| 21 | Не удалось получить получателя перевода |
| 22 | payrrn=<значение payrrn> в запросе не соответствует данным qrcId=<значение qrcId> у которого payrrn=<значение payrrn> |
| 23 | Возврат невозможен для указанных параметров. Для payrrn=<значение payrrn> соответствует trxId=<значение trxId>, а в запросе получен <значение trxId> |
| 24 | Возврат невозможен для указанных параметров. Для qrcId=<значение qrcId> соответствует trxId=<значение trxId>, а в запросе получен <значение trxId> |
| 25 | Терминал <номер терминала> заблокирован |
| 27 | Невозможно выполнить возврат по данному Терминалу, т.к. счёт зачисления не равен счёту списания |
| 29 | Возврат невозможен. Для qrcId=<значение qrcId> не удалось найти успешный ответ на запрос GetQRCstatus |
| 40 | Возврат невозможен. Для payrrn=<значение payrrn> не удалось найти успешный ответ на запрос GetQRCstatus |
| 1001 | Превышено количество повторных запросов возврата B2C |
Ошибки по методу QRCreversal
| Код | Описание |
|---|---|
| -1 | Возникли проблемы при обработке запроса: <текст с более подробным описанием ошибки> |
| 1 | Внутренняя ошибка <текст с более подробным описанием ошибки> |
| 2 | Терминал <номер терминала> не обнаружен |
| 3 | Не заполнены данные: <текст с более подробным описанием ошибки> |
| 8 | Таймаут ответа, попробуйте позже |
| 12 | Не найдены данные для возврата |
| 13 | Не найден успешный ответ на вызов GetQRCreversalData |
| 16 | Не передан параметр TermNo |
| 20 | Получен отказ на запрос возврата. Статус <статус и при наличии код с текстом ошибки> |
| 21 | Не удалось получить получателя перевода |
| 22 | payrrn=<значение payrrn> в запросе не соответствует данным qrcId=<значение qrcId> у которого payrrn=<значение payrrn> |
| 23 | Возврат невозможен для указанных параметров. Для payrrn=<значение payrrn> соответствует trxId=<значение trxId>, а в запросе получен <значение trxId> |
| 24 | Возврат невозможен для указанных параметров. Для qrcId=<значение qrcId> соответствует trxId=<значение trxId>, а в запросе получен <значение trxId> |
| 25 | Терминал <номер терминала> заблокирован |
| 27 | Невозможно выполнить возврат по данному Терминалу, т.к. счёт зачисления не равен счёту списания |
| 40 | Возврат невозможен. Для payrrn=<значение payrrn> не удалось найти успешный ответ на запрос GetQRCstatus |
| 201 | Получен отказ на запрос возврата. Статус <статус>, недостаточно средств на счёте |
| 999* | Неизвестная ошибка. Необходимо уточнить статус операции |
Ошибки по методу ActivateCashQRc
| Код | Описание |
|---|---|
| -1 | Возникли проблемы при обработке запроса: <текст с более подробным описанием ошибки> |
| 1 | Внутренняя ошибка <...> |
| 2 | Терминал <номер терминала> не обнаружен |
| 3 | Не заполнены данные: <...> |
| 8 | Таймаут ответа, попробуйте позже |
| 16 | Не передан параметр TermNo |
| 25 | Терминал <номер терминала> заблокирован |
| 28 | Запрос QR-кода не удался, не был получен Идентификатор QR-кода |
| 41 | При активации кассовой ссылки не удалось получить paramsId |
| 44 | Кассовая ссылка зарегистрирована на устройстве #'<номер терминала>' и может быть использована только на этом устройстве |
| 301 | Некорректно заполнены данные данные: <...> |
| 999* | Неизвестная ошибка. Необходимо уточнить статус операции |
Коды ответов, направляемые в callback-уведомлении по сценарию «Оплата с привязанного счёта» по методу «resolution /notification»
| ErrorCode | message |
|---|---|
| «RQ05031» | Отказ Банка Плательщика. Привязка счёта не найдена |
| «RQ05032» | Отказ Банка Плательщика в проведении платежа |
| «RQ05060» | Недостаточно денежных средств для проведения операции |
| «RQ05061» | Превышен лимит по сумме операций по СБП |
| «RQ05062» | Превышен лимит по количеству операций по СБП |
| «RQ05063» | Подозрение в мошенничестве |
| «RQ05064» | Выполнение операций в данной категории ТСП запрещено |
| «RQ05065» | Счёт заблокирован |
| «RQ05066» | Счёт закрыт |
| «RQ05067» | Выполнение операции запрещено по требованию законодательства |
Примечание: Применение кода ответа «RQ05032» допускается не более, чем в 20% от общего числа отказов со стороны Банка Плательщика при выполнении Сценария «Оплата с привязанного счёта».
«y» — «Yes» обязательное;
«o» — «Optional» (опционально);
«y/o» — «Условно обязательное» определяется условиями запроса.
| Нотация | Описание |
|---|---|
| a | Символы латинского алфавита (A–Z и a–z) с десятичными кодами из диапазонов [065-090] и [097-122] в кодировке UTF-8; Символы русского алфавита (А-Я и а-я) с десятичными кодами из диапазона [1040-1103] в кодировке UTF-8. |
| n | Цифры 0-9 с десятичными кодами из диапазона [048-057] в кодировке UTF-8. |
| an | Символы латинского алфавита (A–Z и a–z) с десятичными кодами из диапазонов [065-090] и [097-122] в кодировке UTF-8; Символы русского алфавита (А-Я и а-я) с десятичными кодами из диапазона [1040-1103] в кодировке UTF-8; Цифры 0-9 с десятичными кодами из диапазона [048-057] в кодировке UTF-8. |
| ans | Символы латинского алфавита (A–Z и a–z) с десятичными кодами из диапазонов [065-090] и [097-122] в кодировке UTF-8; Символы русского алфавита (А-Я и а-я) с десятичными кодами из диапазона [1040-1103] в кодировке UTF-8; Цифры 0-9 с десятичными кодами из диапазона [048-057] в кодировке UTF-8; Специальные символы с десятичными кодами из диапазонов [032-047], [058-064], [091-096], [123-126] в кодировке UTF-8; Символ «№» под номером 8470 в кодировке UTF-8. |