Описание протокола взаимодействия с 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
Статусы заказов:
- 0 - «Ожидает» - Такой статус имеют заказы только что созданные через API
Они еще не обработаны оператором в ресторане - 1 - «В работе» - Заказ обработан в заведении и передан на кухню.
- 2 - «В пути» - Заказ отправлен с курьером
- 3 - «В архиве» - Курьер вернулся в ресторан, заказ полностью завершен
- 4 - «Отменен» - Работники ресторана отменили заказ по той или иной причине