Функциональность доступна с тарифа Продвигающий и выше
Внешние скидки нужны в том случае, если вам не хватает стандартного функционала InSales, и нужно рассчитывать скидки по своему алгоритму.
Для работы внешних скидок потребуется написать и разместить на стороннем сервере скрипт, который будет получать данные о заказе с платформы в формате JSON, обрабатывать их и возвращать ответ в том же формате. Грубо говоря, со страницы оформления заказа уходят данные о товарах в корзине, вы где-то на стороне их принимаете, считаете, каким должен быть размер скидки, возвращаете это значение, и система его применяет к заказу.
Управление внешними скидками производится в разделе «Скидки → Внешние скидки»:
В разделе имеется кнопка создания новой скидки (1), а также таблица с уже созданными, имеющая три столбца:
При нажатии кнопки «+» (отмечена цифрой 1 на скриншоте выше) появляется следующее окно:
В запросе передается вся информация о заказе.
В ответ на запрос вы должны вернуть один из следующих объектов:
1) Скидку можно применить:
{
"discount": 10, // Величина скидки, если discount_type == PERCENT, то это 10% иначе 10 рублей
"discount_type": "PERCENT", // Может быть MONEY
"title": "Вам скидка по карте XXXXX", //Текстовое описание скидки, которое сохранится в заказе и будет выведено пользователю
}
2) Скидку по какой-то причине нельзя применить:
{
"errors": ["Карта не найдена"] // Массив ошибок
}
Далее вам нужно модифицировать страницу корзины для работы с внешними скидками.
Нужно добавить форму отсылающую данные на URL /cart_items методом PUT.
В форму нужно добавить input, в который пользователь будет вводить номер карты. К примеру:
<form action="/cart_items" method="PUT">
<input name="order[fields_values_attributes][XXXX][field_id]" value="XXXX" type="hidden">
<input name="order[fields_values_attributes][XXXX][value]" type="text">
.....
</form>
, где XXXX - это идентификатор дополнительного поля заказа
Далее нужно добавить на страницу корзины вывод ошибок.
Ошибки доступны в liquid шаблоне через метод discount_errors у переменной cart. Пример:
{% for error in cart.discount_errors %}
<p class="error">{{error}}</p>
{% endfor %}
Посмотреть наглядный пример обработки запроса на расчет внешней скидки можно в данной статье: https://liquidhub.ru/blogs/open-microphone/vneshnie-skidki-v-insales