Интеграция с сайтом HTTP API
Общая информация
URL API: https://jupiter.report/site-api/
Авторизация
Передайте токен авторизации в заголовке запроса X-Jup-Api-Key
Для получения API-Key обратитесь в техподдержку
Результаты обработки запроса
Если запрос успешно обработан, сервер вернет ответ с статусом 200.
Если при обработке запроса были ошибки, сервер вернет ответ со статусом ошибки (400, 401, 500) и описание ошибки.
{
"error": "Некорректный Api-Key" // Описание ошибки
}
Концепции
Ресторан может одновременно работать с разными концепциями, например "Лучшая пицца" и "Вкусные суши". Каждая концепция может иметь свои зоны доставки и меню. Товары в разных концепциях могут пересекаться, но иметь разные цены.
Зоны доставки
Сайт может работать как с зонами доставки так и без них.
Определив зону доставки, сайт получает информацию какой ресторан будет выполнять заказ, минимальную стоимость заказа, время доставки, стоп-лист, юридическое лицо для приема онлайн платежей.
Если сайт работает без зон доставки, то он может просто передавать координаты адреса доставки. Юпитер сам определит зону доставки и ресторан, который будет выполнять заказ.
Справочник товаров
Для корректной работы интеграции необходимо выполнить сопоставление справочника товаров между Юпитером и сайтом.
Стоп-лист
Стоп-лист представляет собой список товаров, которые не доступны в данный момент для заказа в ресторане
Настройки интеграции в Юпитере
Вызовы
Получить список ресторанов
Адрес: /restaurants
Метод: GET
Параметры:
- restaurant_id - Не обязательный. Идентификатор ресторана
Тело ответа:
{
"places": [ // Список ресторанов
{
"id": "000127", // Идентификатор ресторана, используется для передачи в заказе restaurant_id
"parent_id": "0001", // Идентификатор торговой точки к которой относится ресторан
"name": "ТЗ Судостроительная, д. 3", // Название
"address": "г. Москва, ул. Судостроительная, д. 3, к. 2; м. Коломенская", // Адрес
"email": "email@ya.ru", // Email
"start_time": 32400, // Время начала работы в секундах, 9:00
"end_time": 82800, // Время завершения работы в секундах, 23:00
"phone": "88005552211", // Телефон для отображения на сайте
"self_delivery": false, // Есть самовывоз. false - нет, true - есть
"ul": { // Информация о юридическом лице
"name": "ООО Быстрая доставка", // Название юр. лица
"inn": "7711111111", // ИНН юр. лица
"kpp": "770000001" // КПП юр. лица
},
"concepts": [ // Список концепций с которыми работает ресторан
{
"id": "7", // Идентификатор концепции
"name": "Вкусные суши" // Название
}
]
}
]
}
Получить список зон доставки
Адрес: /delivery_zones
Метод: GET
Параметры:
- restaurant_id - Обязательный. Идентификатор ресторана
- concept_id - Обязательно если ресторан работает с концепциями. Идентификатор концепции. Если не задан, то список зон возвращаются для концепции default
Тело ответа:
{
"restaurant_id": "002040", // Идентификатор ресторана
"concept_id": "7", // Идентификатор концепции
"lastChange": "2024-05-21T16:19:13.000+03:00", // Дата последнего изменения зон доставки
"zones": [ // Список концепций
{
"id": "028270", // Идентификатор зоны доставки, передается в параметре заказа zone_id
"name": "Москва Зона 1 Сумма минимального заказа 600 руб. Стоимость доставки 125 руб. При заказе от 1200 р. ДОСТАВКА ОСУЩЕСТВЛЯЕТСЯ БЕСПЛАТНО. Время ожидания заказ 75 минут.",
"sum_min": 600, // Минимальная сумма заказа, в рублях
"time_min": 75, // Время доставки от, в минутах
"time_max": 75, // Время доставки до, в минутах
"delivery_price": 125, // Стоимость доставки, в рублях
"sum_for_free": 1200, // Сумма заказа для бесплатной доставки, в рублях
"lastChange": "2024-05-21T16:19:13.000+03:00", // Дата последнего изменения зоны доставки
"coordinates": [ // Координаты вершин полигона
[
"37.52371234879848", // Долгота
"55.84410641903395" // Широта
],
[
"37.514442634443014",
"55.753211478836405"
],
[
"37.75142603657669",
"55.77257777343632"
],
[
"37.745595187258395",
"55.83994903702488"
],
[
"37.52371234879848",
"55.84410641903395"
]
]
}
],
"deleted_zones": [ // Список удалённых зон доставки
{
"id": "111", // Идентификатор удаленённой зоны доставки
"name": "Зона доставки № 3", // Название
"lastChange": "2023-04-19T20:00:00.000+03:00" // Дата последнего изменения (удаления)
}
]
}
Получить меню
Метод: GET
Параметры:
- restaurant_id - Обязательный. Идентификатор ресторана
- concept_id - Обязательно если ресторан работает с концепциями. Идентификатор концепции. Если не задан, то будет передано меню по концепции default
{
"restaurant_id": "000127", // Идентификатор ресторана
"concept_id": "7", // Идентификатор концепции
"menu": { // Меню ресторана по концепции
"lastChange": "2024-05-21T16:19:13.000+03:00", // Дата последнего изменения меню, в формате RFC3339
"categories": [ // Список категорий меню
{
"id": "5:3:0:832141", // Идентификатор категории
"name": "Роллы", // Название категории
"sortOrder": 0, // Порядок сортировки от меньшего к большему
"images": [ // Изображение категории
{
"url": "string", // Ссылка на изображение для скачивания
"updatedAt": "2024-05-21T16:19:13.000+03:00" // Дата обновления изображения, в формате RFC3339
}
]
}
],
"items": [ // Список товаров
{
"id": "T20231", // Идентификатор товара
"categoryId": "5:3:0:832141", // Идентификатор категории к которой относится товар
"name": "Филадельфия Гранд", // Название
"description": "Рис, нори, сыр сливочный, огурец, лосось. Подается с соевым соусом (30 г), имбирём (30 г), васаби (10 г).", // Описание для меню
"price": 500, // Цена
"vat": 0, // НДС, включенный в стоимость, в процентах, если не указан, считается за 0
"measure": 240, // Вес или объем
"measureUnit": "г", // Единица измерения. Допустимые значения - граммы (г) и миллилитры (мл)
"sortOrder": 0, // Порядок сортировки от меньшего к большему
"nutrients": [ // Параметры КБЖУ на 100г. Необязательный параметр
{
"calories": 142, // Калории
"proteins": 10, // Белки
"fat": 7, // Жиры
"carbohydrates": 11, // Углеводы
"is_deactivated": false // Неиспользуется, всегда false
}
],
"modifiers": [ // Группы модификаторов для товара. Необязательный параметр
{
"id": "5:3:0:11821", // Идентификатор группы модификаторов
"name": "Доп. гарниры", // Название группы модификаторов
"minSelectedModifiers": 0, // Минимальное количество модификаторов, которые необходимо выбрать для данной группы
"maxSelectedModifiers": 3, // Максимальное количество модификаторов, которые можно выбрать для данной группы
"sortOrder": 0, // Порядок сортировки от меньшего к большему
"modifiers": [ // Список модификаторов
{
"id": "6021", // Идентификатор товара-модификатора
"name": "Соевый соус (30 г)", // Название
"price": 50, // Цена
"vat": 0, // НДС, включенный в стоимость, в процентах, если не указан, считается за 0
"minAmount": 0, // Минимальное количество указанного модификатора для блюда в заказе
"maxAmount": 3, // Максимальное количество указанного модификатора для блюда в заказе
"sortOrder": 0 // Порядок сортировки от меньшего к большему
},
{
"id": "6042",
"name": "Имбирь (30 г)",
"price": 50,
"vat": 0,
"minAmount": 0,
"maxAmount": 3,
"sortOrder": 1
}
]
}
],
"images": [ // Изображение товара
{
"url": "https://url.url", // Ссылка на изображение для скачивания
"hash": "55247fb2135f11ef8a4fd00db080bd69" // SHA1-хэш от содержимого файла изображения. Служит признаком уникальности. В случае если он меняется, сайт перезагружает картинку
}
],
"tags": [ // Список тегов товара. Необязательный параметр
{
"name": "Хит" // Название тега
}
]
}
]
}
}
Параметр "description": "", // Описание для меню
задается в настройках ТМЦ->вкладка "Касса"->поле "Описание для меню"
Получить стоп-лист
Адрес: /stop_list
Метод: GET
Параметры:
- restaurant_id - Не обязательный. Идентификатор ресторана
- date_change - Не обязательный. Дата последнего изменения в формате ДДММГГГГЧЧММСС. В ответе будут переданы только те стоп-листы, которые изменялись после указанной даты
Тело ответа:
{
"stop_lists": [ // Список стоп-листов
{
"restaurant_id": "000017", // Идентификатор ресторана
"lastChange": "2024-06-10T22:02:27.000+03:00", // Дата последнего обновления стоп-листа, в формате RFC3339
"items": [ // Список товаров находящихся в стоп-листе
{
"id": "T20231" // Идентификатор товара
}
]
}
]
}
Создать заказ
Адрес: /order
Метод: POST
Тело запроса:
{
"action": "new_order", // Всегда new_order
"body": { // Объект заказа
"number": "9400001", // Номер заказа на сайте
"restaurant_id": "000127", // Идентификатор ресторана, который будет выполнять заказ. Игнорируется если заданы коордианты или зона доставки
"concept_id": "7", // Идентификатор концепции. Обязательно, если ресторан работает с концепциями
"date": "2024-04-08 15:21:03", // Дата\время оформления заказа
"delivery_method": "courier", // courier - доставка, pickup - самовывоз
"persons": 2, // Количество персон
"comment": "Всё без лука", // Комментарий к заказу
"date_preorder": "2024-04-08 17:00", // Дата\время к котрому нужно доставить\приготовить заказ
"status_url": "https://you-url?order_id=9400001", // Ссылка для обновления статуса заказа на сайте
"cart": { // Содержимое заказа
"items": [ // Товарная часть
{
"id": "T20231", // Идентификатор товара
"name": "Филадельфия Гранд", // Название товара
"count": 1, // Количество
"cost": 500.00 // Цена
},
{
"id": "555333111",
"name": "Калифорния Гранд",
"count": 3,
"cost": 700.00,
"modifiers": [ // Массив вложенных модификаторов к этому товару
{
"id": "6021", // Идентификатор товара
"name": "Соевый соус (30 г)", // Название товара
"count": 1, // Количество
"cost": 30.00 // Цена
},
{
"id": "6042",
"name": "Имбирь (30 г)",
"count": 1,
"cost": 50.00
}
]
}
],
"delivery": 100.00, // Стоимость доставки. 0 если доставка бесплатная
"total": 2940.00 // Итоговая сумма заказа с учётом стоимости доставки
},
"client": { // Информация о клиенте
"name": "Пётр", // Имя клиента
"phone": "+7(922)988-33-22" // Телефон клиента, в любом формате
},
"recipient_name": { // Информация о получателе заказа. Заполнять если заказывает один человек, а получает другой
"name": "Иван", // Имя получателя
"phone": "+7(987)654-32-10" // Телефон получателя, в любом формате
},
"address": { // Информация о адресе. Если заказ на вынос, то не заполнять
"name": "г. Москва, ул. Большая Садовая, д. 10, кв. 50", // Адрес одной строкой
"comment": "Стучать, звонок не работает", // Комметарий к адресу
"coords": { // Координаты дома. Если заданы, то имеют приоритет перед restaurant_id
"latitude": "55.767210", // Широта
"longitude": "37.593390" // Долгота
},
"zone_id": "028270" // Идентификатор зоны доставки. Если задан, то имеет приоритет перед coords и restaurant_id
},
"payment": { // Информация об оплате заказа
"method": "cash", // cash - наличные, card - картой курьеру, online - онлайн через приложение или сайт
"sum": 2940.00, // Сумма оплаты. Итоговая сумма заказа с учётом всех скидок и стоимости доставки
"change": 5000.00 // Сумма с которой приготовить сдачу
}
}
}
Если запрос успешно обработан, сервер вернет ответ с статусом 200. В теле ответа будет передан номер заказа.
{
"order_id": "S9400001" // Номер заказа в Юпитере
}
Номер заказа может быть модифицирован и отличаться от номера заказа на сайте.
Успешное выполнение запроса не означает, что заказ окончательно принят. Результатом выполнения запроса является постановка заказа в очередь на загрузку. Гарантированный индикатор приёма заказа является получение запроса с изменением статуса заказа на "Новый"
Получить информацию по клиенту
Адрес: /client
Метод: GET
Параметры:
- phone - Обязательный. Номер телефона клиента, только цифры
Тело ответа:
{
"id": "665F52E5-8CFF-2174-12FB-C2AAAF55D803", // Идентификатор клиента
"name": "Петр Иванов", // Имя клиента
"phone": "89991112233", // Номер телефона
"email": "test@test.ru", // Email
"birthday": "1990-02-10", // День рожения в формате ГГГГ-ММ-ДД
"gender": "Мужской", // Пол, Мужской\Женский
"discounts_active": true, // Признак "Может пользоваться скидками\бонусами"
"blacklist": false, // Признак "Чёрный список"
"block_sms": false // Признак "Запретить отправку SMS"
}
Обратные вызовы
Обновить статус заказа на сайте
При изменении статуса заказов, Юпитер отправляет GET запрос на URL переданный сайтом в параметре status_url
при создании заказа.
К status_url
добавляется параметр status
, в котором передается код нового статуса
https://you-url?order_id=9400001&status=0
Возможные значения параметра status
:
Значение | Название статуса | Когда отправляется |
0 | Новый | При получении заказа с сайта\приложения, при ручном создании заказа в Юпитере |
10 | В работе (Готовится) | При печати заказа на кухню |
20 | Доставляется | При назначении курьера |
30 | Доставлен | При смене статуса на "Заказ доставлен" и при закрытии заказа |
5 | Отменён | При удалении заказа |
Результат запроса не контролируется, но протоколируется для решения возможных инцидентов. Предполагается, что сайт отвечает пустой страницей с статусом 200
Система JUPITER www.jupiter.systems (с) 2024г.
Нет комментариев