API
Протокол взаимодействия клиентского приложения/web-виджета с сервисом LigaTaxi
Версия: v1
Содержание
- 1 Основные положения.
- 2 Получение конфигураций компаний
- 2.1 Получение описания компании
- 2.2 Получение списка контактных номеров компании
- 2.3 Получение координат водителей компании для отображения на карте
- 2.4 Получение списка возможных причин отмены заказа
- 2.5 Отправка SMS с кодом активации номера телефона
- 2.6 Получить профиль клиента
- 2.7 Просчет стоимости поездки
- 2.8 Создание заказа
- 2.9 Список заказов клиента
- 3 Типы данных
Основные положения.
Сервис LigaTaxi (далее сервис), предоставляет REST API
интерфейс, с помощью которого разработчики стороннего ПО могут авторизировать клиента, получить список предыдущих поездок клиента, просчитать и создать новый заказ, отслеживать статусы текущих заказов. Интерфейсы сервиса являются защищенными, что позволяет стороннему ПО напрямую взаимодействовать с сервисом. Сервис позволяет выполнять кросс доменные запросы, передавая соответствующие http
заголовки.
Приложение для заказа такси или веб виджет (далее стороннее ПО), взаимодействует с сервисом по http
протоколу. Стороннее ПО должно корректно обрабатывать статусы ошибок которые будет возвращать сервис.
Адрес API сервера.
API сервер всегда будет находится по адресу api-<адрес личного кабинета в сервисе>
. Например, если адрес личного кабинета находится по адресу demo-city.ligataxi.com
, то адрес API сервера будет находится по адресу api-demo-city.ligataxi.com
.
Протокол взаимодействия.
Сервис предоставляет REST
архитектуру, где метод (далее ресурс) имеет конечное состояние которое можно изменять с помощью методов GET
, POST
, PUT
, DELETE
.
Стороннее ПО взаимодействует с сервисом по протоколу json
. Адрес каждого ресурса должен заканчиваться символом /
. Каждый ресурс описанный ниже в данной документации будет иметь префикс /api/v1/client/
. То есть для ресурса myresource
полный url
будет иметь вид http://api-demo-city.ligataxi.com/api/v1/client/myresource/
.
Авторизация.
Авторизация происходит по двум критериями.
- Авторизация стороннего ПО. Выполняется с помощью тега
api-key
. Данный тег должен передаваться в качествеhttp
заголовка в каждом запроса стороннего ПО к сервису. - Авторизация клиента. Выполняется с помощью заголовка
uuid
. Не все ресурсы сервиса требуют авторизацию клиента.
Для получения api-key
с помощью которого сервис будет авторизовать стороннее ПО, необходимо перейти в настройки сервиса, раздел Справочники
-> API Ключи
. После необходимо добавить новый ключ. В форме создания ключа в поле Название
, необходимо вписать имя ключа. С таким же именем будет создан виртуальный пользователь от имени которого будет происходить все взаимодействие с сервисом. Компании
- список виртуальный компаний с которыми можно производить взаимодействие по данному ключу. Права доступа
- права для виртуального пользователя. В данном случае будет достаточно прав Рабочее место
.
После нажатия кнопки Сохранить
произойдет переадресация на список ключей. В списке возле вновь созданного ключа будет колонка API Ключ
и значение вида fe948ee7c9424796580e1a3bb760f0ee
. Данное значение и есть наш api-key
.
Так же API Ключ
можно отключить, тем самым запретив стороннему приложению взаимодействие с сервисом.
В случае если API Ключ отключен или указан неверно, сервис вернет ошибку 407 Proxy Authentication Required
.
Конфигурация API.
После создания API Ключа
, необходимо произвести настройку API сервиса
и связать его с API ключом
. Для этого необходимо перейти в раздел Администрирование
(в случае если у вас несколько виртуальных компании - в настройки виртуальной компании
) -> Настройки
-> Клиентское приложение
и добавить новую конфигурацию. В появившейся форме в поле API шлюз
из выпадающего списка необходимо выбрать созданный вами API Ключ
. В поле:
-
Населенные пункты
- необходимо указать населенные пункты в которые возможна подача автомобиля.
-
Тип заказа
- тип заказа который будет присвоен всем заказам созданным через данныйAPI
.
-
Мах. одновременных заказов
- максимальное количество активных заказов которые может создать клиента через данноеAPI
. -
Минимальное время подачи
- минимальное время для подачи автомобиля. Будет рассчитано как текущее время + значение данного поля. Значение указывается в минутах. -
Максимальное время подачи
- ограничение максимального времени подачи автомобиля. Рассчитывается также, как минимальное время подачи. Значение указывается в минутах. Если указать0
, ограничение будет отключено. -
Типы автомобилей
- доступные клиенту для выбора при заказе такси. -
Опции автомобиля
- опции автомобиля доступные клиенту для выбора при заказе такси. -
Требования к водителю
- требования к водителю доступные клиенту для выбора при заказе такси. -
Способ соединения с водителем
- Выключен - клиент не сможет позвонить водителю, Клиент <-> Водитель - клиенту будет доступен номер телефона водителя и он сможет напрямую с ним созвонится. -
Номера телефонов диспетчерской
- список номеров диспетчерской службы такси. Введите номер и нажмите[ENTER]
-
Текст SMS сообщения
- шаблон SMS сообщения которое будет отправлено клиенту при авторизации. Поле[code]
будет автоматически изменено на произвольно сгенерированный код активации. -
О такси
- краткая информация о службе такси, которая будет видна на клиентском приложении в разделеО такси
Список основных ошибок которые может вернуть сервис
Каждый ресурс можем возвращать такие же коды ошибок, но они могут иметь другие значения. Данные ошибки будут описаны в описании ресурса.
-
400 Bad Request
- в теле запроса переданы неверные параметры запроса. -
403 Forbidden
- ресурс требует авторизации клиента с помощью тегаuuid
. Тег не был передан либо указан неверно. -
404 Not Found
- указан неверный адрес ресурса. -
405 Method Not Allowed
- ресурс не поддерживает вызываемый метод. Например на ресурс который поддерживает только методGET
, был послан методPOST
. -
407 Proxy Authentication Required
- переданный api-key неверный или отключён. -
500 Internal Server Error
- внутренняя ошибка сервера. Получив подобную ошибку, стоит обратиться в тех. поддержку сервиса. -
502 Bad Gateway
- отсутствует подключение к сети или доступ из вашего региона закрыт
Получение конфигураций компаний
Адрес ресурса:company/
Метод: GET
Параметры запроса: отсутствуют
Необходима авторизация клиента: нет
[
{
"id":1,
"name":"Демо",
"max_pickup_time":0,
"default_pickup_time":5,
"driver_contact_method":1,
"city":"Москва",
"region":"Московская область",
"map_center":{
"lat":55.7425739894847,
"lng":37.6611328125
},
"areas":[
[
{
"lat":55.9983809553596,
"lng":39.22119140625
},
{
"lat":55.4850790375261,
"lng":36.10107421875
}
],
[
{
"lat":60.1168821019816,
"lng":31.1819458007812
},
{
"lat":59.7868158061153,
"lng":29.6548461914062
}
]
],
"car_types":[
{
"id":6,
"name":"Легковая"
},
{
"id":14,
"name":"Грузовик"
},
{
"id":25,
"name":"Универсал"
}
],
"car_extras":[
{
"id":3,
"name":"Детское кресло 100 р."
}
],
"driver_extras":[
{
"id":2,
"name":"Знание английского"
}
]
}
]
Описание параметров:
В результате будет список конфигураций компаний с которыми возможно работать по данному API ключу. Если таких компаний будет больше одной, клиенту нужно дать возможность выбора компании с которой он хочет работать.[
{
"id":1,
Айди компании. В дальнейшем данный айди нужно будет передавать в url ресурсов к которым будут проводиться запросы.
"name":"Демо",
Назнвание компании
"max_pickup_time":0,
Максимальное время подачи. Рассчитывается как текущее время + значение в мн. Если 0 - без ограничений
"default_pickup_time":5,
Время подачи по умолчанию, оно же минимальное время подачи.
"driver_contact_method":1,
Метод соединения водителя с клиентом: 0 - выключено, 1 - Клиент <-> Водитель.
"city":"Москва",
Название основного населенного пункта в котором работает компания.
"region":"Московская область",
Область основного населенного пункта в котором работает компания.
"map_center":{
"lat":55.7425739894847,
"lng":37.6611328125
},
Координаты центра карты основного населенного пункта в котором работает компания.
"areas":[
[
{
"lat":55.9983809553596,
"lng":39.22119140625
},
{
"lat":55.4850790375261,
"lng":36.10107421875
}
],
[
{
"lat":60.1168821019816,
"lng":31.1819458007812
},
{
"lat":59.7868158061153,
"lng":29.6548461914062
}
]
],
Список координат регионов в которые возможна подача автомобиля. Указывается как набор точек северо-востока и юго-запада региона. Точка вызова должна ходится в пределах данных регионов.
"car_types":[
{
"id":6,
"name":"Легковая"
},
{
"id":14,
"name":"Грузовик"
},
{
"id":25,
"name":"Универсал"
}
],
Список типов автомобилей, которые может выбрать клиента при заказе такси.
"car_extras":[
{
"id":3,
"name":"Детское кресло 100 р."
}
],
Список опций автомобиля, доступных клиенту при заказе такси.
"driver_extras":[
{
"id":2,
"name":"Знание английского"
}
]
Список требований к водителю, доступных клиенту при заказе такси
}
]
Получение описания компании
Адрес ресурса:company/<id_компании>/about/
Метод: GET
Параметры запроса: отсутствуют
Необходима авторизация клиента: нет
{
"about":"Мы самая лучшая служба такси в мире."
}
Получение списка контактных номеров компании
Адрес ресурса:company/<id_компании>/phones/
GET
Параметры запроса: отсутствуют
Необходима авторизация клиента: нет
[
"23453452345",
"52354545453",
"34534534535"
]
Получение координат водителей компании для отображения на карте
Адрес ресурса:company/<id_компании>/drivers/
GET
Параметры запроса: отсутствуют
Необходима авторизация клиента: нет
{
"drivers":[
{
"lat":55.74933168637703,
"lng":37.61841641582357
},
{
"lat":54.793563168637704,
"lng":39.32841641582357
}
]
}
Получение списка возможных причин отмены заказа
Адрес ресурса:cancel_reasons/
Метод: GET
Необходима авторизация клиента: нет
Параметры запроса: отсутствуют
[
{
"id":2,
"name":"Ложный"
},
{
"id":3,
"name":"Передумал"
}
]
Отправка SMS с кодом активации номера телефона
Адрес ресурса:/company/<id_компании>/auth/
GET
Необходима авторизация клиента: нет
Параметры запроса: передаются как обычные параметры для GET
запроса
Поле | Тип данных | Default | Описание |
phone | string | Номер телефона клиента без кода страны | |
dev_type | int | Тип устройства:
1 - Android 2 - iOS 3 - Windows phone 4 - Web widget | |
dev_id | string | ID устройства |
Пример ответа: В ответ будет возвращен http
статус 200
Подтверждение телефона с помощью кода активации
Адрес ресурса:company/<id_компании>/auth/
Метод: POST
Необходима авторизация клиента: нет
Параметры запроса: передаются как обычные параметры для POST
запроса
Поле | Тип данных | Default | Описание |
phone | string | Номер телефона клиента без кода страны | |
dev_type | int | Тип устройства:
1 - Android 2 - iOS 3 - Windows phone 4 - web widget | |
dev_id | string | ID устройства | |
code | string | Код подтверждения полученный в SMS |
{
"uuid":"123e4567-e89b-12d3-a456-426655440000"
}
Получить профиль клиента
Адрес ресурса:company/<id_компании>/profile/
GET
Необходима авторизация клиента: да
Параметры запроса: отсутствуют
Пример ответа:
Просчет стоимости поездки
Адрес ресурса:company/<id_компании>/calculate/
POST
Необходима авторизация клиента: не обязательно
Параметры запроса:
Все параметры должно быть упакованы json
и отправлены в теле запроса.
Поле | Тип данных | Default | Описание |
pickup_address | Address | Адрес подачи | |
pickup_time | string | Время подачи | |
car_type | int | Тип автомобиля | |
car_extras | int[] | Массив из идентификаторов опций автомобиля | |
driver_extras | int[] | Массив из идентификаторов требований к водителю | |
destinations | Address[] | Массив из адресов назначения | |
return_route | bool | Указывает нужно ли в ответе возвращать маршрут |
{
"pickup_address":{
"street":"Киевский вокзал",
"building":"",
"comment":"",
"lat":55.743299,
"lng":37.567348
},
"pickup_time":"2016-09-30T15:49:26",
"car_type":"6",
"car_extras":[
7
],
"driver_extras":[
1,
5
],
"destinations":[
{
"street":"Севастопольский проспект",
"building":"",
"comment":"",
"lat":55.658865,
"lng":37.573618
}
],
"return_route":true
}
{
"distance":13941,
Расчетное расстояние маршрута поездки (метры)
"price":395.0,
Расчетная стоимость поездки (с учетом скидок)
"driving_time":15,
Расчетное время выполнения заказа (минуты)
"discount_price":0.0,
Размер фиксированной скидки
"discount_percent":0.0,
Размер скидки в процентах
"route":"mkfsI{nhdFgJoIsB__AlBeQ~j@iVjq@wvCnEmi@uAs_@bC{BhjChNvE~U|QzN|JeAbqBdhBx_DviDeMsO",
Маршрут поездки закодированный с помощью алгоритма Encoded Polyline. Данный тег будет возвращен, если в запросе на просчет параметр return_route был отмечен как true
}
Создание заказа
Адрес ресурса:company/<id_компании>/order/
POST
Необходима авторизация клиента: обязательно
Параметры запроса:
Все параметры должно быть упакованы json
и отправлены в теле запроса.
Поле | Тип данных | Default | Описание |
pickup_address | Address | Адрес подачи | |
pickup_time | string | Время подачи | |
car_type | int | Тип автомобиля | |
car_extras | int[] | Массив из идентификаторов опций автомобиля | |
driver_extras | int[] | Массив из идентификаторов требований к водителю | |
destinations | Address[] | Массив из адресов назначения | |
comment | string | Примечание к заказу |
{
"pickup_address":{
"street":"Киевский вокзал",
"building":"",
"comment":"",
"lat":55.743299,
"lng":37.567348
},
"pickup_time":"2016-09-30T16:06:01",
"car_type":"6",
"car_extras":[
"3"
],
"driver_extras":[
],
"comment":"Встречать с табличкой",
"destinations":[
{
"street":"Севастопольский проспект",
"building":"",
"comment":"",
"lat":55.658865,
"lng":37.573618
}
]
}
{
"id":96,
"company_id":1,
"state":1,
"price":395,
"discount_price":0,
"discount_percent":0,
"distance":13941,
"create_time":"2016-09-30T13:01:03",
"done_time":null,
"pickup_time":"2016-09-30T16:06:03",
"car_type":6,
"car_extras":[
3
],
"driver_extras":[
],
"comment":"Встречать с табличкой",
"pickup_address":{
"street":"Киевский вокзал",
"building":"",
"comment":"",
"lat":55.743299,
"lng":37.567348
},
"destinations":[
{
"street":"Севастопольский проспект",
"building":"",
"comment":"",
"lat":55.658865,
"lng":37.573618
}
]
}
Список заказов клиента
Адрес ресурса:company/<id_компании>/order/
GET
Необходима авторизация клиента: обязательно
Параметры запроса: передаются в виде обычных параметров для GET
запроса
Поле | Тип данных | Default | Описание |
state | int[] | null | Статусы заказов |
limit | int | 10 | Количество отображаемых заказов |
offset | int | 0 | Смещение при выборке |
[
{
"id":97,
"company_id":1,
"state":1,
"price":15685.0,
"discount_price":0.0,
"discount_percent":0.0,
"distance":709094,
"create_time":"2016-09-30T13:55:34",
"done_time":null,
"pickup_time":"2016-09-30T17:00:34",
"car_type":6,
"car_extras":[
3
],
"driver_extras":[
],
"comment":"",
"pickup_address":{
"street":"Киевский вокзал",
"building":"",
"comment":"",
"lat":55.743299,
"lng":37.567348
},
"destinations":[
{
"street":"Московский проспект",
"building":"",
"comment":"",
"lat":59.88544,
"lng":30.320036
}
]
}
]
Получение маршрута по заказу
Адрес ресурса:company/<id_компании>/order/<id_заказа>/route/
GET
Необходима авторизация клиента: обязательно
Параметры запроса: отсутствуют
Маршрут возвращается в формате Encoded Polyline
mkfsI{nhdFgJoIsB__AlBeQ~j@iVjq@wvCnEmi@uAs_@bC{BhjChNvE~U|QzN|JeAbqBdhBx_DviDeMsO
Получение статуса заказа
Адрес ресурса:company/<id_компании>/order/<id_заказа>/state/
GET
Необходима авторизация клиента: обязательно
Параметры запроса: отсутствуют
{
"state":1
}
1 - поиск водителя
2 - водитель выехал за клиентом
3 - на месте (ожидает клиента)
4 - по маршруту
5 - выполнен
6 - отменен
7 - просрочен, водитель не найден
8 - зарезервирован за водителем
Получение информации о водителе выполняющем заказ
Адрес ресурса:company/<id_компании>/order/<id_заказа>/driver/
GET
Необходима авторизация клиента: обязательно
Параметры запроса: отсутствуют
{
"driver_name":"Иван Иванов",
"phone":"+79772225588",
"car_model":"Форд Фокус",
"car_color":"Желтый",
"car_number":"ЕН94377"
}
Получение координат водителя
Адрес ресурса:company/<id_компании>/order/<id_заказа>/driver/location/
GET
Необходима авторизация клиента: обязательно
Параметры запроса: отсутствуют
{
"lat":51.685431666666666,
"lng":35.27650666666667
}
Отмена заказа
Адрес ресурса:company/<id_компании>/order/<id_заказа>/
DELETE
Необходима авторизация клиента: обязательно
Параметры запроса: передаются как обычные параметры для DELETE
запроса
Поле | Тип данных | Default | Описание |
reason | int | Идентификатор причины отмены |
Оценка поездки
Выполняется при статусе заказа Выполнен(5)
company/<id_компании>/order/<id_заказа>/evaluate/
POST
Необходима авторизация клиента: обязательно
Параметры запроса:
Все параметры должно быть упакованы json и отправлены в теле запроса.
Поле | Тип данных | Default | Описание |
rating | float | Оценка. Значение от 1.0 до 5.0 | |
comment | str | Комментарий к оценке |
Типы данных
Order
Поле | Тип данных | Default | Описание |
pickup_address | Address | Адрес подачи | |
pickup_time | string | Время подачи | |
car_type | int | Тип автомобиля | |
car_extras | int[] | Массив из идентификаторов опций автомобиля | |
driver_extras | int[] | Массив из идентификаторов требований к водителю | |
destinations | Address[] | Массив из адресов назначения | |
company_id | int | Идентификатор службы такси | |
state | int | Статус заказа
1 - поиск водителя 2 - принят водителем 3 - на месте 4 - по маршруту 5 - выполнен 6 - отменен 7 - просрочен, водитель не найден 8 - зарезервирован за водителем | |
price | float | Цена | |
discount_price | float | Сумма скидки | |
discount_percent | float | Процент скидки | |
distance | float | Длина маршрута в метрах | |
create_time | str | Время создания заказа | |
done_time | str | Время выполнения заказа |
Address
Поле | Тип данных | Default | Описание |
street | string | Улица | |
building | string | Дом | |
comment | string | Примечание к адресу | |
lat | float | Широта | |
lng | float | Долгота |