Привет, Хабр! На связи Дмитрий Баринов и Дмитрий Ганявин, системные аналитики в команде разработки системы быстрых платежей (СБП) в ПСБ. Наверняка вы хотя бы раз пользовались СБП. Но слышали ли вы про сервис мгновенного выставления счетов, интегрированный с системой быстрых платежей? Это обмен счетами и их оплата в режиме реального времени.

Не так давно мы в ПСБ внедрили сервис «Запрос о платеже» (Request to Pay) для малого и среднего бизнеса. Делали это вместе с НСПК (Национальной системой платёжных карт), которая вообще стала инициатором появления в России такого решения. И, что приятно, внедрили этот сервис первыми среди российских банков. В этой статье расскажем, как и зачем появился этот сервис и чем он полезен. 

Как же всё работает? Разберём две ситуации: первая — оплата идёт от одного юрлица другому юрлицу стандартным путём, вторая — всё то же самое происходит при использовании сервиса «Запрос о платеже».

Первая ситуация: согласно заключённому договору, юрлицо А должно выставить счёт на оплату, а юрлицо Б — его оплатить. 

Если у контрагентов есть учётная система (1С или аналог), то такая система обычно поддерживает электронный документооборот. В этом случае юрлицо А формирует счёт и отправляет его юрлицу Б. 

Если учётной системы нет, то счёт придётся распечатать, подписать, отсканировать и отправить в pdf контрагенту. Получателю нужно будет заполнить реквизиты из pdf-счёта или вручную перебить их из бумажного документа. Далее — перевести деньги через расчётно-кассовое обслуживание (РКО).

Когда деньги дойдут до получателя? Если платёж осуществлён в рабочий день, то перевод будет получен в течение одного или нескольких часов, если платёж пришёлся на конец операционного дня, то на следующий день. В выходные и праздничные дни обычные банковские переводы не осуществляются.

При использовании сервиса «Запрос о платеже» юрлицо А внутри банковского приложения формирует электронный счёт и отправляет его в ДБО другого банка или в приложение специализированной платформы. Получатель мгновенно получит уведомление, что ему пришёл входящий счёт, он нажимает на кнопку «Оплатить», и его платёж моментально уходит контрагенту с помощью СБП B2B.

Когда два юрлица впервые пользуются сервисом, то сначала юрлицо А создаёт шаблон подписки, а юрлицо Б подписывается на него. Это необходимо, чтобы сформировать пу�� получателей счётов, сохранить их реквизиты и уберечь себя от спама и мошенников.

Как появился «Запрос о платеже»?

Сервис Request to Pay («Запрос о платеже») поддерживается НСПК. Она разработала платежную систему «Мир», СБП, внедрила оплату по QR-кодам и занимается развитием платежных сервисов.

Когда НСПК внедряет новый продукт, банкам необходимо организовать его поддержку на своей стороне. В ПСБ за развитие продуктов НСПК отвечает наша команда СБП.

ПСБ стал первым банком, реализовавшим сервис «Запрос о платеже».

Сервис уже работает, и за короткий срок к нему подключилось более трехсот клиентов — отличный результат для нового продукта. Сейчас перед нами стоит задача проанализировать пользовательский опыт, выявить возможные сложности и улучшить сервис. 

Что у нас под капотом?

Немного расскажем о самом интересном — технической стороне сервиса.

НСПК разработала сервис на гибридной архитектуре взаимодействия. Часть операций выполняется в синхронном режиме, например, GET-запросы: получение статуса учётной записи, справочников, информации по входящему или исходящему счёту, запрос уведомлений.

Изменение статусов регистрации, подписок, шаблонов, счетов — через асинхронное взаимодействие. Доставка уведомлений происходит по pull-модели. Мы периодически опрашиваем сервис и загружаем пул различных сообщений, на обработке которых выстроен бизнес-процесс внутри ДБО.

Коллеги из НСПК выбрали pull-модель получения уведомлений по следующим причинам: 

  • Необходимость в защите канала; 

  • Поддержка эндпоинтов только со стороны НСПК. Поэтому отсутствует тестирование методов сервис-провайдерами; 

  •  Регулирование нагрузки самими сервис-провайдерами. 

Мы увидели несколько задач, которые необходимо решить в рамках нашего взаимодействия:

  • реализовать опрос сервиса на наличие новых уведомлений, при этом не давать лишней нагрузки на наши внутренние системы;

  • реализовать функционал для управления интервалами вызова сервисов НСПК;

  • произвести разбор разных типов уведомлений исходя из бизнес-процесса.

 Мы нашли следующие пути решения этих задач:

  • Запрашиваем уведомления после инициации события регистрации, подписки, создания шаблона или счёта в нашем ДБО. В данном случае мы создаём «событие», которое отправляется во внутреннюю очередь. Сервис начинает запрашивать уведомления и проводить их разбор, и как только нужный статус найден и обработан, «событие» закрывается и опрос уведомлений останавливается. Так мы получили высокую скорость обработки событий для клиентов, которые пользуются нашим ДБО, без злоупотребления постоянными вызовами внутри наших систем.

  • Настроили шедулер, чтобы он с заданной периодичностью, вне зависимости от событий запрашивал сообщения. Эта дополнительная подстраховка для получения уведомлений в ситуациях, когда события в сервисе «Запрос о платеже» будут создаваться внешними сервис-провайдерами. Такое решение уступает в скорости обработки внутренней системе, но этот компромисс показался нам приемлемым.

Регистрация, шаблоны и подписки

Для работы с сервисом RtP требуется предварительно выполнить регистрацию. Она выполняется по ОГРН в асинхронном режиме, но немного отличается от процесса регистрации в сервисах СБП B2C и B2B. В базе создаётся запись с типом registration, далее выполняется синхронный запрос в НСПК. В ответ на запрос передаётся присвоенный в сервисе идентификатор клиента, а не классический ticketId, по которому получают статус в СБП. Далее при получении статуса регистрации по pull-модели получаем финальный статус (НСПК может отказать в регистрации с указанием причины отказа) и обновляем запись в базе (переводим в статус success или failed).

Регистрация в сервисе RTP
Регистрация в сервисе RTP
Выполняется регистрация
Выполняется регистрация
Схема выполнения регистрации в сервисе RTP
Схема выполнения регистрации в сервисе RTP

Чтобы выставлять счета, требуется предварительно выполнить несколько действий:

  • создать шаблон подписки;

  • отправить созданный шаблон контрагенту;

  • контрагент должен подписаться на шаблон.

Создание шаблона подписки занимает буквально несколько секунд (синхронный запрос). Достаточно выбрать категорию, ввести название и нажать на кнопку «Создать шаблон подписки». В случае успеха информация о созданном шаблоне сохраняется в базу, чтобы пользователь мог просматривать список созданных шаблонов.

Создание шаблона подписки
Создание шаблона подписки
Создание шаблона успешно выполнено
Создание шаблона успешно выполнено

Далее можно отправить id шаблона контрагенту в любой мессенджер или на почту, чтобы он на него подписался.

Для выполнения подписки пользователь вставляет id шаблона, выполняется синхронный запрос в НСПК для получения данных и отображается информация о создателе шаблона (наименование компании, ОГРН) и название шаблона, указанное при создании. Далее выполняется подписка на шаблон, и НСПК уведомляет владельца шаблона через механизм нотификаций, что на него выполнена подписка. 

Недавно НСПК предоставила возможность по ИНН или ОГРН компании получать список всех созданных шаблонов, и теперь нужный шаблон можно найти, если известен ИНН или ОГРН контрагента.

Все условия выполнены, можно выставлять счета на оплату.

Подписка на шаблон
Подписка на шаблон

Так как мы сохраняем в базу информацию о всех событиях, инициированных пользователем, то мы предоставляем возможность просматривать:

  • список созданных шаблонов;

  • список подписчиков, которые подписались на шаблон;

  • список шаблонов, на которые выполнена подписка.

Просмотр списка созданных шаблонов
Просмотр списка созданных шаблонов
Просмотр списка подписчиков шаблона
Просмотр списка подписчиков шаблона

Как работает выставление счёта?

Собрать это техническое решение оказалось интересной задачей. Клиенту  необходимо зарегистрироваться в сервисе «Запрос о платеже», создать шаблон и выставить счёт. Нам нужно было добавить внутренние проверки банка, такие как: подключение клиента к СБП, наличие внешних ограничений (блокировки со стороны регулирующих органов), внутренние ограничения (черные списки внутри банка).

Решение по дизайну экранов оказалось проще. Поскольку сервис запроса платежей во многом похож на электронный документооборот, мы адаптировали уже знакомый пользователям интерфейс внутрибанковского продукта ЭДО. Это позволило сделать переход для клиентов максимально плавным.

Добавили возможность для клиента распечатать счёт и получить его в pdf. При этом наименование контрагентов, банка-получателя и их юридические адреса зафиксированы в момент создания счёта. Так клиент получает счет в pdf или в распечатанном виде именно в том состоянии, которое было на момент создания этого счета. А вышеуказанные атрибуты со временем могут измениться: компания может изменить название или сменить юридический адрес.

Экран выставления счёта
Экран выставления счёта
Экран входящего счёта
Экран входящего счёта
Экранные формы для негативного сценария загрузки детальной информации по счёту
Экранные формы для негативного сценария загрузки детальной информации по счёту
Схема создания счета в сервисе RTP
Схема создания счета в сервисе RTP

Итог

Бизнес-заказчики высоко оценили сервис:

Наран Церенов, начальник центра развития тарифов и цифровых продуктов расчетно-кассовых операций:

«В рамках масштабной стратегии цифрового развития взаимодействия с малым и средним бизнесом ПСБ провел глубокий анализ потребностей рынка. Анализ показал высокий спрос на инструменты, упрощающие управление финансовыми операциями. Результатом стала реализация уникального сервиса по обмену счетами, аналогичного решения пока нет ни у одного банка. Сервис представляет собой один из множества инструментов, разрабатываемых нами специально для малых и средних компаний, стремящихся оптимизировать свою деятельность и сократить издержки».

«Новый сервис для бизнеса в интернет-банке ПСБ „Запрос о платеже“ значительно повышает удобство ведения документооборота онлайн, упрощает взаимодействие между контрагентами и позволяет полностью автоматизировать процесс формирования и доставки счетов до клиентов. Транзакции проходят в любое время, в том числе и в выходные, а информация об оплате счетов обновляется в реальном времени ― это дает возможность оперативно контролировать платежи и сокращать дебиторскую задолженность»,


― отметил Кирилл Тихонов, старший вице-президент, заместитель руководителя блока малого и среднего предпринимательства ПСБ.

За кажущейся на первый взгляд простой задачей «выставить счёт и оплатить его» стоит большая командная работа, которая включает в себя проработку архитектурного решения, отрисовку дизайн-макетов, написание ТЗ, разработку и тестирование.