Доступность функционала зависит от тарифа. Подробнее о тарифах
Внешние скидки нужны, если магазину не хватает стандартного функционала inSales, и нужно рассчитывать скидки по своему алгоритму.
Для работы внешних скидок потребуется написать и разместить на стороннем сервере скрипт, который будет получать данные о заказе с платформы в формате JSON, обрабатывать их и возвращать ответ в том же формате. То есть со страницы оформления заказа уходят данные о товарах в корзине, вы где-то на стороне их принимаете, считаете, каким должен быть размер скидки, возвращаете это значение, и система его применяет к заказу.
Чтобы перейти в раздел, нажмите Клиенты → Скидки → Внешние скидки:
1. Кнопка "+" — кнопка создания новой скидки.
2. Описание — название скидки.
3. URL — адрес, на который идет запрос в формате JSON.
4. Крестик — удаляет скидку. После удаления ее восстановить нельзя, придется создавать заново.
Если нажать кнопку "+", появляется следующее окно:
1. URL — обязательное поле, в нем указывается адрес, на который идет запрос в формате JSON. По этому URL должен располагаться файл, который сможет обработать полученные данные и вернуть ответ.
2. Описание — название скидки.
3. Зависит от дополнительных полей — если в разделе "Настройки → Оформление заказа" были добавлены поля для заказа, от которых зависит скидка, то настройка заставляет систему делать новый запрос при изменении значения поля. Если вы создали поле для ввода номера скидочной карты и отметили данную галочку, то в случае изменения значения поля получение скидки произведется повторно.
4. Зависит от состава корзины — галочка указывает, нужно ли отсылать повторный запрос на получение скидки, если содержимое корзины изменилось.
5. Включено — активирует скидку.
1. В запросе GET /admin/orders/:order_id.json
передается вся информация о заказе.
2. В ответ на запрос нужно вернуть один из следующих объектов:
1) Если скидку можно применить:
{
"discount": 10, // Величина скидки, если discount_type == PERCENT, то это 10% иначе 10 рублей
"discount_type": "PERCENT", // Может быть MONEY
"title": "Вам скидка по карте XXXXX", //Текстовое описание скидки, которое сохранится в заказе и будет выведено пользователю
}
2) Если скидку по какой-то причине нельзя применить:
{
"errors": ["Карта не найдена"] // Массив ошибок
}
3. Далее нужно модифицировать страницу корзины для работы с внешними скидками.
Нужно добавить форму, отсылающую данные на 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 — это ID дополнительного поля заказа.
ID дополнительного поля указан в адресной строке браузера при редактировании дополнительного поля:
4. Далее нужно добавить на страницу корзины вывод ошибок.
Ошибки доступны в 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