Интеграция Adobe и развитие платформы комплексной подписки
Новый кейс Evrone про то как мы создали модули управления доступом пользователей, подключили платёжный шлюз и интегрировали с Adobe платформу для заказа облачных услуг ActivePlatform.
ActivePlatform помогает компаниям выступать в роли брокеров облачных услуг, позволяя телекоммуникационным компаниям и операторам мобильной связи, поставщикам услуг, реселлерам, предпринимателям и государственным организациям экономически эффективно предоставлять ИТ как услугу. Платформа позволяет построить сквозную экосистему, благодаря которой клиенты могут быстро найти и приобрести облачные услуги, а также управлять ими через собственную специализированную систему в соответствии с насущными потребностями.
Благодаря ActivePlatform пользователи могут покупать подписки на облачные и другие услуги различных компаний в одном месте. Если вашей компании требуются подписки, например, на услуги Google Cloud, Microsoft Office и Adobe, то вы можете на ActivePlatform заказать всё это, используя одну учетную запись, создать счета на оплату или произвести платёж в одном месте одной валютой. Заходить на каждый из сайтов всех компаний не потребуется.
Разработчики Evrone вошли в команду ActivePlatform и работают над аспектами, которые касаются реселлеров, администраторов, менеджеров и клиентов (покупателей на уровне компаний). В частности, мы работали над интеграцией с Adobe, интеграцией платежных систем, добавлением новых типов биллинга, доработкой существующих, и т. д.
Как всё начиналось
ActivePlatform — это большой и сложный проект. В сентябре 2021 года они обратились в Evrone, чтобы подобрать персонал в рамках аутстаффинга. В качестве тестового задания нам передали на аутсорсинг интеграцию платформы с Adobe. Платформа уже содержала модуль для работы с микросервисами, а мы реализовали сервис для работы с Adobe. Нашу работу оценили высоко, и теперь наши сотрудники работают вместе со штатной командой ActivePlatform.
Над проектом работают три команды Ruby, в которые входят разработчики из Evrone, и команда JS. В каждой команде есть как разработчики, так и тестировщики.
Интеграция с Adobe
В процессе интеграции с Adobe мы реализовали три операции:
- заказ подписки;
- изменение подписки;
- продление подписки.
Интеграция бизнес-приложений c Adobe — очень объемная и специфическая задача. Например, заказ подписки не сводится к одному простому запросу. Сначала нужно получить данные, затем создать клиента на стороне Adobe: мы проверяем его статус и ожидаем, пока он будет создан, что может занять несколько минут. Далее мы сравниваем желаемую подписку с тем, что может предложить Adobe. Коды ресурсов некоторых элементов подписки могут отличаться на несколько символов, поэтому их нужно сравнить, создать заказ, подождать, пока он пройдёт, а затем отключить обновление на стороне Adobe. Наконец, мы снова получаем данные клиента на стороне платформы, и только после этого берём оттуда все данные и возвращаем их платформе.
Итак, заказ подписки — многоступенчатый процесс. Для реализации заказа подписки мы выполнили огромный объём работ. Реализация продления и изменения подписки также потребовала приложить немало усилий, хотя и включает меньше шагов.
Реализация асинхронной работы с Adobe
После интеграции с Adobe, мы сделали работу с Adobe асинхронной. Изначально на платформе работа с микросервисами для вендоров всегда была синхронной: запрос-ответ, запрос-ответ. Поскольку иногда Adobe отвечает на запросы по нескольку часов, эффективнее было перейти на асинхронное взаимодействие микросервисов на основе сообщений. Мы реализовали механизм, который позволяет отправлять запрос, передавать информацию, проверять ее валидность и актуальность данных для аутентификации, а затем асинхронно получать ответы через брокер сообщений RabbitMQ.
Почти каждое действие — заказ подписки, продление подписки и обновление подписки — включает несколько сценариев. Например, проверка, формирование списаний, формирование платежей, при необходимости проверка на наличие санкций, затем отправка. Все перечисленное сценарии просто огромные. Для их бесперебойного выполнения необходимо было реализовать асинхронную работу. С этой сложной задачей мы успешно справились.
Ещё с одной сложностью мы столкнулись, когда в процессе работы без всякого предупреждения внутренняя логика Adobe была изменена. Пришлось перестраивать на лету, но в итоге всё получилось отлично.
Интеграцию пользовательского приложения с Adobe делать было непросто, так как мы предварительно не были знакомы с документацией платформы. У нас была документация, содержащая список запросов к микросервису и ответов, которые микросервис должен быть вернуть. И разработка микросервиса велась исходя из этого.
API Adobe местами также весьма специфичен, например, чтобы заказать подписку, нужно сделать восемь различных запросов, не считая получения токена. Итого девять запросов, хорошо, если ни один из них не завершится с ошибкой — некоторые запросы приходится часами повторять через каждые 10 секунд.
Интеграция с платежными системами
Помимо интеграции с Adobe, уже в составе команды ActivePlatform мы работали над интеграцией платежных шлюзов с различными платежными системами, например, с EPAY (Казахстан). Мы также реализовали интеграцию с системой Softline Payments, которая сейчас развернута в России, Аргентине и Колумбии. Мы отвечали за весь процесс, от формирования идеи до её реализации, а также за сопровождение, тестирование платежной системы и за развертывание.
Кроме того, мы решали текущие задачи, совершенствовали текущие итерации и внедряли новые типы биллинга.
Новые типы биллинга
В составе команды ActivePlatform мы работали над реализацией нового типа биллинга и внедрением биллинговой системы — задача была сложной и заняла несколько месяцев. Новый тип биллинга предполагает, например, что при заказе подписки 15 числа все счета также выставляются 15 числа каждого месяца.
У него много условий списания, потому что у всех реселлеров есть подчинённые им реселлеры. Надо учитывать планы, подписки, деньги, постоплату, предоплату, интервалы, которые можно оплатить, и интервалы, где подписка приостановлена, но будет восстановлена, если внести оплату. В общем, очень много нюансов. К тому же каждый вендор считает деньги и выставляет счета по-своему. Если счета в компании и от вендора не сошлись, возникает проблема. Поэтому при настройке типов биллинга всё нужно многократно проверять.
Стек технологий
- Ruby, Rails
- Redis, RabbitMQ, Postgres
- Faraday (гибкая клиентская библиотека HTTP с поддержкой различных бэкендов)
- Для фронтенда: Vue, React, Angular, jQuery, и JS
Было очень интересно работать с гемом Ancestry, который позволяет организовать записи модели ActiveRecord в древовидную структуру, используя единую, интуитивно понятную колонку базы данных. Сущность может быть как корневой сущностью, так и потомком. Ancestry соединяет не разные сущности друг с другом, а одинаковые сущности в дерево и позволяет работать с этим деревом.
Традиционно на уровне стран есть один реселлер, которому подчиняются нижестоящие реселлеры. Но в стране также может быть несколько суб-реселлеров, ниже которых может ещё один уровень реселлеров. В такой ситуации Ancestry замечательно помогает организовать структуру, работать с ней, обмениваться данными.
Заключение
Работать над таким сложным и масштабным проектом в составе команды ActivePlatform очень интересно. Если вам необходимо разработать систему интеграции с внешними сервисами или создать систему подписки для вашего проекта, оставьте сообщение в форме ниже. Мы свяжемся с вами и обсудим ваш новый проект.