API для диллера
Содержание
Термины
Контент – видео/аудио или текстовая информация.
Сервис – программно-аппаратный комплекс предоставления доступа к IPTV как к услуге.
Клиент – приложение или устройство, получающее доступ к Сервису посредством учет- ной записи.
Абонент – физический пользователь сервиса SUNDUK.TV
Абонемент – учетная запись клиента. Логин и пароль цифровые – для удобства набора со стандартного пульта управления устройства (settopbox).
Сервер вещания – программно-аппаратный комплекс для организации трансляции потокового видео и радиосигнала.
Ссылка вещания – URL, по адресу которого сервер вещания транслирует контент.
Middleware – комплекс технологического программного обеспечения для авторизации и обеспечения взаимодействия между различными приложениями, системами, компонентами.
API – интерфейс Middleware для программного взаимодействия с клиентом.
Описание принципов работы с API
Провайдер транслирует видеопотоки телевизионных и радио каналов в сети Интернет через сеть своих серверов по протоколу HLS. Видео в формате H.264 и звук AAC/AC3 URL являются динамическими привязанными к конкретной сессии, с ограниченным сроком жизни (устаревающие). Для начала работы с сервисом необходимо авторизоваться в системе и ввести дополнительные параметры. Схема работы приложения:
1. Авторизация на сервере и получения списка абониментов для покупки и продления абонемента /reseller_get_list_aboniments
2. Добавление абонемента (оплата с внутреннего счета) /create_new_aboniment
3. Продление абонемента (оплата с внутреннего счета) /update_aboniment
Как использовать этот API
Вы можете использовать любой язык программирования при работе с данным API. Работа с API осуществляется по протоколу HTTP, обмен данными происходит в формате XML или JSON, Вам понадобятся эти библиотеки. В формате JSON удобнее работать с HASH массивами и мы рекомендуем этот формат. Запросив один раз, старайтесь кешировать у себя данные HASH, URL или EPG, пока они не устареют. Этим вы ускорите работу клиента, и не создадите лишнюю нагрузку на сервера
Все запросы к API происходят по протоколу http, и имеют следующий вид:
http://dealerapi.sunduk.tv/api/<тип ответа>/<имя функции>?param1=value¶m2=value...
<тип ответа> задает формат выходных данных. Данные могут быть типов: XML, JSON, JSONP
Примеры вызовов:
http://dealerapi.sunduk.tv/api/json/reseller_get_list_aboniments?username=<username>&password=<password>
Все возвращаемые сообщения имеют вид ассоциативного массива.
В случае ошибочного запроса API возвращает XML-пакет следующего содержания:
<?xml version="1.0" encoding="UTF-8"?> <response> <error> <message>ERROR_MESSAGE</message> <code>ERROR_CODE</code> </error> <servertime>SERVER_TIME</servertime> </response>
message - сообщение об ошибке
code - код ошибки
servertime - время на сервере (формат unixtime)
Формат времени
Все данные, обозначающие дату и время, представлены в формате unixtime. Каждый ответ серве- ра имеет отпечаток времени сервера (для синхронизации) с тегом <servertime>
Функции API
reseller_get_list_aboniments
Функция выполняет авторизацию клиента.
Вызов:
/reseller_get_list_aboniments?username=<username>&password=<password>
Входные параметры:
username - username пользователя который был зарегестриррован
password - пароль юзера
Пример ответа по запросу /reseller_get_list_aboniments?username=Test&password=test:
<?xml version="1.0" encoding="UTF-8"?> <response> <code>OK</code> <data> <bye> 0 => array (size=4) 'id' => string '26' (length=2) 'name' => string '12 месяцев' (length=17) 'reseller_price' => string '96.00' (length=5) 'status' => string 'standart' (length=8) 1 => array (size=4) 'id' => string '27' (length=2) 'name' => string '24 месяца' (length=15) 'reseller_price' => string '168.00' (length=6) 'status' => string 'standart' (length=8) 2 => array (size=4) 'id' => string '5' (length=1) 'name' => string '1 месяц' (length=12) 'reseller_price' => float 14.5 'status' => string 'standart' (length=8) 3 => array (size=4) 'id' => string '6' (length=1) 'name' => string '6 месяцев' (length=16) 'reseller_price' => int 72 'status' => string 'standart' (length=8) 4 => array (size=4) 'id' => string '7' (length=1) 'name' => string '12 месяцев' (length=17) 'reseller_price' => int 120 'status' => string 'standart' (length=8) 5 => array (size=4) 'id' => string '23' (length=2) 'name' => string '24 месяца' (length=15) 'reseller_price' => int 210 'status' => string 'standart' (length=8) </bye> <renewal> 0 => array (size=4) 'id' => string '5' (length=1) 'name' => string '1 месяц' (length=12) 'reseller_price' => float 14.5 'status' => string 'standart' (length=8) 1 => array (size=4) 'id' => string '6' (length=1) 'name' => string '6 месяцев' (length=16) 'reseller_price' => int 72 'status' => string 'standart' (length=8) 2 => array (size=4) 'id' => string '7' (length=1) 'name' => string '12 месяцев' (length=17) 'reseller_price' => int 120 'status' => string 'standart' (length=8) 3 => array (size=4) 'id' => string '23' (length=2) 'name' => string '24 месяца' (length=15) 'reseller_price' => int 210 'status' => string 'standart' (length=8) </renewal> </data> <servertime>1423845147</servertime> </response>
Описание параметров из ответа:
code - Статус ответа
data - Данные возвращаемые пользователю
bye -  Блок данных для покупки
id - Номер пакета, абонимента
name -  Название пакета, абонимента
reseller_price - Цена для диллера
status - Условное обозначения пакета(packet) и абонимента(standart)
renewal - Абонименты и пакеты на продление
create_new_aboniment
Функция выполняет авторизацию клиента.
Вызов:
/create_new_aboniment?username=<username>&password=<password>&id=<id>&status=<status>®istertome=<registertome>
Входные параметры:
username - username пользователя который был зарегестриррован
password - пароль юзера
id - Номер пакета, абонимент
status - Условное обозначения пакета(packet) и абонимента(standart)
registertome - привязка абонимента к диллеру
Пример ответа по запросу /create_new_aboniment?username=Test&password=test&id=test&status=standart®istertome=true:
<?xml version="1.0" encoding="UTF-8"?> <response> <code>OK</code> <status>paid</status> <data> array (size=3) 'login' => string 'test' (length=6) 'pass' => string 'test' (length=6) </data> <servertime>1423845147</servertime> </response>
Описание параметров из ответа:
code - Статус ответа
data - Данные возвращаемые пользователю
login-  Логин абонимента
pass -  Пароль абонимента
status - Статус заказа
update_aboniment
Функция выполняет авторизацию клиента.
Вызов:
/update_aboniment?username=<username>&password=<password>&id=<id>&status=<status>&subscription=<subscription>
Входные параметры:
username - username пользователя который был зарегестриррован
password - пароль юзера
id - Номер пакета, абонимент
status - Условное обозначения пакета(packet) и абонимента(standart)
subscription - Номер(логин) оплаченого пакета, абонимент
Пример ответа по запросу /update_aboniment?username=Test&password=test&id=test&status=standart&subscription=test:
<?xml version="1.0" encoding="UTF-8"?> <response> <code>OK</code> <servertime>1423845147</servertime> </response>
Описание параметров из ответа:
code - Статус ответа
Коды ошибок
0 - Unknown error - Неизвестная ошибка
1 - Incorrect request - Неверный запрос
2 - Wrong login or password - Неправильный логин или пароль
3 - Access denied - Доступ запрещен
4 - Login incorrect - Неправильный логин
5 - Your balance is less than our amount - Ваш балнс меньше чем баланс заказа
6 - Enter type of product - Введите тип продукта
7 - Package with id is not found - Пакет с данным айди не найден
8 - This aboniment can continue only by aboniment - Этот абонимент(пакетом) может быт продолжен только абониментом(пакетом)
9 - This order not you or your referal - Этот заказ не ващего диллера
10 - Not found this aboniment with this id - Не найден абонимент с этим айди
11 - Enter subscription id - Введите айди оплаченого абонимента
12 - This package not for this reseller - Этот пакет не для этого продавца
Ограничения
Существует ограничение на 5 запроса в секунду для одной сессии. Это вынужденная мера, введенная для защиты системы от избыточных перегрузок. В случае превышения этого лимита возвращается стандартный ответ ошибки с кодом 31 (Query limit exceeded).