Платформа 24часаТВ со своей стороны для интеграционных целей с провайдерами разработало API. Полное описание - https://api.24h.tv/v2/doc/provider#!/

Для доступа к API необходимо зарегистрироваться в платформе 24часаТВ, получить доступ к личному кабинету провайдера и сгенерировать там TOKEN.

При данной схеме интеграции провайдеру доступен функционал:

  • регистрация пользователя со стороны провайдера
  • изменять информацию о пользователе
  • возможность управления подписками со стороны биллинговой системы провайдера
  • возможность устанавливать подписки на паузу/восстанавливать
  • возможность отображение баланса из биллинговой системы в тв приложениях пользователям

Провайдеру необходимо реализовать ответное API для запросов PACKET () и AUTH (по желанию).

Логика платформы 24часаТВ подключения пакетов и переходов с пакета на пакет.

  • Пакеты бывают двух типов, базовые (основной) и дополнительные. Каждый базовый пакет имеет свой набор дополнительных пакетов для подключения (могут быть базовые пакеты и без дополнительных).
  • Дополнительный пакет нельзя подключить без базового, т.е. сначала должен быть подключен базовый, а потом уже можно будет подключить доступные дополнительные пакеты для этого базового пакета.
  • Подключение любого типа пакета производится на календарный месяц (на количество дней в месяце на момент подключения пакета), если не указаны дата "с" и/или дата "по" при создании подписки через API 24часаТВ.
  • После окончания срока действия любого пакета происходит его автоматическое автопродление (если не снят флаг автопродления у этого пакета). При этом по схеме интеграции "48 часов", при автопродлении подписки, запрос к провайдеру PACKET не отправляется! 
  • Переход на более дорогой базовый пакет (докупка) должен быть возможен в любой момент времени действия этого пакета. При таком переходе провайдером высчитывается стоимость недосмотренного времени по более дешевому пакету и стоимость более дорогого пакета уменьшается на эту сумму.
  • Переход с более дорогого базового пакета на более дешевый должен быть возможен только после окончания действия более дорогого, при этом более дешевый пакет должен быть запланирован в биллинговой системе провайдера на подключение после окончания дорогого пакета, также необходимо отключить автопродление у этого пакета. Пользователь до окончания срока действия более дорогого пакета может изменить запланированный пакет на любой другой, это должно быть учтено в биллинговой системе провайдера.
  • При переходе с базового пакета на другой базовый пакет дополнительные пакеты автоматически не отключаются, этим также должен управлять биллинговая система провайдера.

Регистрация пользователя со стороны провайдера

Для регистрации пользователя в платформе 24часаТВ необходимо использовать вызов API: 

Описание - https://api.24h.tv/v2/#!/Users/post_users

Тип запроса: POST

https://api.24h.tv/v2/users?token=<TOKEN>

Передаваемые параметры:

{
"username": "<username>",
"first_name": "<Имя пользователя>",
"last_name": "<Фамилия пользователя>",
"email": "email пользователя",
"phone": "<телефон пользователя>",
"provider_uid": "<id в биллинговой системе провайдера>",
"is_provider_free": <Доступ к тв не из сети провайдера (false - запретить, true - разрешить)>,
"is_active": <Активность пользователя (false - заблокирован, true - активен)>
}

В ответ будет возвращены данные в json формате. В ответе получите идентификатор пользователя в платформе (ID), его необходимо сохранить и использовать для дальнейшей идентификации:

Response Code - 200

{
  "id": <идентификатор пользователя в платформе 24часаТВ, его необходимо сохранить и использовать для дальнейшей идентификации>, 
  "username": "<username пользователя>",
  "first_name": "<Имя пользователя>",
  "last_name": "<Фамилия пользователя>",
  "phone": "<Телефон>",
  "email": "<email пользователя>",
  "timezone": null,
  "provider": {
    "id": <ID провайдера в платформе 24часаТВ>,
    "name": "<Название провайдера>",
    "proxy": "",
    "landing": {
      "shortname": "<Короткое название провайдера>",
      "logo": null,
      "url": "",
      "support": {
        "url": "<URL провайдера>",
        "phone": "<Телефон провайдера>"
      },
      "login": {
        "title": "",
        "description": "<Сообщение при регистрации пользователя>"
      }
    }
  },
  "provider_uid": "<id в биллинговой системе провайдера>"
}

В случае неверных данных будет возвращена ошибка с описанием в json формате, например, если попытаться создать такого же пользователя:

Response Code - 400

{
  "error": {
    "message": "{'email': ['User with this email already exists.'], 'phone': ['User with this phone already exists.'], 'username': ['User with this username already exists.']}"
  },
  "status_code": 400,
  "detail": {
    "email": [
      "User with this email already exists."
    ],
    "phone": [
      "User with this phone already exists."
    ],
    "username": [
      "User with this username already exists."
    ]
  }
}


Изменение информации о пользователе со стороны провайдера.

Метод позволяет изменить часть пользовательских данных и возвращает измененные данные пользователя.

Описание - https://api.24h.tv/v2/doc/provider#!/Users/patch_users_user_id

  • При передаче поля password будет установлен новый пароль
  • Если у пользователя установлен email или телефон(phone) и он провалидирован, то изменить их через api нельзя.

Тип запроса: PATCH

User_ID - полученный при создании пользователя:

https://api.24h.tv/v2/users/<User_ID>?token=<TOKEN>

Передаваемые параметры:

{

  "username": "<username пользователя>", 
  "first_name": "<Имя пользователя>",
  "last_name": "<Фамилия пользователя>",
  "provider_uid": "<id в биллинговой системе провайдера>",
  "password": "<пароль>", 
"is_provider_free": <Доступ к тв не из сети провайдера (false - запретить, true - разрешить)>,
"is_active": <Активность пользователя (false - заблокирован, true - активен)>
}

В ответ будет возвращены данные в json формате. В ответе получите идентификатор пользователя в платформе (ID), его необходимо сохранить и использовать для дальнейшей идентификации:

{
  "id": <id пользователя в платформе 24часаТВ>,
  "username": "<username пользователя>",
  "first_name": "<Имя пользователя>",
  "last_name": "<Фамилия пользователя>",
  "phone": "<Номер телефона>",
  "email": "<email пользователя>",
  "timezone": null,
  "provider": {
    "id": <ID провайдера в платформе 24часаТВ>,
    "name": "<Название провайдера>",
    "proxy": null,
    "landing": {
      "shortname": "<Краткое название провайдера>",
      "logo": null,
      "url": "",
      "support": {
        "phone": "<Телефон провайдера>",
        "url": "<URL провайдера>"
      },
      "login": {
        "title": "",
        "description": "<Сообщение приветствия при регистрации>"
      }
    }
  },
  "provider_uid": "<id пользователя в биллинговой системе провайдера>"
}

В случае неверных данных будет возвращена ошибка с описанием в json формате.

Внимание! В случае блокировки пользователя, установкой флага is_active=false, данный пользователь не сможет войти в тв приложение, но подписки на пакеты у этого пользователя при это автоматом не отключаются! Если вам необходимо блокировать пользователя, то перед этим остановите все его активные подписки!


Получение списка зарегистрированных пользователей со стороны провайдера.

Метод получать список всех зарегистрированных пользователей провайдера.

Описание - https://api.24h.tv/v2/doc/provider#!/Users/get_users

Тип запроса: GET

https://api.24h.tv/v2/users?token=<TOKEN>

В ответ будет возвращены данные в json формате со списком всех пользователей провайдера:

[
  {
    "id": <id пользователя в платформе 24часаТВ>,
    "username": "<username пользователя>",
    "first_name": "<Имя пользователя>",
    "last_name": "<Фамилия пользователя>",
    "phone": "<Номер телефона>",
    "email": "<email пользователя>",
    "timezone": null,
    "provider": {
      "id": <ID провайдера в платформе 24часаТВ>,
      "name": "<Название провайдера>",
      "proxy": null,
      "landing": {
        "shortname": "<Краткое название провайдера>",
        "logo": null,
        "url": "",
        "support": {
          "phone": "<Телефон провайдера>",
          "url": "<URL провайдера>"
        },
        "login": {
          "title": "",
          "description": "<Сообщение приветствия при регистрации>"
        }
      }
    },
    "provider_uid": "<id пользователя в биллинговой системе провайдера>"
  },
  .. список остальных пользователей, вырезан для краткости
]

При выводе большого списка используется постраничный вывод, поэтому необходимо в запрос добавлять параметры &limit= и &offset= для получения полного списка пользователей.

Поиск пользователя в зарегистрированных пользователях со стороны провайдера.

Поиск пользователей возможен по:

  • id пользователя в платформе 24часаТВ 
  • По номеру телефона или по id в биллинговой системе провайдера.

Поиск по id пользователя:

Описание - https://api.24h.tv/v2/doc/provider#!/Users/get_users_user_id

Тип запроса: GET

https://api.24h.tv/v2/users/<ID пользователя в платформе 24часаТВ>?token=<TOKEN>

В ответ будет возвращены данные в json формате о пользователе провайдера:

{
    "id": <id в платформе 24часаТВ>,
    "username": "<username пользователя>",
    "first_name": "<Имя пользователя>",
    "last_name": "<Фамилия пользователя>",
    "phone": "<Телефон пользователя>",
    "email": "<email пользователя>",
    "timezone": null,
    "provider": {
      "id": <ID провайдера в платформе 24часаТВ>,
      "name": "<Название провайдера>",
      "proxy": "<PROXY провайдера>",
      "landing": {
        "shortname": "<Название ландинг страницы провайдела>",
        "logo": "<Логотип провайдера>",
        "url": "",
        "support": {
          "url": "<url провайдера>",
          "phone": "<Телефон провайдера>"
        },
        "login": {
          "title": "",
          "description": "<Текст приветствия при регистрации>"
        }
      }
    },
    "provider_uid": "<id в биллинговой системе провайдера>"
  }

В случае неудачного поиск будет возвращена ошибка:

Response Code - 404

{
  "error": {
    "message": "Не найдено."
  },
  "status_code": 404,
  "detail": "Не найдено."
}


По номеру телефона или по id в биллинговой системе провайдера:

Описание - https://api.24h.tv/v2/doc/provider#!/Users/get_users

Тип запроса: GET

   поиск по номеру телефона:

   https://api.24h.tv/v2/users?phone=<Номер телефона абонента>&token=<TOKEN>

  поиск по ID из биллинговой системы провайдера:

  https://api.24h.tv/v2/users?provider_uid=<ID пользователя из биллинговой системы провайдера>&token=<TOKEN>

В ответ будет возвращены данные в json формате о пользователе провайдера:

{
    "id": <id в платформе 24часаТВ>,
    "username": "<username пользователя>",
    "first_name": "<Имя пользователя>",
    "last_name": "<Фамилия пользователя>",
    "phone": "<Телефон пользователя>",
    "email": "<email пользователя>",
    "timezone": null,
    "provider": {
      "id": <ID провайдера в платформе 24часаТВ>,
      "name": "<Название провайдера>",
      "proxy": "<PROXY провайдера>",
      "landing": {
        "shortname": "<Название ландинг страницы провайдела>",
        "logo": "<Логотип провайдера>",
        "url": "",
        "support": {
          "url": "<url провайдера>",
          "phone": "<Телефон провайдера>"
        },
        "login": {
          "title": "",
          "description": "<Текст приветствия при регистрации>"
        }
      }
    },
    "provider_uid": "<id в биллинговой системе провайдера>"
  }

В случае неудачного поиска будет возвращен пустой ответ:

[]


Получение списка пакетов доступных для подключения пользователю

Для получения информации о доступных пакетах провайдера для подключения пользователям в платформе 24часаТВ необходимо использовать соответствующий метод API.

В платформе 24часаТВ пакеты разделены на два типа: Базовые пакеты (в ответе "base": true) и Дополнительные пакеты (в ответе "base": false).

Подключение дополнительных пакетов без базового невозможно. Если подписка на базовый пакет закончилась, а на дополнительный нет, то подписка на дополнительный пакет автоматически становится на паузу и продлевается после подключения базового.

Некоторые базовые пакеты уже включают в себя некоторые дополнительные (максимальный тариф содержит в себе практически все дополнительные тарифы).

Описание - https://api.24h.tv/v2/doc/provider#!/Packets/get_packets

Тип запроса: GET

Получение списка возможных для подключения пакетов:

https://api.24h.tv/v2/packets?includes=availables&token=<TOKEN>

Параметр - includes возможные значения:

  • availables - получение возможных тарифов для подключения
  • includes - получение включенных дополнительных пакетов в базовые
  • videos - включение в ответ информации о видео источниках включенных в пакет (видео источники не подключаются, это справочная информация)

Параметры можно указывать через запятую ",".

В ответ будет возвращены данные в json формате о пакетах провайдера:

[
  {
    "id": <ID пакета>,
    "name": "<Название пакета>",
    "description": "<Описание пакета>",
    "price": "<Стоимость пакета>",
    "base": true,
    "videos": [],
    "available": [
      {
        "id": <ID пакета>,
        "name": "<Название пакета>",
        "description": "<Описание пакета>",
        "price": "<Стоимость пакета>",
        "base": false,
        "videos": [],
        "available": []
      },
      ... - вырезано для краткости
      {
        "id": <ID пакета>,
        "name": "<Название пакета>",
        "description": "<Описание пакета>",
        "price": "<Стоимость пакета>",
        "base": false,
        "videos": [],
        "available": []
      }
    ]
  },
  .... - вырезано для краткости
]

Без параметра includes будет возвращен список базовых тарифов:

https://api.24h.tv/v2/packets?token=<TOKEN>

В ответ будет возвращены данные в json формате о пакетах провайдера:

[
  {
    "id": <ID пакета>,
    "name": "<Название пакета>",
    "description": "<Описание пакета>",
    "price": "<Стоимость пакета>",
    "base": true
  },
  ... - вырезано для краткости
  {
    "id": <ID пакета>,
    "name": "<Название пакета>",
    "description": "<Описание пакета>",
    "price": "<Стоимость пакета>",
    "base": true
  }
]


Подключение платного пакета пользователю

Описание - https://api.24h.tv/v2/doc/provider#!/Users/post_users_user_id_subscriptions

Тип запроса: POST

https://api.24h.tv/v2/users/<ID пользователя в платформе 24часаТВ>/subscriptions?token=<TOKEN>

Параметры:

  • packet_id - id пакета
  • renew - включать автопродление подписки true/false 

В ответ будет возвращен json с информацией о подписке:

Response Code - 200

[{
"id": "<ID подписки>", # Идентификатор подписки
"renew": true, # Автообновление подписки
"is_paused": false, # Стоит ли подписка на паузе
"packet": {
    "id": <ID пакета>,
    "name": "<Описание пакета>",  # Название пакета
    "price": "<Стоимость пакета>"  # Цена пакета
},
"start_at": "2017-09-04T20:15:30.000Z", # Время начала подписки
"end_at": "2017-10-04T20:15:29.000Z"  # Время окончания подписки
}]

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

Response Code - 400

{
  "error": {
    "message": "['You need billing account for subscription.']"
  },
  "status_code": 400,
  "detail": [
    "You need billing account for subscription."
  ]
}


Отключение платного пакета пользователю

Описание - https://api.24h.tv/v2/doc/provider#!/Users/delete_users_user_id_subscriptions_subscription_id

Тип запроса: DELETE

https://api.24h.tv/v2/users/<ID пользователя в платформе 24часаТВ>/subscriptions/<ID подписки>?token=<TOKEN>

В ответ будет возвращен json с информацией о приостановленной подписке:

Response Code - 200

[{
"id": "<ID подписки>", # Идентификатор подписки
"renew": true, # Автообновление подписки
"is_paused": false, # Стоит ли подписка на паузе
"packet": {
    "id": <ID пакета>,
    "name": "<Описание пакета>",  # Название пакета
    "price": "<Стоимость пакета>"  # Цена пакета
},
"start_at": "2017-09-04T20:15:30.000Z", # Время начала подписки
"end_at": "2017-10-04T20:15:29.000Z"  # Время окончания подписки
}]

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

Response Code - 400

[]


Получение списка подписок на пакеты пользователя

Для получения текущих подписок пользователя используется вызов API платформы 24часаТВ:

Описание - https://api.24h.tv/v2/doc/provider#!/Users/get_users_user_id_subscriptions

Тип запроса: GET

https://api.24h.tv/v2/users/<ID пользователя в платформе 24часаТВ>/subscriptions/current?token=<TOKEN>

В ответе будет содержаться список текущих подписок пользователя в формате json:

[
    {
        "id": "<ID подписки>",
        "packet": {
            "id": <ID пакета>,
            "name": "<Название пакета>",
            "description": "<Описание пакета>",
            "price": "<Стоимость пакета>",
            "base": false
        },
        "start_at": "2017-09-25T16:09:56.000000Z",
        "end_at": "2017-10-25T16:09:55.000000Z",
        "renew": true,
        "is_paused": true,
        "pauses": []
    },
    {
        "id": "<ID подписки>",
        "packet": {
            "id": <ID пакета>,
            "name": "<Название пакета>",
            "description": "<Описание пакета>",
            "price": "<Стоимость пакета>",
            "base": false
        },
        "start_at": "2017-09-24T12:00:00.000000Z",
        "end_at": "2017-10-24T11:59:59.000000Z",
        "renew": true,
        "is_paused": false,
        "pauses": []
    }
]

Для получения списка всех когда либо назначенных подписок используется запрос:

Тип запроса: GET

https://api.24h.tv/v2/users/<ID пользователя в платформе 24часаТВ>/subscriptions?token=<TOKEN>

В ответе будет содержаться список всех подписок пользователя в формате json.


Постановка на паузу подписки пользователя

В случае, если пользователь провайдера желает приостановить свои платные подписки на неопределенное время возможна установка паузы у подписок.

Получение списка подписок установленных на паузу:

Описание - https://api.24h.tv/v2/doc/provider#!/Users/get_users_user_id_subscriptions_subscription_id_pauses

Тип запроса: GET

https://api.24h.tv/v2/users/<ID пользователя в платформе 24часаТВ>/subscriptions/<ID подписки>/pauses?token=<TOKEN>

В ответе будет содержаться информация о приостановке подписки на паузу:

{
  "id": "<ID паузы>",
  "start_at": "<Дата постановки на паузу>",
  "end_at": null
}

В случае если подписка не на паузе ответ будет:

Response Code - 404

{

  "detail": "Не найдено.",
  "error": {
    "message": "Не найдено."
  },
  "status_code": 404
}

Установка подписки на паузу:

Описание - https://api.24h.tv/v2/doc/provider#!/Users/post_users_user_id_subscriptions_subscription_id_pauses

Тип запроса POST

https://api.24h.tv/v2/users/<ID пользователя в платформе 24часаТВ>/subscriptions/<ID подписки>/pauses?token=<TOKEN>

В ответе будет содержаться информация о приостановке подписки на паузу:

Response Code - 200

{
  "id": "<ID паузы>",
  "start_at": "<Дата постановки на паузу>",
  "end_at": null
}

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

Response Code - 404

{

  "detail": "Не найдено.",
  "error": {
    "message": "Не найдено."
  },
  "status_code": 404
}

Постановка всех подписок пользователя на паузу

Установка подписки на паузу:

Описание - https://api.24h.tv/v2/doc/provider#!/Users/post_users_user_id_pauses

Тип запроса POST

https://api.24h.tv/v2/users/<ID пользователя в платформе 24часаТВ>/pauses?token=<TOKEN>

В ответе будет содержаться информация о приостановке подпикок на паузу:

Response Code - 200

[
{ "id": "<ID паузы>", "start_at": "<Дата постановки на паузу>", "end_at": null },
{
"id": "<ID паузы>", "start_at": "<Дата постановки на паузу>", "end_at": null
},
......
]

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

Response Code - 404

{

  "detail": "Не найдено.",
  "error": {
    "message": "Не найдено."
  },
  "status_code": 404
}

Снятие с паузы подписки пользователя

Описание - https://api.24h.tv/v2/doc/provider#!/Users/delete_users_user_id_subscriptions_subscription_id_pauses_pause_id

Тип запроса DELETE

https://api.24h.tv/v2/users/<ID пользователя в платформе 24часаТВ>/subscriptions/<ID подписки>/pauses/<ID паузы>?token=<TOKEN>

Response Code - 200

{
  "id": "<ID паузы>",
  "start_at": "<Дата постановки на паузу>",
  "end_at": "<Дата снятия с паузы>"
}

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

Response Code - 404

{

  "detail": "Не найдено.",
  "error": {
    "message": "Не найдено."
  },
  "status_code": 404
}

Снятие с паузы всех подписок пользователя

Описание - https://api.24h.tv/v2/doc/provider#!/Users/delete_users_user_id_pauses

Тип запроса DELETE

https://api.24h.tv/v2/users/<ID пользователя в платформе 24часаТВ>/pauses/<ID паузы>?token=<TOKEN>

Response Code - 200

[
{ "id": "<ID паузы>", "start_at": "<Дата постановки на паузу>", "end_at": "<Дата снятия с паузы>" },
{
"id": "<ID паузы>", "start_at": "<Дата постановки на паузу>", "end_at": "<Дата снятия с паузы>" },
......
]

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

Response Code - 404

{

  "detail": "Не найдено.",
  "error": {
    "message": "Не найдено."
  },
  "status_code": 404
}

Возможность отображение баланса из биллинговой системе в приложениях пользователей

В платформе 24часаТВ заложена возможность трансляции баланса из биллинговой системы провайдера в приложения пользователей. При любом изменении баланса у пользователя в биллинговой системе, провайдер может обновить его и в платформе 24часаТВ.

Установка отображаемого баланса:

Описание - https://api.24h.tv/v2/doc/provider#!/Users/post_users_user_id_provider_account

Тип запроса POST

https://api.24h.tv/v2/users/<ID пользователя в платформе 24часаТВ>/provider/account?token=<TOKEN>

Параметры:

  • id - id лицевого счета в биллинговой системе провайдера
  • amount - значение отображаемого баланса в рублях

Response Code - 200

{
  "id": <ID лицевого счета в биллинговой системе провайдера>,
  "source": {
    "id": <ID платежного аккаунта в платформе 24часаТВ>,
    "name": "<Название платежного аккаунта в платформе 24часаТВ>"
  },
  "amount": "<значение отображаемого баланса в рублях>"
}

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

Response Code - 404

{
  "status_code": 404,
  "error": {
    "message": "Не найдено."
  },
  "detail": "Не найдено."
}

Так же есть метод для просмотра установленного значения:

Описание - https://api.24h.tv/v2/doc/provider#!/Users/get_users_user_id_provider_account

Тип запроса: GET

https://api.24h.tv/v2/users/<ID пользователя в платформе 24часаТВ>/provider/account?token=<TOKEN>

В случае успешного поиска в платформе 24часаТВ будет возвращена информация о установленном значении:

Response Code - 200

{
  "id": <ID лицевого счета в биллинговой системе провайдера>,
  "source": {
    "id": <ID плаьежного аккаунта в платформе 24часаТВ>,
    "name": "<Название платежного аккаунта в платформе 24часаТВ>"
  },
  "amount": "<значение отображаемого баланса в рублях>"
}

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

Response Code - 404

{
  "status_code": 404,
  "error": {
    "message": "Не найдено."
  },
  "detail": "Не найдено."
}



Описание запроса AUTH в сторону провайдера из системы 24часаТВ
Запрос на авторизацию пользователя придет на API провайдера, если у пользователя не заполнен <provider_user_id> и используется биллинговая схема "simple_auth". Цель данного запроса установить привязку пользователя между системой 24часаТВ и биллинговой системы провайдера. В дальнейшем <provider_user_id> будет приходить к провайдеру в запросе PACKET. Запрос отправляется при входе в тв приложение абонентом, пока не будет заполнен <provider_user_id>.
Реализация данного запроса обязательна всеми провайдерам, работающими с 24часаТВ по агентской схеме!
На указанный провайдером интеграционный url система 24часаТВ отправляет POST запрос формата (параметры передаются в строке запроса):
<http или https>://<url для интеграции>:<порт>/auth?ip=<ip_address>&phone=<phone>&mbr_id=<user_id>
где:
  • url для интеграции:порт - url и порт указанный провайдером. Должен заканчиваться на "/" так как далее к этому URL добавляется "auth?ip=..." или "packet?user_id=..." или "cont?user_id=..."
  • ip_address - ip адрес абонента.<br>
  • phone - номер мобильного телефона, с которого зарегистрировался абонент.<br>
  • user_id - id учетной записи в системе 24часаТВ.
В система 24часаТВ ожидает ответ в формате json:
В случае удачного идентификации абонента в биллинговой системе провайдера id учетной записи или договора:
{
    "user_id": <provider_user_id>
}
В случае неудачи необходимо вернуть:
{
    "status": -1,
    "err": <код ошибки>,
    "errmsg": "<Описание ошибки>"
}
Список кодов ошибок "err":
  • -1 - Пользователь не найден.
  • -2 - Ошибка регистрации.
Описание ошибки - любое текстовое сообщение.
Запрос к провайдеру PACKET (желание подключить пакет пользователем через приложение тв)
Данный запрос производится от 24часаТВ к биллинговой системе провайдера, когда пользователь желает подключить тот или иной платный пакет через ТВ-приложение.
Запрос синхронный. Биллинговая система провайдера после получения данного запроса определяет возможность подключения желаемого платного пакета, подключает платный пакет через API платформы 24часаТВ (используя метод /v2/users/<user_id>/subscriptions) и возвращает положительный ответ в успешном случае или отрицательный ответ с текстом сообщения об ошибке, которое транслируется в приложение пользователю.
Обращаем внимание, что в сервисе 24часаТВ по агентской схеме пакеты подключаются на срок не менее месяца. Поэтому при смене базового пакета должна быть реализована следующая логика:
  • Если у абонента уже подключен базовый пакет с большей стоимостью - необходимо отменить его автопродление (установкой флага renew=false) и подключить новый пакет с даты окончания текущего.
  • Если у абонента подключен базовый пакет с меньшей стоимостью - необходимо подключить новый с текущего времени. Для этого необходимо сначала остановить старый базовый пакет путем отправки запроса DELETE /users/{user-id}/subscriptions, после этого отправить запрос в 24часаТВ на подключение нового пакета.
Тип запроса: POST
Запрос: http://<Интергационный урл>/packet?user_id=<Provider_user_id>&trf_id=<ID платного пакета в платформе 24часаТВ>
В теле запроса будет json такого типа:
{
    "user": {
        "id": <ID пользователя в платформе 24часаТВ>,
        "phone": "<Номер телефона пользователя>",
        "email": "<email пользователя>",
        "provider_uid": "<Provider user id – id из биллинговой системы провайдера>",
        "last_name": "<Фамилия пользователя>",
        "username": "<UserName пользователя>",
        "timezone": "Часовой пояс пользователя, например: Indian/Mauritius",
        "first_name": "<Имя пользователя>"
    },
    "type": "packet",
    "packet": {
        "id": <ID желаемого платного пакета в платформе 24часаТВ>,
        "price": "<Стоимость пакета>",
        "is_base": <Тип пакета: true – Базовый, false – дополнительный пакет>,
        "name": "<Название пакета>"
    }
}
Можно ориентироваться как на параметры URL, так и на json в теле запроса.
В ответ платформа 24часаТВ ожидает json с параметрами - status = 1 - в случае успеха или status != 1 и errmsg  c описанием ошибки, которое транслируется в тв приложение
Положительный ответ в json формате:
 {"status":1}
 Отрицательный ответ в json формате:
 {"status":-1,"errmsg":"На вашем балансе не хватает денежных средств"}

Запрос к провайдеру DELETE_SUBSCRIPTION (желание отключить пакет пользователем через приложение тв)
Данный запрос производится от 24часаТВ к биллинговой системе провайдера, когда в ТВ приложении на пакете абонент нажимает кнопку "Отключить".
Запрос синхронный. Биллинговой системе провайдера после получения данного запроса определяет возможность отключения желаемого платного пакета, отключает платный пакет через API платформы 24часаТВ и возвращает положительный ответ в успешном случае или отрицательный ответ с текстом сообщения об ошибке, которое транслируется в приложение пользователю.
Обращаем внимание, что в сервисе 24часаТВ по агентской схеме пакеты подключаются на срок не менее месяца. Поэтому биллинговая система при запросе пользователя на отключение должен снять автопродление пакета в собственной базе и проинформировать об этом сервис установкой флага renew=false в соответствующей подписке.
Тип запроса: POST
Запрос: http://<Интергационный урл>/delete_subscription?user_id=<Provider_user_id>&sub_id=<ID подписки в платформе 24часаТВ>
В теле запроса будет json такого типа:
{
"type": "delete_sub",
"user": {
"id": <ID пользователя в платформе 24часаТВ>,
"provider_uid": "<Provider user id - id из биллинговой системы провайдера>",
"username": "<UserName пользователя>",
"first_name": "<Имя пользователя>",
"last_name": "<Фамилия пользователя>",
"phone": "<Номер телефона пользователя>",
"email": "<email пользователя>",
"timezone": "Часовой пояс пользователя, например: Indian/Mauritius",
},
"subscription": {
"packet": {
"id": <ID желаемого платного пакета в платформе 24часаТВ>,
"name": "<Название пакета>"
"price": "<Стоимость пакета>",
"is_base": <Тип пакета: true - Базовый, false - дополнительный пакет>,
},
"start_at": "2018-10-31T18:00:27.953951Z",
"end_at": "2018-11-30T18:13:43.208460Z",
"renew": true,
"is_paused": false
}
}
Положительный ответ в json формате:
 {"status":1}
 Отрицательный ответ в json формате:
 {"status":-1,"errmsg":"<Причина ошибки>"}