Введение

Перед созданием заказа системе необходимо:

  • Убедиться, адрес клиента — в зоне доставке. 
  • Выбрать нужное заведение, которое доставляет по указанному адресу, если доставкой занимается несколько ресторанов.

  Перед запросом на создание заказа, используйте запрос на поиск подходящего ресторана по координатам.

Запрос:

GET https://delivery.ucs.ru/orders/api/v1/restaurants/geo/first
JSON

с параметрами:

  • lat — ширина, на которой находится адрес клиента
  • lon — долгота, на которой находится адрес клиента.

Чтобы узнать координаты конкретного адреса, используйте запрос для поиска адресов.

Запрос:

GET https://delivery.ucs.ru/orders/api/v1/addresses/suggestions
JSON

где параметр search отвечает за адрес.

Пример запроса:

https://delivery.ucs.ru/orders/api/v1/addresses/suggestions?search=%D0%93%D0%BE%D0%B3%D0%BE%D0%BB%D1%8F+13
JSON

Пример ответа:

    "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"
        },     
    ]
}
JSON

Пример запроса:

GET https://delivery.ucs.ru/orders/api/v1/restaurants/geo/first?lat=55.706882&lon=37.592094
JSON

Пример ответа:

{
   "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
   }
}
JSON

Полученный 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" 
  } 
}
JSON

При передаче параметра expectedAt обязательно укажите временную зону

Ответ

Status code: 201

Параметр 
ОписаниеПример
 orderId

stringномер заказа 
{
   "result": {
      "orderId": "765"
   }
}
CODE

Параметры

В зависимости  от способа доставки:  delivery (доставка курьером) или pickup (самовывоз) обязательность полей изменяется.

Чтобы система передавала заказы сразу, указывайте в запросе параметр Как можно скорее

"soonest": true
CODE

и не указывайте в таком случае параметр expectedAt. В этом случае он не обязательный. Заказы Как можно скорее передаются на кассу с минимальной задержкой.

Параметр
ОписаниеОбязательный для deliveryОбязательный для pickupОграничения
commentstringкомментарий к заказу


restaurantIdstringid ресторана (формат GUID) из Deliveryдадаформат GUID
personsintколичество персон

> 0, макс. 2147483647
dishListarrayсостав заказадада

-id

stringid блюда(формат GUID) из представления меню Delivery, которое используется для синхронизации с кассойда, если не заполнен externalIdда, если не заполнен externalIdформат GUID
-namestringнаименование блюда

-
-price

double

разделителем всегда будет  точка - "." 

цена блюда

131072 цифр до разделителя целой и дробной части и 16383 цифра после разделителя
-measure
мера


--valuedoubleразмер порции


--unitstringединица измерения: кг, литр, шт. Значение не словарное 


-quantity

double

разделителем всегда будет  точка - "." 

количество блюддада
-ingredientsarrayингредиенты 


--idstringid ингредиента (формат GUID) из представления меню Delivery, которое используется для синхронизации с кассой

формат GUID
--namestringнаименование ингредиента

-
--price

double

разделителем всегда будет  точка - "." 

цена ингредиента

-
--quantity

double

разделителем всегда будет  точка - "." 

количество ингредиентадада> 0
--ingredientsarrayмодификаторы 


---idstringid модификатора (формат GUID) из представления меню Delivery, которое используется для синхронизации с кассой

формат GUID
---namestringнаименование модификатора

-
---price

double

разделителем всегда будет  точка - "." 

цена модификатора

-
---quantity

double

разделителем всегда будет  точка - "." 

количество модификаторадада> 0
expeditionTypestring

id способа получения заказа:

  • "delivery" - доставка 
  • "pickup" - самовывоз 
дадатолько pickup или delivery 
soonestbooleanвремя передачи заказа "Как можно скорее"

только true или false
expectedAtDateTimeвремя к которому ожидается заказда\
нет, если передан параметр soonest
да
paymentTypeIdstring

id способа оплаты:

  • "cash" - оплата наличными
  • "card" - оплата картой
  • "online" - онлайн оплата.
дадатолько cash, card или online
changeFrom

double

разделителем всегда будет  точка - "." 

сдача с какой суммы

-
guest
гостьдада
-emailstringэлектронная почта гостя

ст. правила email
-phonestringномер телефонададателефонный номер
-firstNamestringимя

-
-lastNamestringфамилия 

-
address
адрес доставки


-postcodestringпочтовый индекс

-
-streetstringулицада
-
-commentstringкомментарий к адресу

-
-lat

double

разделителем всегда будет  точка - "." 

широта

>= -90 и <=90
-lon

double

разделителем всегда будет  точка - "." 

долгота

>= -180 и <=180
-cityIdstringid города

-
-cityNamestringнаименование городада
-
-floorintэтаж

макс. 2147483647
-houseNumberstringномер домада
не более 200 символов
-apartmentNumberstringномер квартиры 

не более 20 символов
-intercom stringдомофон

не более 20 символов
-entrancestringвход

не более 30 символов
-subwaystringметро

не более 100 символов
-fullAddressstringполный адресда
не более 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
   },
}
JSON