NAV
shell ruby java objective c

Зарегистрироваться | sign_in

Зарегистрируйтесь в качестве разработчика на нашем сайте, чтобы опробовать все возможности API. Зарегистрироваться

Для того чтобы подключить приложение или сайт к Вашему ресторану необходимо:

  1. Переключиться в боевой режим в кабинете разработчика. https://dev.jowi.club/en/external_clients/sign_in

  2. Зайти в административную панель Вашего ресторана https://app.jowi.club/ru/users/sign_in

Далее в разделе Мобильное меню -> Внешние приложения Найти Ваше приложение или сайт и установить «Включить»

Начиная с этого моменты вы сможете обмениваться данными с Вашим рестораном.

C помощью API вы можете напрямую подключиться к системе Jowi в ресторане. On-line меню ресторана на сайте с возможностью формирования заказа и отправки его прямо в ресторан. Либо интеграция в мобильное приложение с транслированием меню и on-line заказом.

Логика работы | instruction

C помощью API вы можете напрямую подключиться к системе Jowi в ресторане. On-line меню ресторана на сайте с возможностью формирования заказа и отправки его прямо в ресторан. Либо интеграция в мобильное приложение с транслированием меню и on-line заказом.

Как ваше приложение будет готово, вы можете перевести его в боевой режим в кабинете разработчика. Рестораны в своем кабинете могут включить вам достум в разделе Мобильное Меню -> Внешние Приложения

Технический протокол | protocol

Запросы к API выполняются по защищенному HTTPS протоколу, используя URI: https://api.jowi.club/v010/. Для авторизации запроса партнера используется api_key и api_secret. Эти данные можете взять в кабинете разработчика по адресу: https://dev.jowi.club/ Формат ответа cервера: json

Обязательные параметры запроса | need

поле значение
api_key api_key приложения, его можно взять кабинете разработчика
sig подпись, удостоверяющая валидность клиента

Алгоритм формирования подписи sig

  1. Рассчитывается SHA256 ­хэш от конкатенации строк:

    sha256 = sha(api_key + api_secret) // sha256 хеш от склеенной строки

  2. Берем первые 10 и последние 5 символов от полученного хэша

    sig = sha256[0, 10] + sha256[-5, 5] // первые 10 и последние 5 символов от полученного хэша

Статус запроса и обработка ошибок | status

В случае успешного выполнения ответ будет иметь вид:

{"status": 1, … }

В случае ошибки:

{"status": 0, "error": 27, "message": "Описание ошибки"}

Список доступных заведений | restaurants

curl "https://api.jowi.club/v010/restaurants?api_key=api_key&sig=sig"

Пример ответа от сервера


{
  "status": 1,
  "restaurants": [
    {
      "id": "9260ccb9-c212-43a1-b0d3-b84bab6196ed",
      "title": "Привет Мир",
      "is_course_tax": false,
      "tax": 0,
      "phone_numbers": "000-000-000-00",
      "website": "http://jowi.club",
      "work_time": null,
      "restaurant_type": "Bar",
      "live_music": true,
      "wi_fi_zone": true,
      "smoking_zone": true,
      "non_smoking_zone": true,
      "veggie_dishes": true,
      "open_halls": true,
      "room_for_children": true,
      "currency_of_payment": "UZS",
      "payment_by_card": true,
      "average_amount_bill": 40000,
      "address": "ул. Абдуллы Каххара, Ташкент, Дом № 35",
      "facebook_page": null,
      "twitter_page": null,
      "description": null,
      "longitude": 69.27178,
      "latitude": 41.2998,
      "country": "Uzbekistan",
      "city": "Tashkent",
      "online_order": true,
      "online_reserve": true,
      "delivery_price": 0,
      "delivery_time": "00:00:00",
      "work_timetable": [
        {
          "day_code": 1,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 2
        },
        {
          "day_code": 1,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 1
        },
        {
          "day_code": 1,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 0
        },
        {
          "day_code": 2,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 1
        },
        {
          "day_code": 2,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 0
        },
        {
          "day_code": 2,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 2
        },
        {
          "day_code": 3,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 2
        },
        {
          "day_code": 3,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 0
        },
        {
          "day_code": 3,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 1
        },
        {
          "day_code": 4,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 1
        },
        {
          "day_code": 4,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 0
        },
        {
          "day_code": 4,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 2
        },
        {
          "day_code": 5,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 1
        },
        {
          "day_code": 5,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 0
        },
        {
          "day_code": 5,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 2
        },
        {
          "day_code": 6,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 0
        },
        {
          "day_code": 6,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 2
        },
        {
          "day_code": 6,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 1
        },
        {
          "day_code": 7,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 2
        },
        {
          "day_code": 7,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 1
        },
        {
          "day_code": 7,
          "open_time": "00:00",
          "close_time": "23:59",
          "day_off": false,
          "timetable_code": 0
        }
      ],
      "images": [
        {
          "url": "https://s3.amazonaws.com/cdn.jowi.club/mobile_menu/development/restaurant-description/restaurant_description_pictures/88782930-2baf-43b1-bb22-fb16cd8557e7/large.png?1450165135",
          "description": null,
          "order": 0
        },
        {
          "url": "https://s3.amazonaws.com/cdn.jowi.club/mobile_menu/development/restaurant-description/restaurant_description_pictures/58128ca5-32ca-4103-8f4f-bc39488fe89d/large.jpg?1450172744",
          "description": null,
          "order": 1
        }
      ]
    }
  ]
}

HTTP

GET https://api.jowi.club/v010/restaurants?api_key=api_key&sig=sig

Параметр Описание
id ID заведения в системе JOWI, uuid
title Название, string
tax Налог на счет, integer
is_course_tax Учитывать ли налог на блюда, boolean
phone_numbers Номера телефонов, string
website Веб сайт ресторана, string
restaurant_type Тип заведения, string
live_music Живая музыка, boolean
wi_fi_zone WiFi, boolean
smoking_zone Зона для курящих, boolean
non_smoking_zone Зона для не курящих, boolean
veggie_dishes Вегетарианские блюда, boolean
open_halls Летняя веранда, boolean
room_for_children Детская площадка, boolean
currency_of_payment Валюта оплаты, string
payment_by_card Оплата банковской картой, string
average_amount_bill Сумма среднего счета, float
address Адрес, string
facebook_page Ссылка на facebook.com
twitter_page Ссылка на twitter.com
description Описание, text
longitude Координата longitude, decimal
latitude Координата latitude, decimal
country Страна, string
city Город, string
online_reserve Возможность онлайн бронирования, boolean
delivery_price Сумма доставки по умолчанию, decimal
delivery_time Среднее время доставки, time
work_timetable Режим работы, array, day_code: День недели пн - 1, вт - 2, open_time: Время открытия, close_time: Время закрытия, day_off: Выходной или нет
timetable_code тип режима работы: 0 - Режим работы заведения, 1 - Режим работы ON-LINE заказа, 2 - Режим работы ON-LINE бронирования
images Изображения заведения, array

Меню заведения | categories

curl "https://api.jowi.club/v010/restaurants/:id?api_key=api_key&sig=sig"

Пример ответа от сервера


{
  "status": 1,
  "categories": [
    {
      "title": "Кофе",
      "courses": [
        {
          "id": "31367464-80c4-47e0-b87f-f95d9348a3ae",
          "title": "Американо",
          "price": 90,
          "price_for_online_order": 90,
          "is_exception": false,
          "tax": 0,
          "online_order": true,
          "is_vegetarian": false,
          "cooking_time": null,
          "caloric_content": null,
          "description": "Мы готовим Американо из отборных зёрен арабики",
          "image_url": "https://s3.amazonaws.com/cdn.jowi.club/mobile_menu/production/course-description/course_informations/8a5a469a-ab5c-456d-9003-5d0d24ace357/large.jpg?1458284334"
        },
        {
          "id": "977a7964-330a-4894-b3b0-338e754c87b5",
          "title": "Капучино",
          "price": 90,
          "price_for_online_order": 90,
          "is_exception": false,
          "tax": 0,
          "online_order": true,
          "is_vegetarian": false,
          "cooking_time": null,
          "caloric_content": null,
          "description": "Мы готовим Капучино из отборных зёрен арабики и молока",
          "image_url": "https://s3.amazonaws.com/cdn.jowi.club/mobile_menu/production/course-description/course_informations/3350f293-94da-4339-8ca3-1dac4f64811a/large.jpg?1458284728"
        },
        {
          "id": "29a251c3-0a5b-44bf-81c8-e522760c59fc",
          "title": "Латте",
          "price": 100,
          "price_for_online_order": 100,
          "is_exception": false,
          "tax": 0,
          "online_order": true,
          "is_vegetarian": false,
          "cooking_time": null,
          "caloric_content": null,
          "description": "Мы готовим Латте из отборных зёрен арабики и молока",
          "image_url": "https://s3.amazonaws.com/cdn.jowi.club/mobile_menu/production/course-description/course_informations/9cf9bccf-0e4e-4618-81ab-4fd92fd5b317/large.jpg?1458284474"
        },
        {
          "id": "cc671714-ab05-47c8-8fa8-39027b8224ff",
          "title": "Макиато",
          "price": 95,
          "price_for_online_order": 95,
          "is_exception": false,
          "tax": 0,
          "online_order": true,
          "is_vegetarian": false,
          "cooking_time": null,
          "caloric_content": null,
          "description": "Мы готовим Макиато из отборных зёрен арабики и молока",
          "image_url": "https://s3.amazonaws.com/cdn.jowi.club/mobile_menu/production/course-description/course_informations/eefe407a-a76b-4cde-aec9-37084e122c06/large.jpg?1458284564"
        }
      ]
    },
    {
      "title": "Сэндвичи",
      "courses": [
        {
          "id": "0d233380-bdb6-4183-9918-2127871664fc",
          "title": "Сэндвич с беконом",
          "price": 75,
          "price_for_online_order": 75,
          "is_exception": false,
          "tax": 0,
          "online_order": true,
          "is_vegetarian": false,
          "cooking_time": null,
          "caloric_content": null,
          "description": "Для приготовления этого сэндвича мы используем белый хлеб, бекон, копченая курица, салат латук, помидоры, красный болгарский перец, оливковое масло, базилик",
          "image_url": "https://s3.amazonaws.com/cdn.jowi.club/mobile_menu/production/course-description/course_informations/f6fcd3ad-d8d6-44eb-bf45-a3877e0e91f7/large.jpg?1458283839"
        },
        {
          "id": "ab28b33c-31d2-4b92-b5aa-973fb6a327fe",
          "title": "Сэндвич с индейкой",
          "price": 80,
          "price_for_online_order": 80,
          "is_exception": false,
          "tax": 0,
          "online_order": true,
          "is_vegetarian": false,
          "cooking_time": null,
          "caloric_content": null,
          "description": "Для приготовления этого сэндвича мы используем хлеб, сладкий перец, индейка, кетчуп, соус вурчестерский, лук репчатый, листья салата.",
          "image_url": "https://s3.amazonaws.com/cdn.jowi.club/mobile_menu/production/course-description/course_informations/e704e6ba-631e-46bd-a665-bc7d359a487c/large.jpg?1458283860"
        },
        {
          "id": "b10f49ee-d318-49fa-9cce-cc0cb047f821",
          "title": "Сэндвич с крабовым мясом",
          "price": 85,
          "price_for_online_order": 85,
          "is_exception": false,
          "tax": 0,
          "online_order": true,
          "is_vegetarian": false,
          "cooking_time": null,
          "caloric_content": null,
          "description": "Для приготовления этого сэндвича мы используем хлеб чиабатта, несколько видов сыра, салат, помидоры, крабовое мясо. ",
          "image_url": "https://s3.amazonaws.com/cdn.jowi.club/mobile_menu/production/course-description/course_informations/b1021b97-4ff9-4334-b429-4f3499a891e7/large.jpg?1458283079"
        },
        {
          "id": "b91a2897-176e-4e53-a80e-c7c298088667",
          "title": "Сэндвич с яйцом",
          "price": 75,
          "price_for_online_order": 75,
          "is_exception": false,
          "tax": 0,
          "online_order": true,
          "is_vegetarian": false,
          "cooking_time": null,
          "caloric_content": null,
          "description": "Для приготовления этого сэндвича мы используем яйца, майонез, укроп, белый хлеб.",
          "image_url": "https://s3.amazonaws.com/cdn.jowi.club/mobile_menu/production/course-description/course_informations/4edbaf96-86e4-4009-a2bd-b4b12ff74f0e/large.jpg?1458283097"
        }
      ]
    }
  ]
}

HTTP

GET https://api.jowi.club/v010/restaurants/:id?api_key=api_key&sig=sig

Параметр Описание
title Название категории, string
courses Блюда в этой категории, array
id ID блюда, uuid
title Название, string
price Цена, decimal
price_for_online_order Цена для онлайн заказа, decimal
is_exception Блюдо исключение, если исключение то не считается налог на блюдо, налог на счет, обслуживание и скидка на счет. boolean
tax Налог на блюда, integer
online_order Возможность онлайн заказа, boolean
is_vegetarian Вегетарианское блюда, boolean
cooking_time Время готовки, string
caloric_content Калорийность, string
description Описание, text
image_url Ссылка на изображение, string

Формирование заказа | order

HTTP

Пример контента для отправки


{
  "api_key": "",
  "sig": "",
  "restaurant_id": "",
  "description": "Описание  заказа",
  "phone": "0400-994-756",
  "address": "Петроградский р-н, Стрельнинская улица 76д, 67кв",
  "people_count": 3,
  "date_time": "2016-03-22 19:00:00",
  "delivery_price": "20000",
  "is_payed": true,
  "payed_amount": 98600,
  "courses": [
    {
      "course_id": "12c4fc74-011b-11e5-9cd8-2f48f5f05c7c",
      "count": "3",
      "description": ""
    },
    {
      "course_id": "16b29d10-011a-11e5-a477-8f388c87fadb",
      "count": "1",
      "description": "test1"
    }
  ]
}

Ответа от сервера


{
    "status": 1,
    "order": {
        "id": "7c2281c6-e53b-48ff-977b-f5aa24367efa",
        "status": 0,
        "amount": "98600.0",
        "restaurant_id": "9260ccb9-c212-43a1-b0d3-b84bab6196ed",
        "address": "Петроградский р-н, Стрельнинская улица 76д, 67кв",
        "phone": "0400-994-756",
        "description": "Описание  заказа",
        "delivery_price": 20000,
        "is_sent": false,
        "courier_name": null,
        "courier_phone": null,
        "courses": [
            {
                "id": "9a6e40a4-20a6-442a-9f18-1860c7e5fbf3",
                "course_id": "12c4fc74-011b-11e5-9cd8-2f48f5f05c7c",
                "course_title": "Американо",
                "count": 3,
                "course_price": 19900,
                "description": null
            },
            {
                "id": "bce87b03-ed5d-4a45-bbe7-b783200861f0",
                "course_id": "16b29d10-011a-11e5-a477-8f388c87fadb",
                "course_title": "Капучино",
                "count": 1,
                "course_price": 18900,
                "description": "test1"
            }
        ]
    }
}

POST https://api.jowi.club/v010/orders

Изменения об заказе, принято заведением или отказано, будет отправлено на post_url.

Налог | TAX

  1. Сумма доставки не включается в налог на счет.
  2. Если в атрибутах блюда указано is_exception = true, то налог на счет и налог на блюда не считается.
  3. Если в атрибутах ресторана указано is_course_tax = false, то налог на блюда не считается.
  4. Формула расчета суммы блюда с налогом: course_amount = price_for_online_order * count + (price_for_online_order * count) * (course_tax / 100)
  5. Формула расчета суммы счета с налогом: order_amount = all_courses_amount + all_courses_amount_no_exception * (restaurant_tax / 100) + delivery_price
Параметр Обязательный? Описание
api_key да Название категории, string
sig да Блюда в этой категории, array
restaurant_id да ID заведения, uuid
phone да Номер телефона клиента, string
date_time да Время доставки, формат: “Y-m-d H:M”
order_type нет Тип заказа, int, 0 - доставка, 1 - самовывоз, по умолчанию доставка
description нет Описание заказа (string)
delivery_price нет Сумма доставки (float)
is_payed нет Заказ оплачен (boolean)
payed_amount нет Сумма оплаты (float)
address нет Цена для онлайн заказа, decimal
people_count нет Кол-во людей, int
courses да Список блюд, array
course_id да ID блюда в системе, uuid
count да Кол-во блюда, int
description нет Описание к блюду, string

POST URL

Изменения заказа будут отправлены по HTTP POST на указанный адрес в кабинете разработчика. В ответ на пост запрос должны вернуть ответ “OK” в текстовом формате. Сервер отправляет POST запрос 5 раз пока не получит правильный ответ.

Параметр Описание
type string, для заказа order
order_id uuid, ID заказа в системе JOWI
amount decimal, сумму заказа
status integer, статус заказа 3 - отменено рестораном, 6 - заказ принят рестораном, 10 - заказ выполнен

Информация о заказе | GET

Чтобы получить подробную информацию о заказе надо отправить HTTP GET запрос на https://api.jowi.club/v010/orders/:id?api_key=api_key&sig=sig&restaurant_id=restaurant_id

Параметр Описание
id uuid, ID заказа в системе
api_key API key
sig sig
restaurant_id ID заведения, uuid

Список залов заведения | halls

curl "https://api.jowi.club/v010/halls?api_key=api_key&sig=sig&restaurant_id=restaurant_id"

Пример ответа от сервера


{
    "status": 1,
    "halls": [
        {
            "id": "637bd044-ecdd-11e5-adb0-af881482d4fa",
            "title": "Большой зал"
        }
    ]
}

HTTP

GET https://api.jowi.club/v010/halls?api_key=api_key&sig=sig&restaurant_id=restaurant_id

Параметр Описание
halls Список залов array
id ID зала в системе
title Название, string

Список столов в зале | tables

curl "https://api.jowi.club/v010/halls/:hall_id?api_key=api_key&sig=sig&restaurant_id=restaurant_id"

Пример ответа от сервера


{
    "status": 1,
    "hall_id": "637bd044-ecdd-11e5-adb0-af881482d4fa",
    "title": "Большой зал",
    "date": "2016-03-18",
    "plain": {
        "scene": {
            "width": "980",
            "height": "840",
            "item": [
                {
                    "type": "1",
                    "picture": "tables/table1.png",
                    "x": "80",
                    "y": "80",
                    "angle": "0",
                    "num_id": "4",
                    "id": "7edd6fa4-ecde-11e5-9b00-3b6437b5ccb5",
                    "number": "1",
                    "percent": "20",
                    "deposit": "0",
                    "time_price": "0",
                    "time_minimum": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "100",
                    "y": "40",
                    "angle": "0",
                    "num_id": "4",
                    "slot": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "160",
                    "y": "100",
                    "angle": "0",
                    "num_id": "4",
                    "slot": "1"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "100",
                    "y": "160",
                    "angle": "0",
                    "num_id": "4",
                    "slot": "2"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "40",
                    "y": "100",
                    "angle": "0",
                    "num_id": "4",
                    "slot": "3"
                },
                {
                    "type": "1",
                    "picture": "tables/table1.png",
                    "x": "300",
                    "y": "80",
                    "angle": "0",
                    "num_id": "5",
                    "id": "7edfd1d6-ecde-11e5-b186-27ad5a4a9974",
                    "number": "2",
                    "percent": "0",
                    "deposit": "0",
                    "time_price": "0",
                    "time_minimum": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "320",
                    "y": "40",
                    "angle": "0",
                    "num_id": "5",
                    "slot": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "380",
                    "y": "100",
                    "angle": "0",
                    "num_id": "5",
                    "slot": "1"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "320",
                    "y": "160",
                    "angle": "0",
                    "num_id": "5",
                    "slot": "2"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "260",
                    "y": "100",
                    "angle": "0",
                    "num_id": "5",
                    "slot": "3"
                },
                {
                    "type": "1",
                    "picture": "tables/table1.png",
                    "x": "500",
                    "y": "80",
                    "angle": "0",
                    "num_id": "6",
                    "id": "7ee23462-ecde-11e5-95a6-63e904933dcc",
                    "number": "3",
                    "percent": "0",
                    "deposit": "0",
                    "time_price": "0",
                    "time_minimum": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "520",
                    "y": "40",
                    "angle": "0",
                    "num_id": "6",
                    "slot": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "580",
                    "y": "100",
                    "angle": "0",
                    "num_id": "6",
                    "slot": "1"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "520",
                    "y": "160",
                    "angle": "0",
                    "num_id": "6",
                    "slot": "2"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "460",
                    "y": "100",
                    "angle": "0",
                    "num_id": "6",
                    "slot": "3"
                },
                {
                    "type": "1",
                    "picture": "tables/table1.png",
                    "x": "100",
                    "y": "340",
                    "angle": "0",
                    "num_id": "7",
                    "id": "7ee49694-ecde-11e5-b24a-0f84b29c6173",
                    "number": "5",
                    "percent": "0",
                    "deposit": "0",
                    "time_price": "0",
                    "time_minimum": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "120",
                    "y": "300",
                    "angle": "0",
                    "num_id": "7",
                    "slot": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "180",
                    "y": "360",
                    "angle": "0",
                    "num_id": "7",
                    "slot": "1"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "120",
                    "y": "420",
                    "angle": "0",
                    "num_id": "7",
                    "slot": "2"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "60",
                    "y": "360",
                    "angle": "0",
                    "num_id": "7",
                    "slot": "3"
                },
                {
                    "type": "1",
                    "picture": "tables/table1.png",
                    "x": "320",
                    "y": "340",
                    "angle": "0",
                    "num_id": "8",
                    "id": "7ee49694-ecde-11e5-a9df-3fa1b8fe13b1",
                    "number": "6",
                    "percent": "0",
                    "deposit": "0",
                    "time_price": "0",
                    "time_minimum": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "340",
                    "y": "300",
                    "angle": "0",
                    "num_id": "8",
                    "slot": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "400",
                    "y": "360",
                    "angle": "0",
                    "num_id": "8",
                    "slot": "1"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "340",
                    "y": "420",
                    "angle": "0",
                    "num_id": "8",
                    "slot": "2"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "280",
                    "y": "360",
                    "angle": "0",
                    "num_id": "8",
                    "slot": "3"
                },
                {
                    "type": "1",
                    "picture": "tables/table1.png",
                    "x": "60",
                    "y": "560",
                    "angle": "0",
                    "num_id": "9",
                    "id": "7ee6f8ee-ecde-11e5-9fb4-170459aaab57",
                    "number": "7",
                    "percent": "0",
                    "deposit": "0",
                    "time_price": "0",
                    "time_minimum": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "80",
                    "y": "520",
                    "angle": "0",
                    "num_id": "9",
                    "slot": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "140",
                    "y": "580",
                    "angle": "0",
                    "num_id": "9",
                    "slot": "1"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "80",
                    "y": "640",
                    "angle": "0",
                    "num_id": "9",
                    "slot": "2"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "20",
                    "y": "580",
                    "angle": "0",
                    "num_id": "9",
                    "slot": "3"
                },
                {
                    "type": "1",
                    "picture": "tables/table1.png",
                    "x": "700",
                    "y": "80",
                    "angle": "0",
                    "num_id": "10",
                    "id": "7ee6f8ee-ecde-11e5-be4e-83527783206f",
                    "number": "4",
                    "percent": "0",
                    "deposit": "0",
                    "time_price": "0",
                    "time_minimum": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "720",
                    "y": "40",
                    "angle": "0",
                    "num_id": "10",
                    "slot": "0"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "780",
                    "y": "100",
                    "angle": "0",
                    "num_id": "10",
                    "slot": "1"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "720",
                    "y": "160",
                    "angle": "0",
                    "num_id": "10",
                    "slot": "2"
                },
                {
                    "type": "2",
                    "picture": "chairs/chair1.png",
                    "x": "660",
                    "y": "100",
                    "angle": "0",
                    "num_id": "10",
                    "slot": "3"
                }
            ]
        }
    },
    "reserved_times": [
        {
            "table_id": "7ee23462-ecde-11e5-95a6-63e904933dcc",
            "date_time": "2016-03-22 17:00:00"
        }
    ]
}

HTTP

GET https://api.jowi.club/v010/halls/:hall_id?api_key=api_key&sig=sig&restaurant_id=restaurant_id&date=date

Request parameters

Параметр Описание
hall_id ID зала
date Дата, формат “Y-m-d”, если пустая дата, система возвращает на сегодняшнее число
api_key api_key приложение
sig sig
restaurant_id ID ресторана

Response parameters

Параметр Описание
hall_id ID зала
title Название, string
date Дата, формат “Y-m-d”
plain JSON, план зала
scene Зал
width Ширина в пикселях
height Высота в пикселях
item Столы и стулья, array
type Тип объекта, 1-Стол, 2-Стул
x x координата
y y координата
id ID стола в системе
num_id ID стола в зале
angle Ротация
number Номер стола
percent Процент обслуживание стола
deposit Депозит на стол
time_price Цена стола на время
time_minimum Минимальное время, на которое можно забронировать
slot Позиция стула относительно стола, по часовой стрелке
reserved_times Массив забронированных столов

Бронирование стола | reserves

HTTP

Пример контента для отправки


{
  "api_key": "",
  "sig": "",
  "restaurant_id": "c86f8e63-51c8-4207-9228-83942d128ce5",
  "table_id": "7ee23462-ecde-11e5-95a6-63e904933dcc",
  "contact_information": "9889-3885",
  "people_count": 3,
  "date_time": "2016-03-22 19:00:00",
  "description": "Nisi integer platea in socii",
  "for_whom": "Ivan"
}

Ответа от сервера

{
    "status": 0,
    "reserv": {
        "id": "2f9a50fd-8c46-485b-89ae-ed7bd523bd15",
        "status": 0,
        "number": 114,
        "table_id": "7ee23462-ecde-11e5-95a6-63e904933dcc",
        "restaurant_id": "c86f8e63-51c8-4207-9228-83942d128ce5",
        "contact_information": "9889-3885",
        "description": "Nisi integer platea in socii",
        "people_count": 3,
        "for_whom": "Ivan"
    }
}

POST https://api.jowi.club/v010/reserves

Изменения о бронирование, принято заведением или отказано, будет отправлено на post_url.

Параметр Обязательный? Описание
api_key да Название категории, string
sig да Блюда в этой категории, array
restaurant_id да ID заведения, uuid
table_id да ID стола в зале
contact_information да Контактная информация о клиенте, номер телефона
people_count нет Кол-во людей, int
date_time да На какое время бронь, 2016-03-22 19:00:00, временная зона в UTC
description нет Описание (string)
for_whom нет На кого бронь? string

POST URL

Изменения о бронировании будут отправлены по HTTP POST на указанный адрес в кабинете разработчика. В ответ на пост запрос должны вернуть ответ “OK” в текстовом формате. Сервер отправляет POST запрос 5 раз пока не получит правильный ответ.

Параметр Описание
type string, для заказа reserv
reserv_id uuid, ID бронирования в системе JOWI
number integer, номер бронирования в системе JOWI
status integer, статус заказа 3 - отменено рестораном, 6 - принят рестораном, 10 - выполнено

Информация о бронировании | GET

Чтобы получить подробную информацию о бронировании надо отправить HTTP GET запрос на https://api.jowi.club/v010/reserves/:id?api_key=api_key&sig=sig&restaurant_id=restaurant_id

Параметр Описание
id uuid, ID бронирования в системе
api_key API key
sig sig
restaurant_id ID заведения, uuid

Регистрация клиента | registration

HTTP

Пример контента для отправки


{
  "api_key": "",
  "sig": "",
  "email": "ivanov.i@jowi.club",
  "password": "Password",
  "first_name": "Иван",
  "last_name": "Иванов",
  "sex": true,
  "phone": "098780876",
  "birthday": "1987-01-01",
  "facebook_id": "facebook_id",
  "facebook_token": "facebook_token"

}

Ответа от сервера


{
    "status": 1,
    "client": {
        "id": "296f9248-11f8-4388-b54e-0b3c481d074e",
        "first_name": "Иван",
        "last_name": "Иванов",
        "email": "ivanov.i@jowi.club",
        "sex": true,
        "phone": "098780876",
        "birthday": "1987-01-01",
        "photo": null
    }
}

POST https://api.jowi.club/v010/registration

Параметр Обязательный? Описание
api_key да api_key приложения
sig да sig приложения
email да Email, string
password да Пароль, string
first_name да Имя, string
last_name да Фамилия, string
sex да Пол, boolean, true: мужчина, false: женщина
phone да Номер телефона, string
birthday да Дата рождения, date, формат: “YYYY-MM-DD”
facebook_id нет Facebook id для входа через facebook
facebook_token нет Facebook token для входа через facebook

В ответ сервер возвращает информацию о клиенте, на почту клиента отправляется письмо со ссылкой для подтверждения почты. Если отправить facebook_id и facebook_token то письмо для подтверждения на почту не отправляется и сразу можно перейти к авторизации.

Параметр Описание
id ID клиента, uuid
first_name Имя клиента, string
last_name Фамилия клиента, string
email Email клиента, string
sex Пол клиента, boolean, true: мужчина, false: женщина
phone Номер телефона, string
birthday Дата рождения, date, формат: “YYYY-MM-DD”
photo Ссылка на аватар клиента, url

Авторизация клиента | autorization

HTTP

Пример контента для отправки


{
  "api_key": "",
  "sig": "",
  "email": "test@jowi.club",
  "password": "Password",
  "device_name": "Название устройства",
  "device_id": "ID устройства, uuid, imei устройства",
  "facebook_id": "facebook id для входа через facebook, если вход через email и password то отправлять не нужно",
  "facebook_token": "facebook token для входа через facebook, если вход через email и password то отправлять не нужно"

}

Ответа от сервера

{
    "status": 1,
    "client": {
        "id": "uuid",
        "authentication_token": "gxaueBJB2X7hjxT9MJqN",
        "first_name": "Иван",
        "last_name": "Иванов",
        "email": "ivan@jowi.club",
        "sex": true,
        "phone": "098780876",
        "birthday": "1987-01-01",
        "photo": null
    }
}

POST https://api.jowi.club/v010/client_autorize

Параметр Обязательный? Описание
api_key да api_key приложения
sig да sig приложения
email да Email клиента
password нет, если вход через Fb Пароль клиента
device_name да Имя устройства
device_uuid да ID устройства, uuid, imei устройства
facebook_id да Facebook id для входа через facebook, если вход через email и password то отправлять не нужно
facebook_token нет Facebook token для входа через facebook, если вход через email и password то отправлять не нужно

В ответ сервер возвращает информацию о клиенте и authentication_token клиента, для дальнейшего использования

Параметр Описание
id ID клиента, uuid
authentication_token token клиента для дальнейших запросов, string
first_name Имя клиента, string
last_name Фамилия клиента, string
email Email клиента, string
sex Пол клиента, boolean, true: мужчина, false: женщина
phone Номер телефона, string
birthday Дата рождения, date, формат: “YYYY-MM-DD”
photo Ссылка на аватар клиента, url

Обновление информации клиента | profile

HTTP

Пример контента для отправки


{
  "api_key": "4btIfYmRLZdSs-vk02UydMjAd7x0VOFwcSVA9qWc",
  "sig": "2251f0ea887ac60",
  "authentication_token": "DPrE73XxyBdGNPbZgxyj",
  "password": "new_password",
  "password_confirmation": "new_password",
  "first_name": "Иван",
  "last_name": "Иванов",
  "sex": true,
  "phone": "09878087633",
  "birthday": "1988-01-01",
  "image_name": "ntcn.png",
  "encoded_image": "Base64 image",
  "avatar_delete": true
}

Ответа от сервера


{
    "status": 1,
    "client": {
        "id": "296f9248-11f8-4388-b54e-0b3c481d074e",
        "first_name": "Иваночи",
        "last_name": "Иванов",
        "email": "madrahimov.ilhom@gmail.com",
        "sex": null,
        "phone": null,
        "birthday": "1999-01-01",
        "photo": null
    }
}

POST https://api.jowi.club/v010/profile

Параметр Обязательный? Описание
api_key да api_key приложения
sig да sig приложения
authentication_token да token клиента
password нет, если не меняется пароль Новый пароль
password_confirmation нет, если не меняется пароль Подтверждение нового пароля
first_name нет Имя
last_name нет Фамилия
sex нет Пол
phone нет Номер телефона
birthday нет Дата рождения
image_name нет Название файла изображение
encoded_image нет Файл изображение в формате Base64
avatar_delete нет Если надо удалить аватар клиента, boolean

В ответ сервер возвращает обновленную информацию о клиенте.

Обновление эмайла клиента | change_email

HTTP

Пример контента для отправки


{
  "api_key": "4btIfYmRLZdSs-vk02UydMjAd7x0VOFwcSVA9qWc",
  "sig": "2251f0ea887ac60",
  "authentication_token": "DPrE73XxyBdGNPbZgxyj",
  "email": "new_email"
}

Ответа от сервера


{
    "status": 1,
    "client": {
        "id": "296f9248-11f8-4388-b54e-0b3c481d074e",
        "first_name": "Иваночи",
        "last_name": "Иванов",
        "email": "ivanov@jowi.club",
        "unconfirmed_email": "new_email",
        "sex": true,
        "phone": "333333",
        "birthday": "1999-01-01",
        "photo": null
    }
}

POST https://api.jowi.club/v010/profile/change_email

Параметр Обязательный? Описание
api_key да api_key приложения
sig да sig приложения
authentication_token да token клиента
email да Новый email

В ответ сервер возвращает информацию о клиенте. И на почту клиента отправляется письмо для подтверждения нового эмайла.

Список ресторанов и карт клиента | client_restaurants

HTTP

В этом запросе можно получить все рестораны клиента с картами и информацие о депозите в заведении. Клиент не может увидеть те заведения которые не работают с вашим приложением.

Ответа от сервера


{
  "status": 1,
  "client_restaurants": [
    {
      "restaurant_id": "adb4c701-4f75-48b0-ae41-3ae19884b2c6",
      "restaurant_title": "[ Arkan ]",
      "deposit": 0,
      "client_cards": [
        {
          "card_number": "202020",
          "discount": 20,
          "accumulation_account": 20
        },
        {
          "card_number": "101010",
          "discount": 10,
          "accumulation_account": 10
        }
      ]
    },
    {
      "restaurant_id": "5eb8ee5d-2961-4b1a-b879-dd83f53b9a8a",
      "restaurant_title": "[ CheRRy Flame ]",
      "deposit": 0,
      "client_cards": [
        {
          "card_number": "202020",
          "discount": 20,
          "accumulation_account": 20
        },
        {
          "card_number": "101010",
          "discount": 10,
          "accumulation_account": 10
        }
      ]
    },
    {
      "restaurant_id": "9319ae1c-da3a-4251-8ee9-7a3199ec16a1",
      "restaurant_title": "[ Disturbed ]",
      "deposit": 0,
      "client_cards": [
        {
          "card_number": "202020",
          "discount": 3,
          "accumulation_account": 5
        },
        {
          "card_number": "101010",
          "discount": 3,
          "accumulation_account": 5
        }
      ]
    },
    {
      "restaurant_id": "4689a273-bd0a-492e-a935-f86d6f4ea3ff",
      "restaurant_title": "[ Lilith ]",
      "deposit": 10000,
      "client_cards": [
        {
          "card_number": "202020",
          "discount": 20,
          "accumulation_account": 20
        },
        {
          "card_number": "101010",
          "discount": 10,
          "accumulation_account": 10
        }
      ]
    },
    {
      "restaurant_id": "cd9a4e3f-65ba-40f6-af7f-c0dded4f0c44",
      "restaurant_title": "[ Static-X ]",
      "deposit": 0,
      "client_cards": [
        {
          "card_number": "202020",
          "discount": 10,
          "accumulation_account": 10
        },
        {
          "card_number": "101010",
          "discount": 10,
          "accumulation_account": 10
        }
      ]
    },
    {
      "restaurant_id": "3f8d1887-dced-4968-9568-ddf728d17ffd",
      "restaurant_title": "Мускат",
      "deposit": 0,
      "client_cards": [
        {
          "card_number": null,
          "discount": 0,
          "accumulation_account": 0
        }
      ]
    }
  ]
}

GET https://api.jowi.club/v010/client_restaurants

Параметр Обязательный? Описание
api_key да api_key приложения
sig да sig приложения
authentication_token да token клиента

В ответ сервер возвращает информацию о ресторанах клиента, картах клиента в этом ресторане и о депозите клиента в этом ресторане.

Параметр Описание
restaurant_id ID заведения в системе JOWI, uuid
restaurant_title Название, string
deposit Депозит клента в этом заведении
card_number Номер карты
discount Процент скидки карты
accumulation_account Процент накопления карты

Стать клиентом ресторана | create_client_restaurants

HTTP

В этом запросе клиент добавляется в заведение. В дальнейшем клиент может смотреть свои счета в этом заведении, оплачивать их.

Пример контента для отправки


{
  "api_key": "",
  "sig": "",
  "authentication_token": "",
  "restaurant_id": "29ab1029-8ecb-454f-8be2-d712ba485a08"
}

Ответа от сервера


{
    "status": 1,
    "client_restaurant": {
        "restaurant_id": "29ab1029-8ecb-454f-8be2-d712ba485a08",
        "restaurant_title": "[ Diablo III ]",
        "deposit": 0
    }
}

POST https://api.jowi.club/v010/client_restaurants

Параметр Обязательный? Описание
api_key да api_key приложения
sig да sig приложения
authentication_token да token клиента
restaurant_id да ID заведения

Код клиента для привязки к счету | client_restaurant_code

HTTP

Для использование кода клиента, клиент должен сообщить официанту или работнику заведение свой код. Работник заведения в свою очередь вобьет код в свою систему и к счету привяжется клиент. Этот счет клиент может увидеть в списке счетов.

Ответа от сервера


{
  "status": 1,
  "client_restaurant_code": {
    "restaurant_id": "29ab1029-8ecb-454f-8be2-d712ba485a08",
    "restaurant_title": "[ Diablo III ]",
    "code": 920880
  }
}

POST https://api.jowi.club/v010/client_restaurants/:restaurant_id

Параметр Обязательный? Описание
api_key да api_key приложения
sig да sig приложения
authentication_token да token клиента
restaurant_id да ID заведения

В ответ сервер возвращает код клиента.

Параметр Описание
restaurant_id ID заведения в системе JOWI, uuid
restaurant_title Название, string
code Код клиента в ресторане для привязки к счету

Счета клиента | client_bills

Список счетов клиента в заведении. Кол-во счетов получаемых за один раз 30

HTTP

Ответа от сервера


{
  "status": 1,
  "all_count": 2,
  "bills": [
    {
      "id": "96ee34c2-1ce8-11e6-909c-4fa17e1d077f",
      "restaurant_id": "4689a273-bd0a-492e-a935-f86d6f4ea3ff",
      "number": "R6",
      "waiter_first_name": "[ Lilith ]",
      "table_number": null,
      "courses_amount": 5000,
      "service": 0,
      "discount": 0,
      "people_count": 1,
      "amount": 6000,
      "discount_sum": 0,
      "tax": 0,
      "open_date": "2016-05-18 11:06:37",
      "close_date": "2016-05-18 11:06:37",
      "bill_type_code": 2,
      "is_online": true,
      "accumulation_account": 0,
      "discount_amount": 0,
      "service_amount": 0,
      "courier_name": null,
      "courier_phone": null,
      "table_deposit": 0,
      "is_accumulation": false,
      "client_deposit": "10000.0"
    },
    {
      "id": "52ac031e-1cea-11e6-88c5-bf53032f2121",
      "restaurant_id": "4689a273-bd0a-492e-a935-f86d6f4ea3ff",
      "number": "R7",
      "waiter_first_name": "[ Lilith ]",
      "table_number": null,
      "courses_amount": 2000,
      "service": 0,
      "discount": 0,
      "people_count": 1,
      "amount": 3000,
      "discount_sum": 0,
      "tax": 0,
      "open_date": "2016-05-18 11:19:01",
      "close_date": "2016-05-18 11:19:01",
      "bill_type_code": 2,
      "is_online": true,
      "accumulation_account": 0,
      "discount_amount": 0,
      "service_amount": 0,
      "courier_name": null,
      "courier_phone": null,
      "table_deposit": 0,
      "is_accumulation": false,
      "client_deposit": "10000.0"
    }
  ],
  "error": null,
  "meta": {
    "sync_time": "2016-06-10 06:52:03"
  }
}


GET https://api.jowi.club/v010/client_bills

Параметр Обязательный? Описание
api_key да api_key приложения
sig да sig приложения
authentication_token да token клиента
restaurant_id да ID заведения
date_time нет Дата начиная с которой запрашиваются счета (В формате YYYY-MM-DD HH:MM)
offset нет Количество записей от начала выборки которые нужно пропустить

В ответ сервер возвращает список счетов.

Параметр Описание
id ID счета
restaurant_id ID заведения
number Номер счета
waiter_first_name Имя официанта
table_number Название стола
courses_amount Сумма блюд
service Процент обсуживания
discount Процент скидки
people_count Кол-во гостей
amount Сумма счета
discount_sum Сумма скидки
tax Налог
open_date Дата открытия счета
close_date Дата закрытия счета
bill_type_code Тип счета (0 - открытый, 1 - закрытый, 2 - оплачен, 3 - долговой, 4 - удален, 6 - неоплата)
accumulation_account Cумма накопления
discount_amount Cумма скидки
service_amount Cумма обсуживания
courier_name Имя курьера
courier_phone Телефон курьера

Просмотр блюд счета | bill_courses

TODO

Оплата счета | bill_pay

Оплатить можно счет только с bill_type = 1, это закрытый счет в системе ресторана Счет должен быть прикреплен к клиенту.

HTTP

Пример контента для отправки


{
  "api_key": "",
  "sig": "",
  "authentication_token": "",
  "bill_id": "0497a6f4-2d77-11e6-9d9a-2357bc4febd3",
  "amount": 500,
  "restaurant_id": "4689a273-bd0a-492e-a935-f86d6f4ea3ff",
  "pay_id": "R683FRUIR89",
  "pay_token": "9d7f78a102fa967e0cc6defdb2d2e4e7f39415a58b97ef0d426038c5f4bc40cf"

}

Ответа от сервера


{
    "status": 1,
    "pay_bill": {
        "restaurant_id": "4689a273-bd0a-492e-a935-f86d6f4ea3ff",
        "bill_id": "6986259e-2d6e-11e6-8a7a-0ff2cf595aaa",
        "work_date": "2016-06-08",
        "amount": "70000.0",
        "bill_number": "R6",
        "pay_id": "R683FRUIR89"

    }
}

POST https://api.jowi.club/v010/pay_bill

Параметр Обязательный? Описание
api_key да api_key приложения
sig да sig приложения
authentication_token да token клиента
restaurant_id да ID заведения
bill_id да ID счета клиента
amount да Сумма счета
pay_token да Токен для оплаты
pay_id нет ID оплаты внешной системы

Алгоритм формирования подписи pay_token

  1. Рассчитывается SHA256 ­хэш от конкатенации строк:

    sha256 = sha(api_secret+bill_id) // sha256 хеш от склеенной строки

В ответ сервер возвращает код клиента.

Параметр Описание
restaurant_id ID заведения в системе JOWI, uuid
bill_id ID счета
work_date Локальная дата ресторана
amount Сумма
bill_number Номер счета
pay_id ID оплаты внешной системы

Error codes

Код Описание
1 api_key пустой
2 sig пустой
3 sig не правильный
4 restaurant_id пустой
5 api_key не найден в системе
6, 8 Restaurant не найден
7 В ресторане онлайн заказа отключены
10 В локальном терминале не включено прием заказов, свяжитесь с рестораном
21 date_time пустой
22 phone пустой
23 Order не найден
24 Order id пустой
27 Restaurant не активирован
28 date_time пустой
29 В локальном терминале не включено прием заказов, свяжитесь с рестораном
30 Сумма заказа не равна сумме оплаты
32 hall_id пустой
33 Hall plain не найден
34 table_id пустой
35 contact_information пустой
36 date_time пустой
37 date_time формат не правильный
38 people_count равна 0
39 В ресторане онлайн бронирования не включены
40 Table не найден
41 Ошибка сервера
43 reserv_id пустой
44 table reserv не найден
50 Email пустой
53 Device name пустой
54 Device ID пустой
55 Client не найден
58 Facebook ID не правильный
57 Password not не правильный
59 Facebook token ошибка при проверке
60 authentication_token пустой
61 authentication_token не найден
72 Ошибка сервера
73 Client не сохранен
74 Email уже существует
75 Email не обновлен
81 first_name пустой
82 last_name пустой
83 phone пустой
86 client уже существует
87 клиент существуюет в ресторане
88 клиент не существуюет в ресторане
90 bill_id пустой
91 amount пустой
92 Счет не найден
93 Уже оплачен
94 сумма счета не равна сумме оплаты
95 счет не закрыт в ресторане
96 токен оплаты не правильный
101 Не валидный uuid