2.1 Для сайта, мобильного приложения или точки оплаты 3
2.2 Для точки оплаты c повышенной проходимостью. 3
3.2 Расчёт hashId при createQr. 6
3.7 Подготовка кассовой платежной ссылки 10
3.8 Активация кассовой платежной ссылки 12
3.9 Деактивация кассовой платежной ссылки 13
5. Требования к оформлению страницы оплаты 15
КЛИЕНТ – физическое лицо желающее осуществить перевод от своего имени при помощи мобильного приложения банка подключенного к СБП.
БАНК – НКО ЭЛПЛАТ.
ТСП - торгово-сервисное предприятие
ПАРТНЕР – юридическое лицо, заключившее договор с БАНКОМ, в ТСП или на сайте которого размещаем платежный инструмент.
СБП – Система быстрых платежей — это сервис Банка России, позволяющий физическим лицам совершать мгновенные переводы по номеру мобильного телефона в любой банк — участник СБП, а также производить оплату товаров и услуг в розничных магазинах и сети интернет по QR-коду. https://sbp.nspk.ru/
Клиент в мобильном приложении (как вариант на сайте, или в магазине ПАРТНЕРА), далее ТОЧКА, набирает корзину для оплаты и выбирает метод оплаты корзины через СБП.
ТОЧКА формирует при помощи метода createQr “QR код” и отображает клиенту на дисплее, в виде страницы оплаты или печатает на бумаге.
Требования к странице оплате определены в разделе 5 данного руководства.
Внимание!
Если клиент набрал корзину в мобильном телефоне и хочет оплатить мобильным телефоном по СБП, он не сможет считать одним телефон QR, который Вы ему отобразите. Для того, чтоб ему как то можно было оплатить необходимо на платежной странице добавлять “Кнопку” или “Платежную ссылку” (детальнее в 5.Требованиях к оформлению страницы оплаты).
Клиент:
После успешной/неуспешной оплаты, процессинг БАНКа, формирует callback в ТОЧКУ, об успешности (не успешности) платежа.
Внимание! Если по какой то причине ТОЧКА не смогла принять callback, она может запросить статус оплаты при помощи метода getQrDynPay (резервный вариант).
Вводная:
Торговый магазин, одна или несколько касс. на каждой кассе уже распечатаны и висят на видном месте QR коды (раздел 3.7. Подготовка кассовой платежной ссылки).
Оплата:
Клиент подходит на кассу с набранной корзиной, или набирает корзину покупок прямо у продавца.
Продавец в своём кассовом ПО вводит сумму оплаты для клиента, формирует назначение платежа (раздел 3.8. Активация кассовой платежной ссылки).
Клиент наводит на QR, считывает, видит информацию о магазине, сумму и назначение покупки. Принимает решение об оплате. Оплачивает.
Забирает покупки.
Альтернативный вариант:
Клиент наводит на QR, считывает, видит информацию о магазине, сумму и назначение покупки. И не оплачивает. В этом случае продавец отменяет оплату (раздел 3.9. Деактивация кассовой платежной ссылки).
Адрес боевого шлюза:
Адрес тестового шлюза:
Только после успешного тестирования, будет доступен боевой шлюз.
Запросы на шлюз направлять методом POST. Кодировка UTF-8.
тестовые ключи доступа:
login = evolenta
passwd = 58b39410314c551b81bd24fac1d817ab
orgId = 430
ВНИМАНИЕ!
Во всех текстовых полях исключить занесение спец.символов, особенно:
\ обратный СЛЭШ
‘ одинарная кавычка
" двойная кавычка
Виды QR кодов:
Для интернет Сайтов подходит исключительно динамические QR.
Статический код хорошо подходит для точек с небольшой проходимостью.
Таблица 3.1
Наименование |
| Пример | Описание |
type | O | createQr | Создание QR |
login | O | evolenta | Логин в системе БАНКа |
callback | O | УРЛ, куда будет отправлен callback (п.3.3) | |
elplatPhone | Н | 0079226837651 | Телефон продавца, куда будет направлено дополнительное PUSH уведомление об оплате, если установлено приложение ЭЛПЛАТ-ОНЛАЙН |
qrcType | O | 01 | Тип Qr кода: 01 – статический 02 – динамический |
hashId | O | 80269203370aaf0362385e5e3d433b6b | Расчетная величина (п.3.2) |
currency | O | RUB | Валюта, только RUB |
orgId | O | 430 | Id организации в БАНКе, на которую будет зачисление денежных средств, выдаётся после регистрации ТСП в СБП и проведении всех тестов. |
amount | У | 12 | Сумма в коп |
paymentPurpose | У | Тест | Назначение платежа |
qrTtl | Н | 20 | Время жизни от 5 до 129600 минут. Действует только для динамических QR кодов. Если не задан параметр, то он принимает значение в 4320 минут (3е суток). |
Н | help@el-plat.ru | Email клиента (при наличии), он необходим для направления фискального чека | |
redirectUrl | Н | https://el-plat.ru | URL куда вернуть клиента из приложения БАНКа после оплаты по СБП. |
У – условно-обязателен, но обязателен для динамических QR кодов
О – обязателен.
Н – необязательный параметр.
Пример 1:
curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{"type":"createQr","hashId":"635454e6a3c3f8336fade5b5f41d2582","login":"evolenta","callback":"http://sbpekvaring.el-plat.ru/test.php", "qrcType":"01", "currency":"RUB","orgId":"430"}' http://sbpekvtest.el-plat.ru
Пример 2:
curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{"type":"createQr","elplatPhone":"0079226837651","hashId":"635454e6a3c3f8336fade5b5f41d2582","login":"evolenta","callback":"http://sbpekvaring.el-plat.ru/test.php", "qrcType":"01", "currency":"RUB","orgId":"430"}' http://sbpekvtest.el-plat.ru
Пример 3:
curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{"type":"createQr","elplatPhone":"0079226837651","hashId":"189f826134f6f8bc3a9f68376b7034f2","login":"evolenta","callback":"http://sbpekvaring.el-plat.ru/test.php", "qrcType":"02", "currency":"RUB","orgId":"430","email":"ru@el-plat.ru","amount":"13","paymentPurpose":""}' http://sbpekvtest.el-plat.ru
При успехе:
{"code":0,"comment":"","info":{"status":true,"qrData":"https:\/\/qr.nspk.ru\/AS10004CG89LPR8U9ID8TATP0RTVIDV0?type=01&bank=100000000086&crc=3391","qrcId":"AS10004CG89LPR8U9ID8TATP0RTVIDV0"}}
При неуспехе:
{"code":0,"comment":"","info":{"status":false,"descr":"Ошибка hashId"}}
Об успешности говорит параметр status.
В разделе qrData – payload.
ПАРНТЕРу необходимо сгенерировать и отобразить QR клиенту, с данными из qrData.
Последовательная конкатенация полей в следующем порядке:
'login', "passwd", "callback", "qrcType", "currency", "orgId", "amount", "paymentPurpose", “email”, “redirectUrl”
От полученной строки вычисляется md5.
Callback будет приходить из сети 91.223.44.0/24.
Пример callback:
{"action":"send","phone":"","callbackUrl":"http:\/\/37.230.211.51\/acquiring\/elplat\/register?order_id=18903235","qrcId":"AD10006CMJ9AT3T78P58TE2ACB2PTMQ4","amount":"24215","allAmount":"24215","ebl27":"A235007213037809000005CE5685024C","title":"ЭЛПЛАТ С2B","message":"УСПЕШНО. QR Зачисление. 242.15 руб. Через систему быстрых платежей. A235007213037809000005CE5685024C","type":"AD","payStatus":1,"payPhone":"9043859614","vTerminal":"9222219969","orgId":"920","paymentPurpose":"Оплата заказа #18903235"}
Об успешности говорит параметр payStatus = 1, иной payStatus – не успешно.
Если в поле phone внесен номер телефона, информирование будет еще и на телефон, в виде push сообщения в приложение ЭЛПЛАТ-ОНЛАЙН.
type указывает какой тип qr кода был оплачен, AS – статический, AD – динамический.
qrcId указывает какой идентификатор QR кода, который был оплачен.
amount - сумма к перечислению ПАРТНЕРу в копейках = сумма оплаты - торговая уступка БАНКа.
allAmount - сумма оплаты КЛИЕНТОМ.
ebl27 – уникальный номер перевода в системе быстрых платежей, необходим для разбора информации о платеже.
payPhone - телефон плательщика
vTerminal - с какого терминала был сформирован QR
paymentPurpose - назначение платежа
Ожидается http ответ 200, Content-Type: application/json, в теле ответа {"status":true}
Ваш ответ {"status":true}, трактуется нами, что вы успешно получили и обработали сообщение.
При неверном ответе или отсутствии, каждые 3 сек будет повторяться callback, 10 попыток.
Метод дает возможность запросить статус оплаты по динамическим QR кодам, если по какой то причине вы не смогли принять callback, например у вас пропал Интернет и вы не получили callback и статус оплаты неизвестен.
Внимание!
Данный метод можно использовать не чаще 1 раза в 2 секунды.
Расчёт hashId:
Последовательная конкатенация полей в следующем порядке:
'login', "passwd", "qrcId"
От полученной строки вычисляется md5.
Пример запроса:
curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{"type":"getQrDynPay","login":"evolenta", "qrcId":"AD10007RCLUBFD6U95MB24906KHT39P8","hashId":"deec7d2398d155a1ca7cbdeee98dbd30"}' http://sbpekvtest.el-plat.ru
При успехе:
{"code":0,"comment":"","info":{"status":true,"amount":"100","ebl27":"A02030639087280100000472958D6246","message":"QR Зачисление. 1 руб. Через систему быстрых платежей. Успешно. A02030639087280100000472958D6246","payStatus":"1"}}
При неуспехе:
{"code":0,"comment":"","info":{"status":false,"descr":"Ошибка hashId"}}
Об успешности говорит параметр status, true - успешный.
amount - сумма к перечислению ПАРТНЕРу в копейках = сумма оплаты - торговая уступка БАНКа.
ebl27 – уникальный номер перевода в системе быстрых платежей, необходим для разбора информации о платеже.
Метод дает возможность возвратить деньги клиента за покупку.
Расчёт hashId:
Последовательная конкатенация полей в следующем порядке:
login, passwd, ebl27, amount,orgId,descr
От полученной строки вычисляется md5.
Пример запроса:
curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{"type":"undone",
"hashId":"1a7bf319249a37d3f741c0571a2e6120","login":"evolenta","ebl27":"A1068073926539010000041B5CB54189",
"amount":"1", "orgId":"430", "descr":"Возврат по инициативе клиента", "vTerminal":"9226837651"}' http://sbpekvtest.el-plat.ru
ebl27 – уникальный номер перевода C2B(покупка) в СБП.
vTerminal - виртуальный терминал, по API он равен логину.
Внимание!
При использовании кассовых платежных ссылок, поле vTerminal для возврата заполнять как
login:vTerminal (Идентификатор вашей кассы)
Пример: evolenta:Касса 1
При успехе:
{"code":0,"comment":"","info":{"status":true,"msgId":"202010301100086D0500001604036982"}}
При неуспехе:
{"code":0,"comment":"","info":{"status":false,"descr":"Недопустимая сумма к возврату"}}
Об успехе говорит параметр status, true - успешный, иной не успешный.
msgId - номер сообщения СБП.
Наименование |
| Пример | Описание |
type | O | cashQr | работа с кассовыми платежными ссылками |
action | О | create | Создание |
login | O | evolenta | Логин в системе БАНКа |
callback | O | УРЛ, куда будет отправлен callback (п.3.3) | |
elplatPhone | Н | 0079226837651 | Телефон продавца, куда будет направлено дополнительное PUSH уведомление об оплате, если установлено приложение ЭЛПЛАТ-ОНЛАЙН |
hashId | O | 80269203370aaf0362385e5e3d433b6b | Последовательная конкатенация полей в следующем порядке: 'login', "passwd", "callback", "orgId", “vTerminal” От полученной строки вычисляется md5. |
orgId | O | 430 | Id организации в БАНКе, на которую будет зачисление денежных средств, выдается после регистрации ТСП в СБП и проведении всех тестов. |
vTerminal | О | Касса 1 | Идентификатор вашей кассы, не более 10 символов. Уникальный в пределах Вашей организации. Контроль за уникальностью на стороне ПАРТНЕРа. |
redirectUrl | Н | https://el-plat.ru | URL куда вернуть клиента из приложения БАНКа после оплаты по СБП. |
У – условно-обязателен, но обязателен для динамических QR кодов
О – обязателен.
Н – необязательный параметр.
Пример:
curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{"type":"cashQr","action":"create",
"elplatPhone":"0079226837651", "vTerminal":"Касса1",
"hashId":"392964888013c5b634a6c2490aea9344","login":"evolenta","callback":"http://sbpekvaring.el-plat.ru/test.php",
"orgId":"430"}' http://sbpekvtest.el-plat.ru
При успехе:
{"code":0,"comment":"","info":{"status":true,"qrData":"https:\/\/qr.nspk.ru\/AS10004CG89LPR8U9ID8TATP0RTVIDV0?type=01&bank=100000000086&crc=3391","qrcId":"AS10004CG89LPR8U9ID8TATP0RTVIDV0"}}
При неуспехе:
{"code":0,"comment":"","info":{"status":false,"descr":"Ошибка hashId"}}
Об успешности говорит параметр status.
В разделе qrData – кассовый payload.
ПАРНТЕРу необходимо сгенерировать QR, распечатать его, и поставить рядом с кассой.
Наименование |
| Пример | Описание |
type | O | cashQr | работа с кассовыми платежными ссылками |
action | О | activate | Активация оплаты |
login | O | evolenta | Логин в системе БАНКа |
hashId | O | 80269203370aaf0362385e5e3d433b6b | Последовательная конкатенация полей в следующем порядке: 'login', "passwd", "qrcId", "amount", “paymentPurpose”,”currency” От полученной строки вычисляется md5. |
currency | O | RUB | Валюта, только RUB |
qrcId | O | AS10004O7T4048LF98E9TPPLDQLJG5JK | qrcId из Кассовой ссылки (п.3.7) |
amount | О | 12 | Сумма в коп |
paymentPurpose | О | Тест | Назначение платежа |
qrTtl | Н | 20 | Время жизни от 5 до 20 минут. |
Н | help@el-plat.ru | Email клиента (при наличии), он необходим для направления фискального чека |
У – условно-обязателен, но обязателен для динамических QR кодов
О – обязателен.
Н – необязательный параметр.
Пример:
curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{"type":"cashQr","action":"activate",
"hashId":"1025caadcdb9dc037da270913cb1d405","login":"evolenta",
"qrcId":"AS10004O7T4048LF98E9TPPLDQLJG5JK","amount":"123","paymentPurpose":"тест 1.23 р", "currency":"RUB","email":"ru@el-plat.ru"
}' http://sbpekvtest.el-plat.ru
При успехе:
{"code":0,"comment":"","info":{"status":true}}
При неуспехе:
{"code":0,"comment":"","info":{"status":false,"descr":"Ошибка hashId"}}
Наименование |
| Пример | Описание |
type | O | cashQr | работа с кассовыми платежными ссылками |
action | О | deactivate | Деактивация оплаты |
login | O | evolenta | Логин в системе БАНКа |
hashId | O | 80269203370aaf0362385e5e3d433b6b | Последовательная конкатенация полей в следующем порядке: 'login', "passwd", "qrcId" От полученной строки вычисляется md5. |
qrcId | О | AS10004O7T4048LF98E9TPPLDQLJG5JK | qrcId из Кассовой ссылки (п.3.7) |
Пример:
curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{"type":"cashQr","action":"deactivate",
"hashId":"bff7c46e18e1971aa33792b0fa38dcc5","login":"evolenta",
"qrcId":"AS10004O7T4048LF98E9TPPLDQLJG5JK"}' http://sbpekvtest.el-plat.ru
При успехе:
{"code":0,"comment":"","info":{"status":true}}
При неуспехе:
{"code":0,"comment":"","info":{"status":false,"descr":"Ошибка hashId"}}
По всем вопросам обращаться на sbp@el-plat.ru
Проводиться самостоятельно при помощи тестового приложения.
Для этого пройдите по ссылке https://www.el-plat.ru/razrabotchikam/
После получения email с КОДом:
! Расходуйте так, чтоб хватило на весь этап тестирования.
Порядок проведения тестирования:
Рекомендованная сумма до 1 рубля.
Должна быть зеленая галочка или иная визуальная картинка, говорящая о успехе оплаты.
После успешного тестирования необходимо:
Заполнить раздел https://www.el-plat.ru/razrabotchikam_dokumenty/
Внимание!
Мы проверяем что ПАРТНЕР, об успешности оплаты ориентируется на callback (п.3.3), а не на метод getQrDynPay.
Метод getQrDynPay, является резервным и служит для уточнения оплаты, в случае если пропал интернет.
Минимальные размеры QR по высоте и ширине: 200px
Рекомендуемые размеры QR 300px на 300px
В центре QR на белом непрозрачном фоне или рядом с ним должна быть иконка СБП.
Ссылка для скачивания Иконки СБП: https://retail.el-plat.ru/img/logo_sbp.png
Для того чтобы визуально отобразить QR на вашей странице оплаты, Вы можете воспользоваться следующими бесплатным библиотеками:
Для java: https://www.journaldev.com/470/java-qr-code-generator-zxing-example
Для php: http://phpqrcode.sourceforge.net/
Для javascript: https://github.com/azay-ru/qrcodejs
Или любой иной на Ваш выбор.
На странице оплаты по СБП, должно быть указано:
Внимание!
Если клиент заходит с мобильного телефона (рекомендуем ориентироваться на разрешение экрана), дополнительно, необходимо отобразить КНОПКУ, внешний вид для примера, ниже:
Пример кода кнопки:
<button type="button" class="btn btn-secondary btn-icon" style="background-color: #1d1346; color: #D0CFD8;" onclick="window.open('https://qr.nspk.ru/AD1000138PJGGR4I83P8GA5DEE3CNKAU?type=02&bank=100000000086&sum=1&cur=RUB&crc=FDAF','_blank');"><span class="icon"><img src=САЙТ height="35px;"></span> Оплатить</button>
в гиперссылку вставить данные из qrData
в сайт вставить url расположения иконки СБП на Вашем портале.
Обратите внимание на параметр style, цвет фона и цвет шрифта должны быть как указано.
После оплаты должна появиться зеленая галочка, или иной признак успешности оплаты.
Для этого можно воспользоваться технологией push или server events https://developer.mozilla.org/ru/docs/Web/API/Server-sent_events
Продажи в магазине https://disk.yandex.ru/i/fglqW4vrn9HRrQ
Продажи в мобильном приложении https://disk.yandex.ru/i/-bXC7CaDHLmRTg
Продажи на сайте https://disk.yandex.ru/i/966Vlg_4nLmj2w
Кассовая платежная ссылка реализация 1с https://disk.yandex.ru/i/jjTv9y3NK3G0Jw
Версия 1.0.0 | 21/04/2020 | Создан документ |
Версия 1.0.1 | 06/05/2020 | Раздел Callback уточнён. |
Версия 1.0.2 | 13/05/2020 |
|
Версия 1.0.3 | 28/07/2020 |
|
Версия 1.0.4 | 29.07.2020 |
|
Версия 1.0.5 | 10.08.2020 | Добавлен метод deleteQR |
Версия 1.0.6 | 24.09.2020 |
|
Версия 1.0.7 | 15.10.2020 |
|
Версия 1.0.8 | 29.10.2020 |
|
Версия 1.0.9 | 27.01.2021 | В callback добавлен параметр allAmount, уточнён amount. |
Версия 1.0.10 | 12.02.2021 | В метод createQr добавлен дополнительный необязательный параметр vTerminal |
Версия 1.0.11 | 09.03.2021 |
|
Версия 1.0.12 | 29.03.2021 | В callback добавлен параметр payPhone (телефон плательщика) |
Версия 1.0.13 | 18.05.2021 | Уточнена информация о проведении возврата. |
Версия 1.0.14 | 17.06.2021 | Уточнены 1) раздел тестирования, 2) раздел Требование к оформлению страницы оплаты |
Версия 1.0.15 | 28.07.2021 | В метод createQr добавлен параметр email (необходим для направления фискального чека) |
Версия 1.0.16 | 09.09.2021 |
|
Версия 1.0.17 | 10.11.2021 |
|
Версия 1.0.18 | 27.01.2022 | Уточнен раздел 3.6 ВОЗВРАТ |
Версия 1.0.19 | 09.03.2022 | Удалён метод deleteQr Уточнены ряд вопросов. |
Версия 1.0.20 | 23.03.2022 | Уточнено процесс оформления письма на почту |
Версия 1.0.21 | 05.04.2022 | Изменилась почта для интеграции. |
Версия 1.0.22 | 23.05.2022 | Добавили второй хост для системы |
Версия 1.0.23 | 26.07.2022 | Получение кода в тестовое приложение автоматически через сайт el-plat.ru |
Версия 1.0.24 | 13.12.2022 | Добавлен параметр redirectUrl |
Версия 1.0.25 | 16.12.2022 | В callback добавлен параметр paymentPurpose |