Интеграция с 24hTV (24часаТВ)

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (21)

просмотр истории страницы
token=
balance_source_id= (Опционально)
err_msg_user= (Опционально)
{code}
*balance_source_id* \- идентификатор для источника баланса, предназначен для вывода баланса абонента в тв-приложение. Данный идентификатор запрашивается письмом у сервиса 24ТВ.
*err_msg_user* \- здесь можно указать текст сообщения об ошибке, которое будет отображаться у абонента при попытке подключения пакета, если в запросе на подключение не указан provider_uid.

!24hTV.png|border=0,width=400!
После этого обязательно нужно нажать кнопку "Сохранить" сразу под полем, в которое вносились изменения.

h23. Ограничение запросов к API поставщика услуг

В файле *main.ini* необходимо добавить параметр *sync_minutes* (по умолчанию значение параметра равно 60, единица измерения - 1 минута). Данный параметр задает период ожидания между синхронизациями IPTV OSS, другими словами, регулирует частоту отправки API-запросов на портал поставщика. У некоторых поставщиков услуг IPTV есть ограничение на кол-во API-запросов к их серверу. Чтобы не выходить за рамки данных ограничений, рекомендуется увеличить параметр sync_minutes таким образом, чтобы период ожидания увеличился с 60 минут до 24 часов или 7 суток. После этого необходимо перезапустить обработчик синхронизаций:
{code}

h3. Установка proxy сервера на стороне провайдера при работе клиентов через NAT

Если вы используете NAT, то для для корректной работы метода AUTH, необходимо на стороне провайдера установить proxy сервер. Подробнее можно прочитать в [официальной документации 24tv|https://24tv.atlassian.net/wiki/spaces/SPC/pages/53379019/proxy+NAT].
В состав Биллинг 5 proxy сервер не входит. Установить proxy на сервер биллинга нет технической возможности. Установите proxy на отдельный сервер.

h3. [Интеграция за 48 часов с 24часаТВ|https://24tv.atlassian.net/wiki/spaces/SPC/pages/53379013/48]

Он доступен по следующим адресам:
* Для HTTP
{code}http://169.254.14.44:1444/integration_iptv24htv.php/{code}
* Для HTTPS
{code}https://169.254.14.43:1443/integration_iptv24htv.php/
https://169.254.14.43:2443/integration_iptv24htv.php/{code}

Порты могут быть изменены по статье "[CarbonBilling:Основные настройки платежных систем]". Рекомендуется использовать "*Защищенный внешний порт платежных систем, без необходимости передачи сертификата*"
При заказе пакета каналов в приложении на ТВ или планшете будет отправлен запрос на сервер 24часаТВ. Сервер 24часаТВ отправит запрос на биллинг. Логика обработки запроса реализована на биллинге. На биллинге будет подключена услуга пакет каналов. При необходимости отключен более дешевый пакет. Далее от биллинга будет отправлен запрос на 24часаТВ с информацией о подключенных каналах.

{note}
Если абонент подключает новый базовый пакет, и он дешевле текущего базового, то новый пакет подключается только со следующего месяца. Это общая логика для базовых пакетов при подключении с приставки.
{note}

!Схема_Клиен_Сервер.png|border=0!

h4. Запрос AUTH

При запросе AUTH, учётная запись в биллинге не создаётся; если нашли абонента по номеру телефона, возвращаем его ID. В случае, если номер телефона указан у нескольких абонентов, будет возвращен ID того абонента, с ip адреса которого сделан запрос.
Потом, когда абонент подключит первый пакет ТВ, учётная запись будет создана автоматический.
Поиск абонента происходит по IP. Если в биллинге несколько абонентов с одинаковым IP-адресом, то происходит уточнённый поиск по номеру телефона.
В ответ сервису биллинг отправляет ID абонента.

{note}При запросе AUTH, учётная запись в биллинге не создаётся! Она будет создана автоматически, когда абонент подключит первый пакет ТВ,{note}

h4. Запрос PACKET

{code}/app/asr_fiscal/var/log/httpd/error_log
/app/asr_fiscal/var/log/rest_api_v2.log
/app/asr_fiscal/var/log/integrations/IntegrationIptv24htv.log
/app/asr_billing/var/log/django/api_v2.log {code}
Из биллинга к сервису по этому логу:
# По тексту ошибки попробуйте понять что случилось{info}

h4. Существует несколько услуг создания одной учётной записи, биллинг не знает какую выбрать.

Ситуация возникает в случаях, когда на запрос подключения подписки биллинг возвращает ошибку:
{code}
Billing have many services for create IPTV user
{code}

Это происходит, когда в биллинге есть несколько услуг создания учётной записи (create_login=1) привязанных к одному NAS.

Например:
{code}[root@TvoiTelecom ~]# sqlexec -l -r "select count(*) from usluga where create_login=1 and nas_id=1117"
COUNT 13 {code}

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

h4. Как проверить, что "Интеграция за 48 часов" работает?


Если такой возможности нет, можно отправить какой-либо запрос к платформе 24часаТВ с помощью CURL. Например, такой запрос должен подключить подписку в ID=6 учётной записи ID=70142, это внутренний ID в системе 24часаТВ.
{code}curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '[{ "packet_id": 6, "renew": true }]' 'https://api.24h.tv/v2/users/70142/subscriptions?token=923dab99fc7fd219f10fb578446b1b9ba8bc7702' 'https://api.24h.tv/v2/users/70142/subscriptions?token=gf809gu890fsjiogjkosf89u90u890gfsjkjkgfs' | jq .{code}
{note}В примере URL - *api.24h.tv*, а токен *gf809gu890fsjiogjkosf89u90u890gfsjkjkgfs*. Это примеры, для Ваших запросов возьмите URL и токен те, что указали в *main.ini*{note}
{note}Команда *jq* может быть не установлена на Вашем сервере. Установите её командой {code}yum install -y jq{code}{note}

h4. Ошибка "User with this phone already exists" - "Пользователь с этим телефоном уже существует"
{code:title=grep "User with this phone already exists" /app/asr_billing/var/log/nas_event_daemon/24hTV_*.log}
ValueError: Ошибка запроса к 24h.tv! message={'phone': [ErrorDetail(string='User with this phone already exists.', code='invalid')]{code}
Пользователь ранее регистрировался с этим номером телефона на сервисе 24часаТВ. Обратитесь в поддержку сервиса, попросите удалить абонента с других договоров.
{code}
{code:title=grep "Пользователь с этим телефоном уже существует" /app/asr_billing/var/log/nas_event_daemon/24hTV_*.log}
ValueError: Ошибка запроса к 24h.tv! message={'phone': [ErrorDetail(string='Пользователь с этим телефоном уже существует.', code='invalid')], 'email': [ErrorDetail(string='Пользователь с таким адресом электронной почты уже существует.', code='invalid')]};
{code}

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

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

Для решения проблемы, оставьте только одну такую услугу.

h4. Ошибка "Произошла ошибка: Ошибка запроса к 24h.tv! message=Не найдено.; detail=Не найдено."

{code:title=Пример №1}
2021-09-23 10:13:10,154 - worker - commands - INFO - Проверяем подписку на портале id=6440xxxxxx, packet_id=18, renew=True, end_at=2021-09-30T23:00:00Z,
2021-09-23 10:13:10,161 - worker - v1 - INFO - Request type: GET, request url: https://api.24h.tv/v2/packets/18?token=86c3ee7xxxxxxxxxxx, request data: null, request headers: {}
2021-09-23 10:13:10,233 - worker - iptv24tv_sync - ERROR - Произошла ошибка: Ошибка запроса к 24h.tv! message=Не найдено.; detail=Не найдено.
Traceback (most recent call last):
..........
File "/mnt/var/oss/core/24TV/lib/iptv24tv_package/commands.py", line 404, in get_portal_packet_info
return self.send_request(url=url.format(packet_id=packet_id), method='GET', expected_codes=[200])
File "/mnt/var/oss/core/24TV/lib/iptv24tv_package/commands.py", line 54, in send_request
result['error']['message'], result['detail']))
ValueError: Ошибка запроса к 24h.tv! message=Не найдено.; detail=Не найдено.
{code}
---
{code:title=Пример №2}
2021-11-01 09:36:08,235 - worker - commands - INFO - Найден в биллинге ABONENT_ID=2764, USER_ID=8413
2021-11-01 09:36:08,243 - worker - commands - INFO - Найден пользователь на портале по portal_id=200xxx id=200xxx, provider_uid=2764, username=5e763a4c-bf74-4a72-xxx-xxxxxxx, phone=792xxxxxx, email=None
2021-11-01 09:36:08,244 - worker - commands - INFO - Активируем услугу пользователя 2764: 190
2021-11-01 09:36:08,270 - worker - v1 - INFO - Request type: GET, request url: https://api.24h.tv/v2/packets/190?token=b4e76a6bcxxxxxx2, request data: null, request headers: {}
2021-11-01 09:36:08,385 - worker - iptv24tv_sync - ERROR - Произошла ошибка: Ошибка запроса к 24h.tv! message=Не найдено.; detail=Не найдено.
{code}

Причина возникновения ошибки - это отсутствие соответствующего пакета каналов на портале IPTV. Такая ситуация может возникнуть, когда сервис сделал пакет архивным или отключил его.
В таком случае, если абонент продолжает пользоваться услугой архивного пакета, то эту услуг необходимо скорректировать, убрав из настроек привязку к NAS IPTV и подключить ее заново, но дальнейший контроль за ее отключением или приостановкой ложится на администратора биллинга.
||Изначально ||После корректировки||
| !NAS_before.png|border=0,width=400! | !NAS_after.png|border=0,width=400! |

h4. Ошибка "field user_id is unsupported"

{code:title=grep 'field user_id is unsupported' -B3 /app/asr_fiscal/var/log/integrations/IntegrationIptv24htv.log}
2021-10-04 01:30:54 Request="/integration_iptv24htv.php/auth?ip=10.0.10.121&phone=79121111111&mbr_id=222222" from IP=10.90.1.185
2021-10-04 01:30:54 Input={"ip":"10.0.10.121","phone":"79121111111","mbr_id":"222222"}
2021-10-04 01:30:54 Method=auth
2021-10-04 01:30:54 Response={"status":-3,"err":-9,"errmsg":"field user_id is unsupported"}
{code}

Ошибка произошла потому, что в биллинге нет действующего абонента с IP 10.0.10.121 (IP указывается в [учётной записи|CarbonBilling:Учетная запись. Создание и изменение.]) или номером SMS-оповещений 79121111111 (номер указывается [в карточке абонента|CarbonBilling:Создание абонента. Заведение абонента. Работа с абонентами. Редактирование абонентов#fill_sms_email_fields]), а поиск абонента по "user_id" пока не реализован.

h4. Ошибка "Not found services for create IPTV user" в логах /app/asr_fiscal/var/log/integrations/IntegrationIptv24htv.log

Ошибка происходит из - за того, что в биллинг не заведена услуга *Создание учетной записи IPTV*,в которой есть опция *Создавать учетную запись* и выбран NAS *24htv*

Чтобы решить проблему, заведите в биллинге абонента с номером телефона или IP, по которым он должен авторизоваться.

{info}Запрос *auth* только связывает абонентов 24часаТВ и биллинга, создавать их он не может: абоненты уже должны быть заведены в обеих системах с тем реквизитом, по которому Вы хотите его авторизовать, IP или номер SMS.{info}

{include:CarbonBilling:Настройка услуг IPTV}