Микросервис на Laravel для рассрочки платежей в интернет-магазине

20.12.2023

Интернет-магазин, торгующий дизайнерскими ювелирными украшениями, обратился к нам за помощью в подключении сервиса «Тинькофф Долями». Поскольку бэкенд магазина собственной разработкой клиента, готовые модули для CMS не подходили, надо было подготовить собственное решение.

О проекте

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

Сервис BNPL (Buy Now Pay Later) «Долями» от банка «Тинькофф» предлагает такую возможность. По условиям банка сразу после оформления покупки списывается четверть суммы покупки, а затем каждые две недели с карты клиента списывается еще по 25%. Магазин же сразу получает деньги за товар за вычетом процента банка.

У сервиса есть несколько готовых модулей для интеграции с популярными CMS-системами, такими, как «Битрикс», OpenCart, Tilda и другими. Сайт заказчика представляет собой собственную разработку на PHP (фреймворк Laravel), наше решение должно было интегрироваться именно с ней. Готовые модули от «Тинькофф» достаточно глубоко интегрированы с соответствующими CMS, их переписывание заняло бы больше времени, чем разработка своих микросервисов. К счастью, техническая документация «Долями» достаточно подробно описывает возможность подключения сервиса с помощью API.

Алгоритм работы с сервисом «Долями»

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

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

  • http-запросы отправляет магазин, с их помощью он инициирует и подтверждает сделку. Банк сразу присылает ответ со статусом заявки и необходимыми для дальнейших действий данными;
  • вебхуки присылает банк на специальный адрес, предоставляемый магазином. Это сообщения о ходе обработки запроса: одобрение или отказ заявки, успешное или неуспешное списание средств. Вебхуки необходимы, поскольку между запросом и конкретным действием проходит неопределенное количество времени: клиент заполняет форму, банк принимает решение о предоставлении рассрочки и т.д.

Алгоритм работы системы в случае успешной покупки выглядит так:

  1. Когда клиент выбирает опцию «Оплатить долями», магазин отправляет в банк запрос на создание транзакции (API-метод Create). Запрос содержит уникальный идентификатор заказа, информацию о его составе и стоимости, имеющиеся данные клиента, а также три веб-адреса: страницы, куда сервис перенаправит клиента после успешной и неуспешной оплаты, а также ссылку, по которой придет http-нотификация после обработки запроса (вебхук);
  2. В ответ на запрос сервис присылает ссылку на страницу ввода личных данных и оплаты; сайт перенаправляет клиента на нее. Таким образом, магазин не имеет доступа к личным данным клиента, всю информацию пользователь вводит на странице банка;
  3. После того, как клиент введет необходимые данные, сервис последовательно пришлет два вебхука на предоставленный адрес для html-нотификации. Первый сообщит о том, что заявка клиента одобрена; второй – о том, что четверть стоимости заказа была захолдирована;
  4. После получения второго вебхука магазин отправляет запрос на подтверждение транзакции (метод Commit).
Алгоритм работы системы при использовании сервиса «Долями»

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

Подключение сервиса

Работа по подключению «Долями» была разбита на несколько этапов.

1. Изучение технологического стека проекта.

Проект магазина написан на связке Laravel и Vue, что дает возможность легкого расширения существующего функционала – компонентами фронтенда и API-микросервисами для бэкенда.

2. Выпуск сертификата

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

Выпуск MTLS-сертификата через утилиту банка

3. Разработка решения

На первом этапе была продумана архитектура решения и написана его бета-версия, содержащая основные модули и обеспечивающая работу базового функционала.

  • Основной API для работы с «Долями»: микросервис, принимающий заявки от клиентского приложения на инициацию платежа, контролирующий их статус и отправляющий запросы в банк;
  • Внешний API для вебхуков: отдельный микросервис, принимающий уведомления от сервиса о движении заявки и передающий эту информацию в основной API;
  • Новый функционал фронтенда: при добавлении товаров на определенную сумму в корзине появляется опция оплаты «Долями»;
  • Автотесты: проверка правильного функционирования логики в автоматическом режиме.
Выбор способа оплаты «Долями» при оформлении заказа

4. Рефакторинг

Убедившись, что решение работает, мы собрали комментарии по коду от коллег, глубже изучили техническую документацию сервиса и особенности его работы, а также посмотрели, как реализованы готовые модули для его интеграции с CMS. После этого провели рефакторинг: повысили надежность кода и его читаемость для удобства доработок в будущем. Решение передается клиенту, у него должна быть возможность легко вносить изменения и новый функционал.

5. Тестирование

Сервис «Долями» предоставляет тестовый контур для испытания написанного решения перед его внедрением.

Тестовый контур «Долями»

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

Второе тестирование проводил тестировщик на тестовом контуре. Здесь отрабатываются и документируются все возможные сценарии  взаимодействия с решением.

Наконец, финальное тестирование было проведено уже после переноса решения на боевой контур «Долями». Здесь важно было убедиться, что оплаты верно отображаются в панели управления, а денежные средства поступают в нужном объеме на указанные счета.

Результат

Разработка решения продолжалась с марта по июнь 2023 года. Всего на нее ушло 165 человекочасов, включая работу фронтендеров и тестировщиков. Непосредственно разработка микросервисов бекенда осуществлялась в два этапа: базовая версия и ее интеграция с сайтом магазина заняла 45 часов, рефакторинг, тестирование и финальная интеграция – 52 часа. Такой небольшой срок разработки стал возможен благодаря использованию микросервисной архитектуры. Нам не пришлось ничего менять в коде бэкенда самого магазина, наши модули работают отдельно и подключаются к нему с помощью API.

В результате внедрения решения пользователи получили возможность делать покупки в рассрочку без оплаты процентов за кредит. Магазин получил потенциальную возможность увеличения количества заказов, среднего чека и повышение лояльности клиентов.

Схема оплаты заказа через сервис «Долями»

Стоит учитывать, что за пользование сервиса платит бизнес – от 4.9% от суммы покупки. Такая комиссия может быть нерентабельной для магазинов с низкой маржой. Кроме того, формат рассрочки и график ее погашения формирует банк.

Мы считаем, что использование сервиса «Долями» может быть целесообразно для значительного количества интернет-магазинов, поскольку увеличивает продажи и снижает количество брошенных корзин. Рассрочка помогает клиенту решиться на покупку прямо сейчас, при этом магазин сразу получает денежные средства. Сервис позволяет не вкладываться в разработку отдельных решений для реализации программ по кредитованию покупателей, а его внедрение может быть проведено достаточно быстро даже в случае, когда магазин не использует одну из поддерживаемых CMS.