====== Описание протокола взаимодействия с 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 - "Отменен" - Работники ресторана отменили заказ по той или иной причине