====== Описание API ====== ===== Перечень методов API ProCart ===== * **/ping** - служебный метод для проверки связи, состояния лицензии, валидности токена. * **/getmenu** - метод для получения меню (классификация, блюда и их свойства, остатки, схемы модификаторов и комбо). * **/validate** - метод для проверки возможности создания заказа (заказ НЕ создается). * **/postorder** - метод для создания заказа в кассовой системе. * **/getorders** - метод для получения информации о заказах. * **/close** - метод для закрытия заказа. * **/internal/print_info** - служебный метод для получения длинных комментариев (используется в макетах печатных форм r_keeper). Документация к API - [[http://95.64.142.2:1112/swagger#|ссылка]] Токен API: 28bb0d65-d1a3-447d-a3eb-e4961b0ffd35 Все запросы отправляются в "ip:port/api/v3" Например [[http://127.0.0.1:11111/api/v3/ping|127.0.0.1:11111/api/v3/ping]] **Важно!** Все методы возвращают ответы в кодировке UTF-8 ===== Некоторые особенности использования методов API ===== Метод **/ping** не является обязательным и не приводит ни к каким действиям на стороне кассовой системы, но в то же время он очень полезен. С его помощью можно: * Проверить доступность ProCart * Проверить связь между модулем ProCart и кассовым сервером * Получить информацию о версиях ProCart и кассовой системы r_keeper * Получить информацию о наличии лицензии на модуль ProCart * Проверить валидность токена используемого для работы Рекомендуется выполнять запрос **/ping** при начале работы. ---- Метод **/getmenu** позволяет получить информацию о блюдах и их остатках, доступных для продажи во внешней системе. При большом количестве блюд, ответ на данный запрос может занимать значительное время (500-2000 мс), поэтому рекомендуется производить кеширование ответов на стороне внешней системы. Модуль ProCart так же кеширует меню на своей стороне и проверяет обновления с периодичностью 10-60 секунд. Поэтому для внешней системы вызывать метод **/getmenu** чаще чем 1 раз в минуту не имеет особого смысла. ---- Метод **/validate** так же не является обязательным, но его использование крайне рекомендовано. Данный метод позволяет провалидировать содержимое корзины. Т.е. убедиться что такой заказ можно создать в кассовой системе в текущий момент времени. Данный метод так же нужен для корректного отображения "корзины" во внешней системе. Т.к. в зависимости от настроек r_keeper и дополнительных параметров заказа ("категория заказа", стол, скидка и т.п.) кассовая система может изменять стоимость блюд в заказе. **Важно!** Вызов данного метода не приводит ни к каким событиям на кассе (заказ не создается). ---- Метод **/postorder** создает заказ на кассе r_keeper. Если заказ создан успешно, то в ответе на запрос вернется GUID созданного в системе r_keeper заказа, используя который в дальнейшем можно отслеживать изменения состояния этого заказа используя метод **/getorders** **Важно!** Если логика внешней системы подразумевает оплату заказа, то перед тем как вызвать метод **/postorder** необходимо провести оплату заказа (а сумму к оплате взять из ответа на запрос **/validate**). И только после успешной оплаты создавать заказ методом **/postorder**, не забыв при этом передать данные об оплате. ===== Типовая схема запросов ===== В итоге, для того что бы создать заказ на кассе, внешняя система должны последовательно выполнить запросы: - Убедиться в доступности шлюза ProCart (**/ping**). - Получить список блюд доступных для продажи (**/getmenu**). - Убедиться в возможности создания заказа с нужным перечнем блюд в текущий момент времени (**/validate**). - Создать заказ (**/postorder**). - При необходимости отслеживать дальнейшие изменения статуса заказа (**/getorders**). ---- **Важно!** При создании заказа, через **callback_url** возможно указать адрес, куда будет отправляться состояние заказа при изменении его статуса. Заказ может иметь статус: * deferred - заказа создан в кассовой системе как черновик * open - заказ создан в кассовой системе и с ним ведётся работа * bill - в заказе выбит пречек * close - закрыт выполнен рассчёт по заказу и выбит чек * deleted - заказ удалён в кассовой системе