Модуль Crossroad
Crossroad — внутренний HTTP API плагина Ufanet для работы с контрагентами, договорами и услугами ABilling. Через него личные кабинеты, мастера ERP и карточки договоров получают единое представление данных из разных версий и экземпляров биллинга.
Его потребителями являются мастер обслуживания, карточка договора, виджеты баланса и услуг, управление интернет-ограничениями и внешние приложения.
Класс HTTP-действия ContractAuthAction помечен как устаревший (Deprecated), но API продолжает использоваться.
При разработке новых интеграций следует учитывать этот статус и не расширять контракт без проверки существующих потребителей.
Возможности
Crossroad выполняет следующие задачи:
-
ищет контрагентов и связанные с ними договоры;
-
проверяет договор по логину и паролю статистики;
-
собирает сведения о договоре из ERP и ABilling;
-
по запросу подгружает адрес, баланс, тарифы, услуги, параметры, способы оплаты и другие блоки;
-
возвращает услуги физических и юридических лиц в общей модели;
-
управляет паролем статистики, автоплатежом и ограничениями интернета;
-
создаёт контрагента и процесс онлайн-заявки на подключение;
-
предоставляет специальные операции для SmartHouse, Rentsoft, телеканалов и кешбэка.
Точка входа и права
Все операции доступны по одному пути:
/user/plugin/ufanet/crossroad.do?action=<имя операции>
Запрос выполняется в авторизованной пользовательской сессии ERP.
Для каждой операции зарегистрировано отдельное право в дереве «Плагин Ufanet → Пользователь → Информация о договоре».
Параметр useServiceUser=true у некоторых операций переключает чтение ABilling на служебного пользователя, но не отменяет проверку права на само действие ERP.
Большинство операций принимает параметры строки запроса.
Исключение — updateInetRestriction, которая получает JSON в теле запроса.
Формат ответа
Стандартный JSON-конверт ERP содержит результат в поле data:
{
"status": "ok",
"message": "",
"data": {
"code": 200,
"message": "OK"
},
"eventList": []
}
HTTP-запрос может завершиться успешно, даже если Crossroad вернул отказ в data.code.
Клиент должен проверять именно это поле, а не только HTTP-статус или обработчик ошибки Promise.
Некоторые старые операции не используют data.code и при неверных параметрах выбрасывают обычную ошибку ERP; различия отмечены в каталоге операций.
Коды Crossroad
| Код | Сообщение | Значение |
|---|---|---|
|
|
Операция выполнена. |
|
|
Контрагент не найден. |
|
|
Неизвестный метод. Код сохранён в модели, но напрямую текущим действием не устанавливается. |
|
|
Найдено больше одного подходящего контрагента или договора. |
|
|
Не удалось обработать запрос. |
|
|
Неверный пароль статистики. |
|
|
Договор не найден. |
|
|
Внутренняя ошибка. К сообщению может быть добавлен текст исключения. |
|
|
Не передан обязательный параметр или значение некорректно. |
|
|
Неизвестный статус ответа зависимой системы. |
|
|
Телефон не соответствует настроенному регулярному выражению. |
|
|
Операция не поддерживается для данного договора, биллинга или версии. |
|
|
Ошибка связи с зависимой системой. |
Как формируется договор
Сначала Crossroad получает базовые сведения о договоре: идентификаторы, название, тип, статус, период действия, домен и список субдоговоров.
Затем параллельно запускает только запрошенные загрузчики свойств.
Результат каждого загрузчика добавляется в итоговый договор, а время выполнения, использование кеша и ошибка записываются в meta.
Ошибка одного свойства не прерывает сборку договора и не меняет общий code: 200.
Поэтому потребителю важно проверять не только наличие поля, но и соответствующую запись meta.
Физические лица обрабатываются набором загрузчиков свойств. Для юридических лиц дополнительно применяется процессор услуги, который выбирается по биллингу и регулярному выражению номера договора.
Разделы документации
-
Операции API — все доступные действия, их параметры и результат.
-
Свойства договора — все значения параметра
propertiesи правила загрузки. -
Конфигурация — общие настройки, кеш, feature flags, услуги ЮЛ и дополнительные блоки.
Ограничения текущего контракта
-
Идентификатор договора всегда используется вместе с идентификатором биллинга, но названия параметров различаются:
contractId/billingIdиcid/bid. -
Часть Java-моделей содержит Gson-аннотации со snake_case, а ответ сериализуется Jackson. Поля без
JsonPropertyфактически приходят в camelCase. -
Неизвестное значение
propertiesигнорируется без ошибки. -
Пустой
propertiesозначает загрузку всех свойств, для которых включён признакdefault;properties=noneвозвращает только базовые поля. -
Операции записи выполняются сразу и не имеют режима предварительной проверки.