Создание заказа
Введение
Перед созданием заказа системе необходимо:
- Убедиться, адрес клиента — в зоне доставке.
- Выбрать нужное заведение, которое доставляет по указанному адресу, если доставкой занимается несколько ресторанов.
Перед запросом на создание заказа, используйте запрос на поиск подходящего ресторана по координатам.
Запрос:
GET https://delivery.ucs.ru/orders/api/v1/restaurants/geo/first
с параметрами:
- lat — ширина, на которой находится адрес клиента
- lon — долгота, на которой находится адрес клиента.
Чтобы узнать координаты конкретного адреса, используйте запрос для поиска адресов.
Запрос:
GET https://delivery.ucs.ru/orders/api/v1/addresses/suggestions
где параметр search отвечает за адрес.
Пример запроса:
https://delivery.ucs.ru/orders/api/v1/addresses/suggestions?search=%D0%93%D0%BE%D0%B3%D0%BE%D0%BB%D1%8F+13
Пример ответа:
"result": [
{
"address": "Новосибирск улица Гоголя, 13",
"fullAddress": "Новосибирск улица Гоголя, 13",
"country": "Новосибирск",
"region": "",
"city": "Новосибирск",
"street": "улица Гоголя",
"house": " 13",
"building": "",
"postalCode": "",
"geoLat": 55.04372025,
"geoLon": 82.92234039,
"geoAccuracy": "None"
},
{
"address": "Алматы улица Гоголя, 13",
"fullAddress": "Алматы улица Гоголя, 13",
"country": "Алматы",
"region": "",
"city": "Алматы",
"street": "улица Гоголя",
"house": " 13",
"building": "",
"postalCode": "",
"geoLat": 43.2612915,
"geoLon": 76.96231842,
"geoAccuracy": "None"
},
]
}
Пример запроса:
GET https://delivery.ucs.ru/orders/api/v1/restaurants/geo/first?lat=55.706882&lon=37.592094
Пример ответа:
{
"result":{
"restaurantId":"76439fb3-c0c4-42ca-a269-64f031a6a33b",
"restaurantName":"Ресторан 0263",
"polygonId":"b87fc7ba-cbf0-47da-b2ff-a92de8c8a827",
"polygonName":"Москва 263",
"legalAddress":"г Москва, ул Зорге, д 28",
"objectId":199990263,
"corporationId":"ce939b6c-611d-47a1-90a6-5054c8492733",
"minOrderAmountDelivery":0.0,
"minOrderAmountFreeDelivery":0.0,
"amountDelivery":null,
"deliveryTime":0,
"priority":0,
"typeOfTransportIds":[
],
"isActive":true
}
}
Полученный restaurantId используйте в теле запроса на создание заказа.
Запрос
POST https://delivery.ucs.ru/orders/api/v1/orders
Content-Type: application/json
Пример запроса
{
"comment": "приготовьте с любовью ",
"restaurantId": "76439fb3-c0c4-42ca-a269-64f031a6a33b",
"persons": "1",
"dishList": [
{
"id": "76439fb3-c0c4-42ca-a269-64f031a6a33b",
"name": "салат цезарь",
"price": "400",
"measure": {
"value": "0.300",
"unit": "кг"
},
"quantity": "1",
"ingredients": [
{
"id": "76439fb3-c0c4-42ca-a269-64f031a6a33b",
"name": "помидоры",
"price": "120",
"measure": {
"value": "0.100",
"unit": "кг"
},
"quantity": "2"
}
]
}
],
"expeditionType": "delivery",
"expectedAt":"2021-06-16T14:03:42.504+03:00",
"paymentTypeId": "card",
"changeFrom": "5000",
"guest": {
"email": "eewd@dgf.ru",
"phone": "79211234567",
"firstName": "Олег"
},
"address": {
"postcode": "109443",
"cityId": "73439fb3-c0c4-42ca-a269-64f031a6a33b",
"street": "Юных Ленинцев",
"comment": " дом находится справа от школы",
"lat": "55.700897",
"lon": "37.773808",
"cityName": "Москва",
"entrance": "1",
"houseNumber": "85",
"apartmentNumber": "6",
"intercom": "6В",
"subway": "Кузьминки",
"fullAddress": "109443, г Москва, ул Юных Ленинцев, д 85 к 2, кв 6"
}
}
При передаче параметра expectedAt обязательно укажите временную зону
Ответ
Status code: 201
Параметр | Описание | Пример | |
---|---|---|---|
orderId | string | номер заказа |
CODE
|
Параметры
В зависимости от способа доставки: delivery (доставка курьером) или pickup (самовывоз) обязательность полей изменяется.
Чтобы система передавала заказы сразу, указывайте в запросе параметр Как можно скорее
"soonest": true
и не указывайте в таком случае параметр expectedAt. В этом случае он не обязательный. Заказы Как можно скорее передаются на кассу с минимальной задержкой.
Параметр | Описание | Обязательный для delivery | Обязательный для pickup | Ограничения | |
---|---|---|---|---|---|
comment | string | комментарий к заказу | |||
restaurantId | string | id ресторана (формат GUID) из Delivery | да | да | формат GUID |
persons | int | количество персон | > 0, макс. 2147483647 | ||
dishList | array | состав заказа | да | да | |
-id | string | id блюда(формат GUID) из представления меню Delivery, которое используется для синхронизации с кассой | да, если не заполнен externalId | да, если не заполнен externalId | формат GUID |
-name | string | наименование блюда | - | ||
-price | double разделителем всегда будет точка - "." | цена блюда | 131072 цифр до разделителя целой и дробной части и 16383 цифра после разделителя | ||
-measure | мера | ||||
--value | double | размер порции | |||
--unit | string | единица измерения: кг, литр, шт. Значение не словарное | |||
-quantity | double разделителем всегда будет точка - "." | количество блюд | да | да | |
-ingredients | array | ингредиенты | |||
--id | string | id ингредиента (формат GUID) из представления меню Delivery, которое используется для синхронизации с кассой | формат GUID | ||
--name | string | наименование ингредиента | - | ||
--price | double разделителем всегда будет точка - "." | цена ингредиента | - | ||
--quantity | double разделителем всегда будет точка - "." | количество ингредиента | да | да | > 0 |
--ingredients | array | модификаторы | |||
---id | string | id модификатора (формат GUID) из представления меню Delivery, которое используется для синхронизации с кассой | формат GUID | ||
---name | string | наименование модификатора | - | ||
---price | double разделителем всегда будет точка - "." | цена модификатора | - | ||
---quantity | double разделителем всегда будет точка - "." | количество модификатора | да | да | > 0 |
expeditionType | string | id способа получения заказа:
| да | да | только pickup или delivery |
soonest | boolean | время передачи заказа "Как можно скорее" | только true или false | ||
expectedAt | DateTime | время к которому ожидается заказ | да\ нет, если передан параметр soonest | да | |
paymentTypeId | string | id способа оплаты:
| да | да | только cash, card или online |
changeFrom | double разделителем всегда будет точка - "." | сдача с какой суммы | - | ||
guest | гость | да | да | ||
string | электронная почта гостя | ст. правила email | |||
-phone | string | номер телефона | да | да | телефонный номер |
-firstName | string | имя | - | ||
-lastName | string | фамилия | - | ||
address | адрес доставки | ||||
-postcode | string | почтовый индекс | - | ||
-street | string | улица | да | - | |
-comment | string | комментарий к адресу | - | ||
-lat | double разделителем всегда будет точка - "." | широта | >= -90 и <=90 | ||
-lon | double разделителем всегда будет точка - "." | долгота | >= -180 и <=180 | ||
-cityId | string | id города | - | ||
-cityName | string | наименование города | да | - | |
-floor | int | этаж | макс. 2147483647 | ||
-houseNumber | string | номер дома | да | не более 200 символов | |
-apartmentNumber | string | номер квартиры | не более 20 символов | ||
-intercom | string | домофон | не более 20 символов | ||
-entrance | string | вход | не более 30 символов | ||
-subway | string | метро | не более 100 символов | ||
-fullAddress | string | полный адрес | да | не более 150 символов |
Для наполнения заказа блюдами, у которых в свойстве Добавление в заказ выбран вариант Отдельная строка для каждой порции, блюда должны отправляться по отдельности в составе блюд dishList. Например, не "quantity":"3", а 3 раза по "quantity":"1".
"dishList":[ { "externalId":"1000737", "price":"260", "quantity":"3", "ingredients":[ { "externalId":"1003205", "quantity":"1" }, { "externalId":"1000215", "quantity":"1" }, { "externalId":"1003210", "quantity":"1" }, { "externalId":"1003305", "quantity":"1" }, { "externalId":"1000218", "quantity":"1" }, { "externalId":"1002372", "quantity":"1" }, { "externalId":"1000221", "quantity":"1" }, { "externalId":"1000224", "quantity":"1" }, { "externalId":"1002376", "quantity":"1" }, { "externalId":"1002834", "quantity":"1" } ] } ]
"dishList":[ { "externalId":"1000737", "price":"260", "quantity":"1", "ingredients":[ { "externalId":"1003205", "quantity":"1" }, { "externalId":"1000215", "quantity":"1" }, { "externalId":"1003210", "quantity":"1" }, { "externalId":"1003305", "quantity":"1" }, { "externalId":"1000218", "quantity":"1" }, { "externalId":"1002372", "quantity":"1" }, { "externalId":"1000221", "quantity":"1" }, { "externalId":"1000224", "quantity":"1" }, { "externalId":"1002376", "quantity":"1" }, { "externalId":"1002834", "quantity":"1" } ] }, { "externalId":"1000737", "price":"260", "quantity":"1", "ingredients":[ { "externalId":"1003205", "quantity":"1" }, { "externalId":"1000215", "quantity":"1" }, { "externalId":"1003210", "quantity":"1" }, { "externalId":"1003305", "quantity":"1" }, { "externalId":"1000218", "quantity":"1" }, { "externalId":"1002372", "quantity":"1" }, { "externalId":"1000221", "quantity":"1" }, { "externalId":"1000224", "quantity":"1" }, { "externalId":"1002376", "quantity":"1" }, { "externalId":"1002834", "quantity":"1" } ] }, { "externalId":"1000737", "price":"260", "quantity":"1", "ingredients":[ { "externalId":"1003205", "quantity":"1" }, { "externalId":"1000215", "quantity":"1" }, { "externalId":"1003210", "quantity":"1" }, { "externalId":"1003305", "quantity":"1" }, { "externalId":"1000218", "quantity":"1" }, { "externalId":"1002372", "quantity":"1" }, { "externalId":"1000221", "quantity":"1" }, { "externalId":"1000224", "quantity":"1" }, { "externalId":"1002376", "quantity":"1" }, { "externalId":"1002834", "quantity":"1" } ] } ],
Создание заказа с несуществующим адресом
Курьерам ресторана будет сложно доставить заказ. Также такие заказы не сможет обработать сторонняя служба доставки, например, Яндекс.Доставка.
В быстрорастущих населенных пунктах адреса не успевают попадать в систему баз данных, к которой обращается r_k Delivery. Для таких ситуаций, а также если необходимо разрешить доставку в места без адресов, существует возможность создавать заказы без указания дома и координат.
Запрос:
POST https://delivery.ucs.ru/orders/api/v1/orders
Content-Type: application/json
Пример такого запроса:
{
"comment": "приготовьте с любовью ",
"restaurantId": "76439fb3-c0c4-42ca-a269-64f031a6a33b",
"persons": "1",
"dishList": [
{
"id": "76439fb3-c0c4-42ca-a269-64f031a6a33b",
"name": "салат цезарь",
"price": "400",
"measure": {
"value": "0.300",
"unit": "кг"
},
"quantity": "1",
"ingredients": [
{
"id": "76439fb3-c0c4-42ca-a269-64f031a6a33b",
"name": "помидоры",
"price": "120",
"measure": {
"value": "0.100",
"unit": "кг"
},
"quantity": "2"
}
]
}
],
"expeditionType": "delivery",
"expectedAt":"2021-06-16T14:03:42.504+03:00",
"paymentTypeId": "card",
"changeFrom": "5000",
"guest": {
"email": "eewd@dgf.ru",
"phone": "79211234567",
"firstName": "Олег"
},
"address":{
"street":"ал Кремлёвских Курсантов",
"comment":"Домофон не работает, это дачный поселок. Звонить на мобильный",
"lat":0,
"lon":0,
"cityName":"г Москва",
"apartmentNumber":"1",
"fullAddress":"ал Кремлёвских Курсантов",
"floor":1
},
}