Содержание

Описание протокола взаимодействия с API мини доставки v1 (устаревшее)

ВНИМАНИЕ

Данная версия API доставки в настоящее время является устаревшей и более не поддерживается.

Начиная с версии v3.0.5.959 доступен API v2

Общие положения

API доставки реализовано в рамках HTTP протокола.

При обмене используется кодовая страница Windows-1251.

Каждый запрос к API должен иметь заголовок Token, значение которого выдается владельцем доставки. Токен передается без префикса:

Token: *token*

Базовый URL для запросов: http://IP:PORT/api/ext/

Получение меню

Для получения списка блюд, доступных к заказу необходимо отправить GET запрос /getmenu

В ответ вернется JSON объект, содержащий поля result:boolean, msg:string и data:array

result - указывает на существование ошибки при обработке запроса. (result = false - запрос не выполнен)

msg - текстовое сообщение. В случае ошибки будет передан текст ошибки

data - один, или несколько JSON объектов, описывающих блюда, доступные к продаже

Пример объекта, описывающего блюдо:

{
  "code":"8",
  "name":"Хлеб",
  "price": 38000,
  "categpath":"Кухня\\Выпечка",
  "image":"http://server.com/images/dish8.png"
}

code - Код блюда в справочнике системы. Должен быть передан при создании заказа.

name - Название блюда для отображения. Так же передается при создании заказа.

price - Стоимость одной порции блюда в копейках.

categpath - Путь по категориям для формирования дерева меню.

image - Путь к картинке этого блюда. Путь задается в справочнике меню.

Внимание!!!

Формирование ответа на данный запрос может занимать до десяти секунд, в зависимости от количества блюд в меню конкретного заведения.

В силу однопоточности сервера доставки, рекомендуется выполнять этот запрос не чаще двух-трех раз в сутки и кэшировать полученные данные дабы не парализовать работу доставки в заведении.

Создание заказа

Для создания заказа необходимо отправить POST запрос /postorder, в теле которого должен содержаться JSON объект следующего содержания:

{
    "guest":{
        "sname":"Иванов",
        "fname":"Иван",
        "mname":"Иванович",
        "phone":"77776665544",
        "address":"Ул.пушкина"
    },
    "order":{
        "type":"1",
        "comment":"Две персоны",
        "deliverat":"2020-01-13 12:30:00",
        "content":[
            {"name":"Пирог", "code":8, "quantity":2},
            {"name":"Хлеб","code":9, "quantity":1}
        ]
    }
}

guest.[s,f,m]name - Фамилия, Имя, Отчество гостя соответственно.

guest.phone - Номер телефона гостя. По возможности передавать без каких либо спецсимволов.

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

order.type - тип заказа. 0 - Самовывоз, 1 - Доставка. Должен быть передан как str

order.comment - комментарий к заказу

order.deliverat - Время, к которому гость будет ждать доставку.

Формат: yyyy-mm-dd hh:mm:ss Запас по времени должен обсуждаться с конкретным заведением.

order.content - список блюд, заказанных гостем. order.content[n].name, code - название и код блюда, которые были получены в запросе getmenu

order.content[n].quantity - целочисленное количество порций блюда.

code и quantity должны быть переданы как int

В ответ на запрос вернется JSON объект, содержащий поле result:boolean

Если result = true, то заказ создан и так же передано поле order_id:int - идентификатор нового заказа

Eсли result = false, то при создании заказа возникла ошибка, текст которой будет передан в поле msg:str

Получение статуса заказа

После успешного сохранения заказа можно получить его статус:

GET запрос /orderstate?order_id=[order_id]

*order_id - ИД созданного заказа, который вернулся в ответ на /postorder

В ответ на запрос вернется JSON объект, где

result:boolean - результат выполнения запроса

если result == False, то будет передан msg - текстовое описание ошибки, иначе будет передано поле order_state:integer

Статусы заказов: