Создание заказа
Введение
Перед созданием заказа системе необходимо:
- Убедиться, адрес клиента — в зоне доставке.
- Выбрать нужное заведение, которое доставляет по указанному адресу, если доставкой занимается несколько ресторанов.
Перед запросом на создание заказа, используйте запрос на поиск подходящего ресторана по координатам.
Запрос:
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 |
| paymentStatus | string | Укажите "prepaid" только в том случае, если заказ уже предоплачен онлайн на момент создания заказа, и только если способ оплаты "paymentTypeId": "online" | нет | нет | Только "prepaid" или отсутсвует (null) только в случае "paymentTypeId": "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
},
}
Создание заказа с указанием номера стола
При использовании функционала доставки для работы с QR-menu в зале заведения можно указывать номер стола при создании заказа.
За номер стола отвечает необязательный параметр tableCode — код стола из менеджерской r_keeper. Его можно указывать при отправке запроса на создание заказа через r_k Delivery.
Пример
{
//...
"tableCode": "10",
//...
}