24часаТВ

Для работы интеграции необходимо, чтобы в TvAccess/lib/ext/ присутствовали библиотеки httpcore.jar и httpclient.jar (в первоначальных сборках они отсутствовали). При их отсутствии необходимо скопировать эти библиотеки из BGBillingServer/lib/ext/.

Интеграция с 24часаТВ (24h.tv) представлена в виде отрытого кода (динамические классы).

При интеграции с данной системой продукты модуля (или, в зависимости от конфигурации, сервисы модуля) являются подключаемыми пакетами MW.

Тарификация выполняется на стороне 24часаТВ - к биллингу просто идут запросы о необходимости снятия суммы со счета и информация о подключении/отключении пакетов.

Добавьте конфигурацию модуля и установите ее активной:

Конфигурация
# Активные и приостановленные статусы договора
contract.status.active.codes=0
contract.status.suspend.codes=3,4
 
# Id сущностей (Справочники - Атрибуты) для продукта, сервиса и канала,
# для привязки атрибутов к продуктам, сервисам и каналам
#productSpec.entitySpecId=
#serviceSpec.entitySpecId=
#tvChannelSpec.entitySpecId=
 
#Пункты Web - меню
web.menuItem1=TV подписки
 
# Параметры автоматической генерации логина для аккаунта. Можно указать в конфигурации модуля, конфигурации устройства, конфигурации типа сервиса
# (в последнем случае значения будут главнее):
# минимальное значение логина при генерации логина
account.login.min=10000001
# максимальное значение логина при генерации логина (т.е. если в базе присутствуют логины 1,2,3 и 10000000,
# то при генерации создастся логин 4, а не 10000001)
account.login.max=99999999
# форматирование генерируемого логина
#account.login.format=0000000
 
# Парамерты пароля для аккаунта. Можно указать в конфигурации модуля, конфигурации устройства, конфигурации типа сервиса
# (в последнем случае значения будут главнее):
# минимальная длина пароля
account.password.length.min=4
# Максимальная длина пароля
account.password.length.max=8
# Разрешенные символы (используются также при генерации пароля)
account.password.chars=1234567890
# Описание разрешенных символов, если пользователь ввел другие
account.password.chars.description=В пароле допустимы только цифры.
# Длина для автоматически генерируемого пароля
account.password.length.auto=6
# Используемые символы для автоматически генерируемого пароля (по умолчанию значение берется из параметра account.password.chars)
#account.password.chars.auto=
 
# Обработчик webhook-запросов
tv.rest.handler.tv24h.class=ru.bitel.bgbilling.modules.tv.dyn.tv24h.Tv24hWebhookHandler
# Обработчик событий (платежа)
tv.lifecycle.handler.tv24h.class=ru.bitel.bgbilling.modules.tv.dyn.tv24h.Tv24hEventWorker
 
# Тип устройства - 24hTV
om.tv24h.deviceTypeIds=
# ID шаблона договора
om.tv24h.contractPatternId=
# ID типа аккаунта
om.tv24h.tvAccountSpecId=
# ID типа расхода
om.tv24h.chargeTypeId=
#om.tv24h.paymentTypeId=
 
# ID параметра договора - ФИО
#om.tv24h.param.name.id=2
# ID параметра договора - Фамилия
om.tv24h.param.lastName.id=
# ID параметра договора - Имя
om.tv24h.param.firstName.id=
# ID параметра договора - Email
om.tv24h.param.email.id=9
# ID параметра договора - Телефон
om.tv24h.param.phone.id=7

Необходимо создать новый тип устройства, назвать его, например, Access+Accounting - данный тип устройства будет отражать приложения TvAccess и TvAccounting.

images/download/attachments/98140249/access_accounting.png

Укажите в конфигурации:

Конфигурация
 # Обработка/обсчет
# кол-во потоков в обработчике
accounting.worker.1.thread.count=1
# Обработка аккаунтов, отслеживание изменения продуктов-опций
# пауза перед следующим выполнением
accounting.worker.1.tracking.account.1.delay=60
# максимальное кол-во обработанных аккаунтов в одном выполнении
accounting.worker.1.tracking.account.1.batchSize=500
# отслеживание и деактивация продуктов, для которых в текущем тарифе абонента нет цены
# по умолчанию такое отслеживание в данном обработчике происходит только при обнаружении смены продуктов-опций
#accounting.worker.1.tracking.account.1.deactivateProductsWithoutPrice=1
# пауза перед следующим выполнением
# Обработка аккаунтов при различных событиях, отслеживание изменения продуктов-опций
accounting.worker.1.tracking.event.1.delay=10
# максимальное кол-во обработанных аккаунтов в одном выполнении
accounting.worker.1.tracking.event.1.batchSize=100
# Синхронизация
# кол-во выполняемых задач в одном блоке
om.batch.size=20
# время ожидания завершения future задач
om.batch.pause=0
# время ожидания завершения future задач
om.batch.wait=5
# время ожидания следующей задачи перед закрытием соединения
om.batch.waitNext=5
# пауза после ошибки
om.error.pause=60
# кол-во попыток с ошибкой перед тем как отложить задачу
om.error.redelivery.count=5
# кол-во попыток с ошибкой после которого отправить оповещение
om.error.alarm.count=20
# таймаут задания, выполняющегося с ошибкой
om.error.redelivery.timeout=86400

Далее создайте новый тип устройства, назовите его 24часаТВ и укажите в поле OrderManager класс ru.bitel.bgbilling.modules.tv.dyn.tv24h.Tv24hOrderManager:

images/download/attachments/98140249/24h_type.png

У нас получилось два типа устройства:

images/download/attachments/98140249/types.png

Заметьте, что у типа устройства 24часаТВ ID получился равным 2. Именно это значение и прописано в конфигурации модуля, в параметре om.deviceTypeIds.

В дереве устройств создайте устройство типа Access+Accounting и укажите конфигурацию:

Создайте дочернее к Access+Accounting устройство типа 24часаТВ, в поле Community/secret укажите ключ доступа к API, созданный в панели администратора 24часаТВ. Поле Хост/порт оставьте пустым.

images/download/attachments/98140249/24h_device.png

Получившееся дерево устройств:

images/download/attachments/98140249/tree.png

Добавьте тип аккаунта Аккаунт, укажите галочки логин и пароль, в конфигурации укажите:

Конфигурация
# ID устройства 24часаТВ
const.device.id=2
# Шаблон имени аккаунта
title.pattern=Аккаунт: (${login})

images/download/attachments/98140249/account_type.png

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

images/download/attachments/98140249/packet.png

Чтобы была возможность активировать пакет из биллинга (тем самым активируя подписку в 24часаТВ) необходимо, чтобы в продукте был задан хотя бы один режим активации.

images/download/attachments/98140249/activation_mode.png

Для удобства в дереве продуктов можно копировать и вставлять копию для последующего изменения (например, чтобы не создавать каждый раз режим активации). Получившееся дерево пакетов-продуктов:

images/download/attachments/98140249/packets.png

Настройка Webhooks

В панели администратора 24часаТВ необходимо добавить webhook'и, чтобы 24часаТВ оповещало биллинг о событиях. URL во всех webhook'ах одинаков, вида: https://<domain>/bgbilling/tv-ws/rest/<module_id>/tv24h/webhook . Webhook'и необходимо добавить на события: On create user, On user update, On user login, On create subscription, On update subscription, On create transaction, On update transaction. В логах webhook'а можно увидеть, дошел ли запрос до биллинга, и что биллинг отправил в ответ.

Биллинг на стороне оператора

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

Для включения расширенного режима интеграции в конфигурации модуля добавьте параметр om.tv24h.agentMode=0:

Конфигурация
# 0 - неагентский режим (расширенный метод интеграции)
# 1 (по умолчанию) - агентский режим
om.tv24h.agentMode=0

В 24часаТВ также необходимо указать интеграционный URL, по которому 24часаТВ будет обращаться к биллингу, когда абонент хочет подключить или отключить пакет: https://<domain>/bgbilling/tv-ws/rest/<module_id>/tv24h/packet .

Для этого режима в поле Продление продукта должно быть указано в реальном времени или настроена задача планировщика для продления подписок по планировщику.