Затраченное время 65 часов


К нам за помощью обратился клиент, у которого еще не была настроена интеграция. Нам необходимо было создать Сервис Интеграции между интернет-магазином на InSales и системой Maxma. Основная задача – прокинуть собранные корзины клиентов через сервер Maxma для получения информации о скидках и бонусах для применения к данным корзинам. Вторая из задач – поддерживать актуальную информацию в личных кабинетах клиентов в InSales.

При обсуждении интеграции с заказчиком, приняли решение не трогать сущность "Клиенты", так как клиенты уже прокидываются в CRM и из CRM отправляются в Maxma. Но в процессе написания ТЗ, с командой пришли к выводу о том, что прокидывать информацию о клиентах из InSales в Сервис Интеграции и из Maxma в Сервис Интеграции необходимо. Это связано с тем, что клиентов в IS и клиентов в Maxma нужно обязательно связывать. При запросах к Maxma на этапе оформления корзины, Сервис Интеграции должен по id клиента в IS и номеру телефона мгновенно получать всю информацию о бонусах и отображать ее на сайте. Помимо этого, личный кабинет клиентов в IS должен отображать актуальную информацию о бонусах, скидках, уровне и пр., которая будет периодически запрашиваться из Maxma.

Работа с клиентами

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

В Сервис Интеграции выгружается пул пользователей из InSales c помощью API. Также, в Сервис Интеграции выгружается пул клиентов из Maxma с помощью xls-выгрузки. Сервис Интеграции связывает пользователей Insales и клиентов Maxma по номеру телефона.

С помощью webhook EVENT_CLIENT_NEW "Создан клиент" принимаются запросы от Maxma о созданных клиентах. Далее, в Сервисе Интеграции происходит процесс связывания клиентов из Maxma с пользователями в InSales.

При регистрации нового клиента в InSales, автоматически создается бонусный счет в Maxma. Информация по всем бонусам клиента прокидывается из Maxma в InSales и отображаться в ЛК клиента в InSales.

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

Информация о пользователях в InSales обновляемся каждые сутки и при ее изменении (ФИО, дата рождения, e-mail), она прокидывается в СИ по вебхуку. В Maxma информация обновляется по крону ночью раз в сутки и при изменении, так же прокидывается в СИ по вебхуку.

При запросе IS => СИ => Maxma, Maxma предоставляет информацию по бонусному счету клиента и предоставляет расчет.

Интерфейс корзин

При изменении информации о клиентах в Maxma в разделах "Список клиентов" и "Покупки", она моментально отобразиться в Сервисе Интеграции и в ЛК InSales.

Получение бонусных транзакций из Maxma

Бонусные транзакции из Maxma выведены в одном из разделов личного кабинета покупателя. Текущий бонусный баланс Клиента из Maxma получаем вместе с обновлением каждого Клиента или после получения вебхука EVENT_CLIENT_BONUSES_CHANGED. После этой операции запрашиваем полную историю бонусных транзакций из Maxma (метод /get-history) для пользователей, у которых не совпадают бонусные балансы по версии InSales и Maxma.

Расчет корзины InSales, применение промокода и бонусов

Для работы с промокодами и бонусным счётом, использовали только интеграцию с Maxma. Внутренние сущности InSales решили не использовать, ибо они несут значительные ограничения на гибкость всей системы.

Отправка расчета корзины

Для корзины в InSales делаем запрос «Рассчитать покупку» (/v2/calculate-purchase), который проходит через Сервис интеграции в Maxma и обратно. Запрос делаем JS-скриптом со страницы корзины при следующих событиях:

  • Открыта страница корзины.
  • Изменено количество товара в корзине.
  • Удалён товар из корзины.
  • Введён промокод (купон) и нажата кнопка или ссылка «Применить»;
  • Введены бонусы и нажата кнопка «Списать».

Запрос делаем даже в случае, если товаров в корзине нет, этим запросом мы «обнулим» данные о корзине в сервисе интеграции и сбросим количество применённых бонусов и данные о скидке.

В ЛК клиента выводится информация о клиенте, бонусном счете, уровне, ближайшей дате сгорания бонусов, сумме накоплений на текущем уровне, необходимая сумму до следующего уровня.

В Истории заказов выводится количество бонусов, нажав на кнопку «История начислений» открывается модалка с бонусной историей из СИ. Историю начислений и списаний бонусов, можно получить с помощью метода /get-history.

Получение и использование расчета

Расчёт применяем для всей корзины в целом, ибо внешнюю скидку можно применить только к заказу, а не к отдельным товарным позициям. Ответ в сервисе интеграции логируем полностью, скрипту в InSales передаём:

  • vuserBonuses: количество активных бонусов у пользователя по данным сервиса интеграции;
  • bonuses → applied: реально применённое количество бонусов, на основе этой информации корректируем количество бонусов, введённое в поле «Бонусы» в корзине;
  • bonuses → collected: количество бонусов, которые будут начисленны за текущий заказ;
  • bonuses → maxToApply: максимальное кол-во бонусов, которое можно применить к корзине, обновляем эти данные и сохраняем значение в кукисах;
  • bonuses → error: при получении любой ошибки по бонусам обнуляем кол-во введённых бонусов в поле и очищаем значение maxToApply в кукисах;
  • summary → totalDiscount: общая скидка по заказу с учётом промокода и акций, это значение должно быть сохранено и использоваться в качестве внешней скидки;
  • promocode → applied: применён ли промокод:

- при значении "yes" надпись на кнопке «Применить» меняем на «Применен»;

- при значении "no" очищаем поле «Промокод»

Для неавторизованного покупателя окно для ввода бонусов к списанию недоступно. Информацию о доступных и начисляемых бонусах также скрываем. Соответственно, старые данные по корзинам заменяются новыми и в самом СИ. Т.е., одна строка с данными отражает последнюю переданную корзину одного конкретного пользователя. Для анонимных пользователей каждый расчёт корзины сохраняется в отдельной строке сервиса интеграции.

Эффект от проведенных работ

Нам необходимо было создать Сервис Интеграции между интернет-магазином на InSales и системой Maxma. Мы выполнили все необходимые задачи:

1. Прокинули собранные корзины клиентов через сервер Maxma для получения информации о скидках и бонусах для применения к данным корзинам;

2. Поддерживаем актуальную информацию в личных кабинетах клиентов в InSales.



Есть вопросы?