Мнение автора может не совпадать с мнением редакции
О проекте
К нам обратился интернет-магазин дизайнерских украшений. Компания хотела дать клиентам возможность оплачивать покупки в рассрочку, чтобы товары не задерживались надолго в корзине, а выручка выросла.
Сервис BNPL (Buy Now Pay Later) «Долями» от банка «Тинькофф» предлагает такую возможность. По условиям банка сразу после оформления покупки списывается четверть суммы покупки, а затем каждые две недели с карты клиента списывается еще по 25%. Магазин же сразу получает деньги за товар за вычетом процента банка.
У сервиса есть несколько готовых модулей для интеграции с популярными CMS-системами, такими, как «Битрикс», OpenCart, Tilda и другими. Сайт заказчика представляет собой собственную разработку на PHP (фреймворк Laravel), наше решение должно было интегрироваться именно с ней. Готовые модули от «Тинькофф» достаточно глубоко интегрированы с соответствующими CMS, их переписывание заняло бы больше времени, чем разработка своих микросервисов. К счастью, техническая документация «Долями» достаточно подробно описывает возможность подключения сервиса с помощью API.
Алгоритм работы с сервисом «Долями»
Сервис «Долями» работает почти так же, как обычный платежный шлюз для обработки оплаты банковскими картами. Поскольку рассрочку предоставляет не магазин, а банк, даже фискальный чек создается по правилам обычной продажи. Единственное существенное отличие состоит в том, что банк может отказать клиенту в рассрочке, и такой отказ придет в систему в виде отдельного статуса заявки.
Как и в случае платежного шлюза, обмен данными между магазином и банком осуществляется с помощью http-запросов и вебхуков:
http-запросы отправляет магазин, с их помощью он инициирует и подтверждает сделку. Банк сразу присылает ответ со статусом заявки и необходимыми для дальнейших действий данными;
вебхуки присылает банк на специальный адрес, предоставляемый магазином. Это сообщения о ходе обработки запроса: одобрение или отказ заявки, успешное или неуспешное списание средств. Вебхуки необходимы, поскольку между запросом и конкретным действием проходит неопределенное количество времени: клиент заполняет форму, банк принимает решение о предоставлении рассрочки и т.д.
Алгоритм работы системы в случае успешной покупки выглядит так:
Когда клиент выбирает опцию «Оплатить долями», магазин отправляет в банк запрос на создание транзакции (API-метод Create). Запрос содержит уникальный идентификатор заказа, информацию о его составе и стоимости, имеющиеся данные клиента, а также три веб-адреса: страницы, куда сервис перенаправит клиента после успешной и неуспешной оплаты, а также ссылку, по которой придет http-нотификация после обработки запроса (вебхук).
В ответ на запрос сервис присылает ссылку на страницу ввода личных данных и оплаты, сайт перенаправляет клиента на нее. Таким образом, магазин не имеет доступа к личным данным клиента, всю информацию пользователь вводит на странице банка.
После того, как клиент введет необходимые данные, сервис последовательно пришлет два вебхука на предоставленный адрес для html-нотификации. Первый сообщит о том, что заявка клиента одобрена, второй — о том, что четверть стоимости заказа была захолдирована.
После получения второго вебхука магазин отправляет запрос на подтверждение транзакции (метод Commit).