====== Описание протокола взаимодействия с API мини доставки v1 (устаревшее) ======
**ВНИМАНИЕ** \\
**Данная версия API доставки в настоящее время является устаревшей и более не поддерживается.\\
Начиная с версии v3.0.5.959 доступен [[external:доставка:api:extv2|API v2]]**
===== Общие положения =====
API доставки реализовано в рамках HTTP протокола.\\
При обмене используется кодовая страница Windows-1251.
Каждый запрос к API должен иметь заголовок Token, значение которого выдается владельцем доставки. Токен передается без префикса:
Token: *token*
Базовый URL для запросов: **[[http://IP:PORT/api/ext/|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
Статусы заказов:
* 0 - "Ожидает" - Такой статус имеют заказы только что созданные через API \\ Они еще не обработаны оператором в ресторане
* 1 - "В работе" - Заказ обработан в заведении и передан на кухню.
* 2 - "В пути" - Заказ отправлен с курьером
* 3 - "В архиве" - Курьер вернулся в ресторан, заказ полностью завершен
* 4 - "Отменен" - Работники ресторана отменили заказ по той или иной причине