Интеграция с LifeStream API представлена в виде отрытого кода (динамические классы).
При интеграции с системой LifeStream используется единый тариф MW, продукты модуля являются подключаемыми подписками MW.
Создайте конфигурацию модуля и сделайте ее активной:
Обратите внимание, что логины назначаются со стороны биллинга, а не MW, но при этом они сквозные для всех провайдеров, поэтому во избежание ошибок "Пользователь с таким username уже существует" необходимо указать параметр account.login.prefix. Данный префикс будет использоваться при синхронизации с MW, однако в биллинге логины будут без него.
# Активные и приостановленные статусы договора contract.status.active.codes=0 contract.status.suspend.codes=3,4 # Id сущностей (Справочники - Атрибуты) для продукта, сервиса и канала, # для привязки атрибутов к продуктам, сервисам и каналам #productSpec.entitySpecId= #serviceSpec.entitySpecId= #tvChannelSpec.entitySpecId= #Пункты Web - меню web.menuItem1=TV подписки # Параметры автоматической генерации логина для аккаунта. Можно указать в конфигурации модуля, конфигурации устройства, конфигурации типа сервиса # (в последнем случае значения будут главнее): # динамический класс для генерации логина, если указан и выбрана галочка "авто" используется этот класс, иначе встроенный генератор логина, # параметры указанные ниже связанные с логином используются только для встроенного генератора # класс генератора должен реализовывать интерфейс ru.bitel.bgbilling.modules.tv.api.server.bean.TvAccountGenerate #account.login.class= # минимальное значение логина при генерации логина account.login.min=10000001 # максимальное значение логина при генерации логина (т.е. если в базе присутствуют логины 1,2,3 и 10000000, # то при генерации создастся логин 4, а не 10000001) account.login.max=99999999 # форматирование генерируемого логина #account.login.format=0000000 # Префикс логина для LifeStream account.login.prefix= # название оператора account.operator.name= # Параметры пароля для аккаунта. Можно указать в конфигурации модуля, конфигурации устройства, конфигурации типа сервиса # (в последнем случае значения будут главнее): # динамический класс для генерации пароля, если указан и выбрана галочка "авто" используется этот класс, иначе встроенный генератор пароля, # параметры указанные ниже связанные с паролем используются только для встроенного генератора # класс генератора должен реализовывать интерфейс ru.bitel.bgbilling.modules.tv.api.server.bean.TvAccountGenerate #account.password.class= # минимальная длина пароля account.password.length.min=4 # Максимальная длина пароля account.password.length.max=8 # Разрешенные символы (используются также при генерации пароля) account.password.chars=1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz # Описание разрешенных символов, если пользователь ввел другие account.password.chars.description=В пароле допустимы только цифры и латинские буквы. # Длина для автоматически генерируемого пароля account.password.length.auto=6 # Используемые символы для автоматически генерируемого пароля (по умолчанию значение берется из параметра account.password.chars) #account.password.chars.auto=
Необходимо создать новый тип устройства, назвать его, например, Access+Accounting - данный тип устройства будет отражать приложения TvAccess и TvAccounting.
Далее создайте новый тип устройства, назовите его, например, LifeStreamTV и добавьте конфигурацию:
# Коды параметров договора для заполнения полей в Middleware # ID Параметр договора в котором хранится ФИО (если ФИО хранится в одном поле) customer.fio.pid=0 # или если ФИО хранится в отдельных полях # ID параметра договора с Фамилией #customer.lastName.pid=0 # ID параметра договора с Именем #customer.firstName.pid=0 # ID параметра договора с Отчеством #customer.middleName.pid=0 # откуда брать email, можно указать через запятую (1 - из параметра договора, 2 - из поля логин, 3 - из поля идентификатор) customer.email.sources=1 # код параметра email (если он указан отдельно) customer.email.pid= # домен, который будет добавляться к логину для составления фиктивного email, в случае если email не указан #customer.email.domain= # Режим синхронизации продуктов (0 - по событию, 1 - по событию, полная) om.product.syncMode=1 # уровень интеграции, 0 - интеграция на уровне продуктов модуля, 1 - интеграция на уровне сервисов модуля #om.product.serviceMode=0
В случае, если Вы хотите указывать фиктивный email в MW (например, у вас нет данных о email абонентов), то укажите такие параметры:
# Коды параметров договора для заполнения полей в Middleware # откуда брать email, можно указать через запятую (1 - из параметра договора, 2 - из поля логин, 3 - из поля идентификатор) customer.email.sources=1 # код параметра email (если он указан отдельно) customer.email.pid=0 # домен, который будет добавляться к логину для составления фиктивного email, в случае если email не указан #customer.email.domain=
При указании логина идентичным email абонента (т.е. при использовании customer.email.sources=2) можно добавить проверку на то, чтобы в поле логин вводили корректный email. Для этого в скрипт поведения, привязанный к договору, нужно на событие "Изменяется аккаунт договора" добавить дин. класс ru.bitel.bgbilling.modules.tv.dyn.lfstrm.LifeStreamEventListener, а также в конфигурации модуля прописать account.login.email.check=1.
Выберите в поле OrderManager динамический класс ru.bitel.bgbilling.modules.tv.dyn.lfstrm.LifeStreamV2OrderManager (чтобы его можно было выбрать, данный дин. класс должен быть скомпилирован через вкладку Управление динамическим кодом).
Если не передавать в Смотрёшку email при обновлении аккаунта, то она возвратит код ошибки 400 с сообщением {"error": "'' is not a 'email'"}.
Создайте устройство типа Access+Accounting и укажите конфигурацию:
# Обработка/обсчет # кол-во потоков в обработчике 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.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
Данное устройство будет отражать приложения TVAccess и TVAccounting.
Создайте дочернее к предыдущему устройству устройство типа LifeStreamTV, укажите хост подключения (например, provider.test.lfstrm.tv), логин и пароль. Также URL подключения можно указать в конфигурации устройства, тогда поле Хост/порт не будет использоваться:
om.url=http://provider.test.lfstrm.tv
Добавьте тип аккаунта Аккаунт, укажите в его конфигурации ID только что добавленного устройства LifeStreamTV:
# автоматически привязываем к устройству LifeStreamTV const.device.id= # шаблон названия title.pattern=Аккаунт (${login})
Установите галочки на полях логин и пароль.
Теперь необходимо создать Продукты - они будут отражать пакеты системы LifeStreamTV. Поле Название - это название, с которым данный продукт будет отображаться в биллинге. Поле Идентификатор - идентификатор пакета системы LifeStreamTV (поле "id").
Обратная интеграция
в конфиге модуля прописать
tv.rest.handler.lfstrm.class=ru.bitel.bgbilling.modules.tv.dyn.lfstrm.LifeStreamHandler
Адрес обращения со стороны сервера LifeStreamTV : http[s]://host:port/bgbilling/tv/rest/<mid>/lfstrm/upsale/v2