Запись логов зависит от активной настройки модуля logging.
В случае если нужно записать в логи, а настройка выключена, есть специальный метод enableLogging() . Предназначение данного метода — это отладка на клиентских проектах отдельных узлов модуля.
Отложенные запросы
Функционал отложенной отправки запросов нужен для безотказной передачи данных с сайта в API MAXMA. При отправке запросов через SDK MAXMA и получении исключения TransportException сохраняем данные и операцию в базу данных в таблицу maxma_delayed_request. Класс описывающий таблицу — Maxma\Loyalty\RequestQueue\QueueTable
Методы API, для которых настроена отложенная отправка:
Создание нового клиента
Обновление externalId клиента
Создание и изменение заказа
Выкуп заказа
Отмена заказа
Бизнес-логика
Покупатели
Для создания новых покупателей в MAXMA используются обработчик двух событий:
OnAfterUserAdd (добавление пользователя на сайте)
OnAfterUserAuthorize (авторизация пользователя на сайте)
Обработчик выполняет поиск покупателя в базе MAXMA и в соответствии с результатом регистрирует его, изменяет данные или не выполняет никаких действий.
Обработчик и поиск покупателя в MAXMA работает по следующей бизнес-логике:
.1Первичная проверка покупателя осуществляется по внешнему идентификатору (узел externalId). Если покупатель найден, никаких действий не выполняется.
.2Если покупатель не найден по externalId , производится поиск по номеру телефона. Значение берется из поля Bitrix PHONE_NUMBER, а если оно пусто, то из поля PERSONAL_PHONE. Для ситуаций, когда на сайте номер телефона хранится не в стандартных полях сущности пользователя, надо создать обработчик на событие модуля onGetUserPhone.
.3Если покупатель найден по телефону, выполняется обновление внешнего идентификатора (externalId) в MAXMA. В качестве значения узла externalId надо передается составное значение из префикса bx- и идентификатора пользователя в Bitrix (например, bx-337).
.4Если покупатель не найден по externalId и phoneNumber, он создается в MAXMA.
Заказы
Для создания и обновления заказов используется обработчик, который привязан к событию OnSaleOrderSaved (происходит в конце сохранения заказа).
При создании нового заказа переносятся значения списанных бонусов и промокода из сессии в свойство заказа MAXMA_BONUSES и MAXMA_PROMOCODE.
Для фиксации выкупа заказа используется обработчик события OnSaleStatusOrder (происходит после изменения статуса заказа).
Для фиксации отмены заказа используется обработчик события OnSaleOrderCanceled (изменение флага отмены заказа).
Расчет скидок
Применение скидки MAXMA реализовано через пользовательское правило работы с корзиной.
Хранилище для правил работы с корзиной реализовано в виде таблицы в базе данных. Название таблицы — maxma_product_discount. Взаимодействие с таблицей реализовано через ORM D7.
Для обработки данной операции реализована привязка к событию OnBeforeSaleOrderFinalAction (финальный расчет корзины).
Расчет скидки производится при следующих события:
Списание бонусов через компонент maxma:basket.bonus
Применение промокода через компонент maxma:basket.promocode
Компонент отображает количество бонусов, которое будет начислено при покупке товара.
Место интеграции — карточка товара.
Компонент получает данные о количестве бонусов из API MAXMA.
Пример вызова:
<?php
$APPLICATION->IncludeComponent(
'maxma:catalog.element.bonus',
'',
[
'PRICE'=>$item['BASE_PRICE'],
'PRODUCT_ID'=>$item['ID']
],
$component,
['HIDE_ICONS'=>'Y']
);
?>
Компонент бонусов в корзине
Компонент отображает количество бонусов покупателя и содержит форму списания бонусов при оформлении заказа.
Место интеграции — корзина и страница оформления заказа.
Компонент доступен только для авторизованного пользователя.
При инициализации компонента на странице происходит получение информации о списанном текущем количестве бонусов из глобальной переменной сессии под ключом MAXMA_BONUSES и отображается в форме, если оно не пустое.
При отправке формы списания бонусов выполняется запрос в MAXMA с данными пользователя, количеством бонусов к списанию, корзиной заказа, данными промокода (ключ MAXMA_PROMOCODE переменной сессии).
Полученный расчет корзины с учетом списанных бонусов фиксируется в таблице maxma_product_discount. Количество бонусов, которые были списаны пользователем, фиксируются в сессии под ключом MAXMA_BONUSES.
При отмене списания бонусов значение в сессии под ключом MAXMA_BONUSES очищается.
Компонент содержит 2 шаблона: полный (default) и сокращенный (short).
Параметры компонента:
Title
Title
Title
Название
Параметр
Описание
Страница авторизации
PATH_TO_AUTH
Путь до страницы авторизации
Подробная информация
DETAILED_LINK
Ссылка на страницу с подробной информацией
Ajax запрос
IS_AJAX
Работа в режиме Ajax (доступен только для стандартных компонентов Bitrix)
Пример вызова:
<?php
$APPLICATION->IncludeComponent(
'maxma:basket.bonus',
'short',
[
'PATH_TO_AUTH'=>'/login/',
'DETAILED_LINK'=>'https://maxma.com/ru',
'IS_AJAX'=>'Y'
],
false
);
?>
Компонент промокода в корзине
Компонент представляет собой форму ввода и применения промокода.
Место интеграции — корзина, страница оформления заказа.
Компонент доступен для авторизованного и неавторизованного пользователя.
При инициализации компонента на странице происходит получение информации о примененном промокоде из глобальной переменной сессии под ключом MAXMA_PROMOCODE и отображается в форме, если оно не пустое.
При отправке формы промокода выполняется запрос в MAXMA с данными пользователя, промокодом, корзиной заказа, количеством списанных бонусов (ключ MAXMA_BONUSES переменной сессии).
При успешном применении промокода его значение записывается в переменной сессии под ключом MAXMA_PROMOCODE и полученный расчет фиксируется в таблице maxma_product_discount.
При отмене применения промокода значение в сессии под ключом MAXMA_PROMOCODE очищается.
Компонент содержит 2 шаблона: полный (default) и сокращенный (short).
Параметры компонента:
Add a caption...
Пример вызова:
<?$APPLICATION->IncludeComponent(
'maxma:basket.promocode',
'short',
[
'IS_AJAX'=>'Y'
],
false
);?>
Кастомизация компонентов
Для подготовки дизайна интерфейса компонентов рекомендуется использовать макеты в Figma:
Add a caption...
Для кастомизации цветов компонента необходимо в глобальном файле стилей сайта добавить правило с объявлением CSS переменных:
:root.maxma{
--maxma-accent-color:#1CA1BD;/* базовый цвет */
--maxma-success-color:#87C73D;/* цвет успешной операции */
--maxma-error-color:#C71E1E;/* цвет ошибки */
--maxma-main-hover-color:#5B9F0B;/* цвет при наведении */
}
Если нужны более сложные изменения в визуальной части компонента, необходимо скопировать дефолтный шаблон компонента в соответствующую директорию шаблона сайта и внести изменения.
Порядок поддержки модуля
Поддержка (вопросы, ошибки, идеи) осуществляется по электронной почте support@maxma.com.
Режим работы: 09:00-18:00 по московскому времени. Выходные дни: суббота и воскресенье.
Время реакции на обращение – 24 часа.
Структура модуля
Файловая структура
lang/ru/ — каталог с языковыми файлами скриптов модуля;
lib/ — каталог с классами, реализующие основную бизнес-логику;
logs/ — каталог с логами;
install/ — каталог с файлами используемыми для инсталляции и деинсталляции модуля;
Maxma — класс ответственен за получение и настройку экземпляра SDK MAXMA. В классе описаны основные необходимые операция для взаимодействия с API.
Settings — класс реализует шаблон Singleton и нужен доступа к настройкам модуля. Хранит код модуля и реализовано получение настроек модуля через COption.
Exceptions/ — неймспейс для хранения исключений модуля.
Entity/Order — класс, содержащий основную бизнес-логику сущности заказа.
Entity/User — класс, содержащий основную бизнес-логику сущности пользователя.
Entity/Product— класс, содержащий основную бизнес-логику сущности товар.
Event/UserEvent — события для работы с пользователем.
Event/OrderEvent — события для работы с заказом.
Util/Logger — класс для логирования в проекте.
Util/Helper — класс со статическими методами для типовых действий.
RequestQueue/QueueExecutor — класс реализует функционал добавления запроса в очередь (записать в хранилище), исполнение запроса.