Создание заказа с кассовой скидкой
Введение
В этой статье рассмотрен сценарий создания заказа с применением кассовых скидок, то есть скидок, настроенных в r_keeper.
Основы взаимодействия сайта ресторана с r_k Delivery описаны в статьях Возможности API.
Базовый сценарий создания заказа с применением кассовых скидок:
- Получение предрасчета заказа
- Создание заказа
- Заказ передается на кассу вручную или автоматически
- К заказу применяется скидка на кассе.
Предварительные настройки
- Настройте заведение в r_k Delivery
- Настройте кассовые скидки
- Настройте подключение по API для бэкенда сайта или бэкенда приложения ресторана
Подключите на сайте авторизацию гостей по номеру телефона.
Авторизация гостей по номеру телефона необходима для связи с базой гостей в r_k Delivery, а также для идентификации пользователя на сайте: так вы получаете подтверждение, что именно этот гость выполнил все условия для получения кассовой скидки, а также технически подтверждаете, что ресторан предоставляет скидку этому гостю.
Метод предрасчета
Для получения данных о скидке для гостя, необходимо использовать метод предварительного расчета заказа. Этот метод должен использоваться после заполнения деталей заказа: состава, способа доставки и пр. и авторизации гостя.
Запрос:
Пример запроса:
Пример тела запроса:
Параметры, отвечающие за скидки:
- useLoyalty — указывает, собирается ли гость использовать программу лояльности. Одновременное применение скидок r_k Loyalty и кассовых скидок не поддерживается
- useLoyaltyBonusPayments — указывает, собирается ли гость использовать бонусы лояльности. Одновременное применение скидок r_k Loyalty и кассовых скидок не поддерживается
- phone — номер телефона гостя
- manualDiscounts — массив параметров, отвечающих за использование кассовых скидок.
- variableDiscounts — параметр отвечающий за свободные скидки, необходим идентификатор скидки в менеджерской станции rkeeper, и сумма скидки. Скидка должна иметь установленный параметр "Изменяемое значение" в менеджерской станции rkeeper. Можно использовать одновременно обычную, ручную и свободную скидку.
Пример ответа, если кассовые скидки были применены:
где:
- amount — блок, содержащий данные об итоговых суммах заказа и детали о применяемых к заказу кассовых скидках
- totalAmount — сумма заказа с учетом всех скидок и суммы за доставку
- orderAmount — сумма заказа без учета скидок и суммы за доставку
- deliveryAmount — сумма за доставку без учета скидок. Соответствует стоимости блюда, которое фискализируется как сумма за доставку
- discountDeliveryAmount — сумма скидки за доставку. Часть скидок детализируется, то есть скидка применится на блюдо, которое фискализируется как сумма за доставку
- minOrderAmountFreeDelivery — минимальная сумма заказа для бесплатной доставки
- dishList[] — блок, содержащий информацию о заказе. Подробнее о параметрах блока читайте в статье Создание заказа
- discount — значение суммы скидки в детализации по каждому блюду. Все остальные блюда в заказе, без блюда, которое фискализируется как сумма за доставку
loyaltyAmount — блок, содержащий информацию о скидках программы лояльности. При использовании кассовых скидок значения в блоке нулевые и отрицательные.
- discounts — блок, содержащий детальные данные о применяемых к заказу кассовых скидках
- useRk7Discounts — параметр, указывающий на применение кассовых скидок к заказу в целом. Если принимает значение true — значит, будут применяться
- total — общая сумма заказа с учетом применения всех скидок и суммы за доставку
- discount — общая сумма скидки на заказ, которая указывается со знаком минус, с учетом скидки на блюдо, которое фискализируется как сумма за доставку
- discountList[] — полный список всех примененных скидок с указанием наименования, id и значения суммы скидки
Если у скидки сумма равна нулю, значит, данная скидка не применилась по правилам кассы. Это может быть из-за совместимости скидок между собой, условий скидки и др. При этом скидка все равно будет отображена в списке- name — название скидки в r_keeper
- amount — размер скидки в r_keeper
- isManual — параметр, показывающий, автоматическая скидка или ручная
- Если скидка ручная — принимает значение true
- Если скидка автоматическая — будет добавляться в данный ответ метода предрасчета и применяться к заказу автоматически, в соответствии с условиям скидки на кассе. Ее id не нужно указывать в данных запроса метода предрасчета, но она будет указана в ответе.
- rk7Id — идентификатор скидки в r_keeper.
После каждого изменения данных по заказу
- адрес
- ID ресторана
- номер телефона гостя
- состав блюд
- набор ручных скидок для применения
необходимо повторно вызывать метод предрасчета с обновленными данными в запросе.
Создание заказа
После уточнения деталей заказа и срабатывания метода предрасчета, необходимо создать заказ.
Обратите внимание: без вызова метода предварительного расчета, создавать заказ нельзя. В противном случае скидки могут быть применены некорректно или вообще не применены.
Пример запроса:
Пример тела запроса:
где discounts — блок, в котором необходимо отправить все данные, полученные в методе предрасчета заказа в блоке amount.discounts.
Подробнее о других параметрах читайте в статье Создание заказа.
Пример ответа:
где orderId — это номер созданного заказа.
Редактирование заказа
Если заказ необходимо отредактировать после создания:
- Сделайте запрос предварительного расчета с номером заказа
- Сделайте запрос на редактирование заказа.
Пример вызова повторного метода предварительного расчета:
Пример тела запроса, где будет указан номер заказа:
где orderId — номер заказа, который был получен ранее.
Пример ответа:
Только после повторного запроса предрасчета можно приступать к редактированию заказа. Пример метода запроса редактирования заказа:
Пример тела запроса:
В блоке discounts в запросе на редактирование укажите данные, полученные в последнем предрасчете в блоке amount.discounts. Подробнее о запросе и других параметрах читайте в статье Изменение заказа.
Пример ответа: