Создание заказа с платной доставкой
Введение
В этой статье рассматривается сценарий создания заказа с платной доставкой на сайте ресторана.
Основы взаимодействия сайта ресторана с r_k Delivery описаны в статьях Возможности API.
Базовый сценарий создания заказа с платной доставкой:
- Получение предрасчета заказа, чтобы отобразить стоимость доставки до создания заказа
- Создание заказа.
Предварительные настройки
Перед созданием заказа:
- Настройте заведение в r_k Delivery
- Настройте подключение по API для бэкенда сайта или бэкенда приложения ресторана.
Метод предрасчета
Используйте метод предварительного расчета заказа, чтобы получить данные расчета стоимости доставки, когда гость создает заказ.
Метод должен использоваться после заполнения или изменения деталей заказа, которые влияют на стоимость доставки, например:
- Сумма заказа
- Адрес доставки
- Ресторан.
Если способ доставки — самовывоз, то рассчитывать стоимость доставки нет необходимости, соответственно, использовать метод предрасчета не нужно.
Запрос:
HTTP POST /orders/api/v1/orders/delivery
Пример запроса:
HTTP POST https://delivery.ucs.ru/orders/api/v1/orders/delivery
Пример данных тела запроса:
{
"dishList":[
{
"id":"b5a5e2e8-958e-765c-2822-d5cf7c60df7d",
"name":"Салат Мимоза",
"price":200,
"discount":0,
"schemeId":"",
"description":"",
"imageUrls":[
],
"measure":{
"value":0,
"unit":""
},
"isContainInStopList":[
],
"quantity":1,
"ingredients":[
],
"isListStoped":false
}
],
"address": {
"postcode": "109443",
"cityId": "73439fb3-c0c4-42ca-a269-64f031a6a33b",
"street": "Юных Ленинцев",
"comment": " дом находится справа от школы",
"lat": "55.700897",
"lon": "37.773808",
"cityName": "Москва",
"entrance": "1",
"houseNumber": "85",
"apartmentNumber": "6",
"subway": "Кузьминки",
"fullAddress": "109443, г Москва, ул Юных Ленинцев, д 85 к 2, кв 6"
},
"expectedAt":"2022-06-16T09:41:08.278+03:00",
"soonest":true,
"useLoyalty":false,
"restaurantId":"18f550d8-7fbe-45fa-8c83-35f531380f65",
"phone":"71111111111",
"expeditionType":"delivery",
"useLoyaltyBonusPayments":false
}
Параметр | Тип параметра | Описание |
---|---|---|
dishList | array | состав заказа |
-id | string | id блюда(формат GUID) из представления меню Delivery, которое используется для синхронизации с кассой |
-name | string | наименование блюда |
-price | double разделителем всегда будет точка - "." | цена блюда |
-discount | double | скидка |
-measure | мера | |
--value | double | размер порции |
--unit | string | единица измерения: кг, литр, шт. Значение не словарное |
-quantity | double разделителем всегда будет точка - "." | количество блюд |
-ingredients | array | ингредиенты |
--id | string | id ингредиента (формат GUID) из представления меню Delivery, которое используется для синхронизации с кассой |
--name | string | наименование ингредиента |
--price | double разделителем всегда будет точка - "." | цена ингредиента |
--quantity | double разделителем всегда будет точка - "." | количество ингредиента |
--ingredients | array | модификаторы |
---id | string | id модификатора (формат GUID) из представления меню Delivery, которое используется для синхронизации с кассой |
---name | string | наименование модификатора |
---price | double разделителем всегда будет точка - "." | цена модификатора |
---quantity | double разделителем всегда будет точка - "." | количество модификатора |
-isListStoped | string | находится ли в стоп-листе |
address | адрес доставки В случае самовывоза принимает значение null. Пример параметров при указании адреса читайте в статье Создание заказа | |
expectedAt | DateTime | время к которому ожидается заказ |
soonest | bool | привезти заказа как можно скорее Если принимает значение true, то значение параметра expectedAt можно не отправлять: система рассчитает его автоматически. Если принимает значение false, то параметр expectedAt — обязателен |
useLoyalty | bool | использование лояльности в заказу Принимает значение true – если лояльность используется. Принимает значение false – если не используется. |
restaurantId | string | id ресторана |
phone | string | номер телефона гостя |
expeditionType | string | тип доставки pickup - самовывоз delivery - доставка |
useLoyaltyBonusPayments | string | списание бонусов лояльности. Если не используется - false |
orderId | string | id заказа, если расчёт производится по существующему заказу в целях его редактирования |
Отображение стоимости доставки гостю на сайте
Если доставка платная, то исходя из условий зоны, рассчитывается ее стоимость. Условия платной доставки настраиваются в административной панели r_k Delivery. Подробнее — в статье Зоны доставок.
Пример ответа метода предрасчета:
{
"result":{
"amount":{
"totalAmount":200.0,
"orderAmount":100.00,
"deliveryAmount":100.0,
"discountDeliveryAmount":0.0,
"minOrderAmountFreeDelivery":600.0,
"needForFree":600.0,
"dishList":[
{
"id":"c4f7e375-0791-88c3-75cf-a8727744bf79",
"name":"Крабовый салат",
"price":100.0,
"measure":{
"value":0.0,
"unit":"",
"calcByWeight":false,
"weight":0.0,
"priceMode":"",
"qntDecDigits":0,
"changeQntOnce":null,
"joinMode":""
},
"quantity":1.0,
"ingredients":[
],
"discount":0.0,
"comment":""
}
]
},
"times":{
"deliveryTime":360
}
}
}
Параметр | Тип параметра | Описание |
---|---|---|
result | составной объект | Результирующий объект с параметрами ответа |
-amount | составной объект | Объект с суммами по заказу |
--deliveryAmount | double разделителем всегда будет точка - "." | Рассчитанная стоимость доставки |
--orderAmount | double разделителем всегда будет точка - "." | Сумма заказа без учёта стоимости доставки |
--totalAmount | double разделителем всегда будет точка - "." | Сумма заказа с учётом стоимости доставки |
Отображение бесплатной стоимости доставки гостю на сайте
Условия бесплатной доставки настраиваются в административной панели r_k Delivery. Подробнее — в статье Зоны доставок.
Пример ответа метода предрасчета, если доставка бесплатная:
{
"result":{
"amount":{
"totalAmount":100.0,
"orderAmount":100.00,
"deliveryAmount":0.0,
"discountDeliveryAmount":0.0,
"minOrderAmountFreeDelivery":50.0,
"needForFree":0.0,
"dishList":[
{
"id":"c4f7e375-0791-88c3-75cf-a8727744bf79",
"name":"Крабовый салат",
"price":100.0,
"measure":{
"value":0.0,
"unit":"",
"calcByWeight":false,
"weight":0.0,
"priceMode":"",
"qntDecDigits":0,
"changeQntOnce":null,
"joinMode":""
},
"quantity":1.0,
"ingredients":[
],
"discount":0.0,
"comment":""
}
]
},
"times":{
"deliveryTime":360
}
}
}
Создание заказа
После отображения стоимости доставки гость подтвердил заказ. Теперь необходимо создать заказ с помощью запроса Создание заказа.
Пример запроса:
POST https://delivery.ucs.ru/orders/api/v1/orders
Content-Type: application/json
Пример тела запроса:
{
"comment":"",
"persons":1,
"expeditionType":"delivery",
"paymentTypeId":"card",
"soonest":true,
"dishList":[
{
"id":"c4f7e375-0791-88c3-75cf-a8727744bf79",
"categoryId":"",
"name":"Крабовый салат",
"price":100,
"discount":0,
"measure":{
"value":0,
"unit":"",
"weight":0,
"calcByWeight":false,
"qntDecDigits":0,
"joinMode":"",
"priceMode":""
},
"isContainInStopList":[
],
"quantity":1,
"ingredients":[
],
"comment":""
}
],
"changeFrom":null,
"guest":{
"firstName":"1",
"lastName":"",
"phone":"71111111111",
"email":null
},
"address":{
"id":"437bc228-5d0b-47df-91af-d21c899a0474",
"postcode":"",
"street":"ал Кремлёвских Курсантов",
"comment":"Домофон не работает",
"lat":55.678555,
"lon":37.783842,
"cityName":"г Москва",
"apartmentNumber":"1",
"houseNumber":"11",
"entrance":"1",
"intercom":"1",
"fullAddress":"ал Кремлёвских Курсантов, 11",
"subway":"",
"floor":1,
"building":""
},
"restaurantId":"18f550d8-7fbe-45fa-8c83-35f531380f65"
}
Подробнее о запросе и его параметрах читайте в статье Создание заказа.
Обратите внимание: при создании заказа в самом запросе не нужно дополнительно указывать стоимость доставки, она добавится автоматически.
Пример ответа:
{
"result":{
"orderId":"67598"
}
}
где orderId — это номер заказа.
Если при формировании заказа на сайте изменились такие параметры, как:
- Сумма заказа, например, изменился состав блюд
- Адрес доставки
- Ресторан, в который планируется отправить заказ
То для отображения актуальной суммы доставки, необходимо повторно использовать метод предрасчета /delivery.