====== MBLibExternal_APIUserManager ======
API-модуль управления абонентами MikBiLL. Позволяет создавать абонентов, получать их данные и обновлять информацию через HTTP-запросы.
**Версия:** 1.0.0\\
**Дата:** 2026-04-14
----
===== Настройка =====
==== Системные опции ====
Перед использованием API необходимо настроить системные опции в админ-панели MikBiLL (префикс ''usermanager_''):
^ Опция ^ Описание ^
| ''usermanager_on'' | Включение API (''1'' — включено, ''0'' — выключено) |
| ''usermanager_key'' | API-ключ для авторизации запросов |
| ''usermanager_network'' | Список разрешённых IP-адресов/подсетей для доступа к API |
==== Формат запроса ====
Все запросы передаются через массив ''$inputData'' с обязательными полями:
^ Параметр ^ Описание ^
| ''key'' | API-ключ (должен совпадать с ''usermanager_key'') |
| ''request'' | Название вызываемого метода |
==== Валидация ====
При каждом запросе выполняются проверки в следующем порядке:
- **IP-адрес** — клиентский IP должен входить в список разрешённых (''usermanager_network'').
- **Статус API** — опция ''usermanager_on'' должна быть равна ''1''.
- **API-ключ** — параметр ''key'' должен совпадать с ''usermanager_key''.
- **Наличие метода** — параметр ''request'' должен быть указан и соответствовать одному из поддерживаемых методов.
----
===== Коды ошибок =====
^ Код ^ Описание ^
| 0 | Success |
| 1 | API not enable |
| 2 | Wrong API key |
| 3 | Bad request (не указан ''request'') |
| 4 | Unknown request (неизвестный метод) |
| 5 | Access denied from your IP |
| 6 | Missing required parameter |
| 7 | User not found |
| 8 | Login already exists |
| 9 | Password not unique |
| 10 | No free IP in sector / ошибка создания |
| 11 | Connection template not found |
| 12 | Update failed |
Формат ответа при ошибке:
{
"error": "Текст ошибки",
"error_code": 2
}
----
===== Методы API =====
==== get_supported_method_list ====
Возвращает список всех поддерживаемых методов API.
**Параметры:** нет (только ''key'' и ''request'')
**Ответ:**
{
"get_supported_method_list": { "comment": "Return Supported Method List" },
"get_api_information": { "comment": "Return API Version" },
"create_user": { "comment": "Create new subscriber by connection template" },
"get_user_data": { "comment": "Get subscriber data by uid" },
"update_user": { "comment": "Update subscriber data" }
}
----
==== get_api_information ====
Возвращает версию и дату API.
**Параметры:** нет
**Ответ:**
{
"version": "1.0.0",
"date": "2026-04-14"
}
----
==== create_user ====
Создание нового абонента по шаблону подключения. Аналог ''createabonentfromconnectiontemplateExtjs''.
При создании автоматически:
* списывается абонплата (если положена);
* подключаются базовые услуги тарифа.
=== Обязательные параметры ===
^ Параметр ^ Тип ^ Описание ^
| ''connectiontemplateid'' | int | ID шаблона подключения |
| ''user'' | string | Логин абонента |
| ''password'' | string | Пароль абонента |
| ''gid'' | int | ID тарифа |
=== Необязательные параметры ===
^ Параметр ^ Тип ^ Описание ^
| ''fio'' | string | ФИО абонента |
| ''phone'' | string | Телефон |
| ''email'' | string | Email |
| ''houseid'' | int | ID дома |
| ''app'' | string | Квартира |
| ''porch'' | int | Подъезд |
| ''floor'' | int | Этаж |
| ''sectorid'' | int | ID сектора (если не задан в шаблоне) |
| ''usersgroupid'' | int | ID группы абонентов (субпровайдер) |
| ''is_legal'' | int | Юридическое лицо (''1'' — да, ''0'' — нет) |
| ''use_installments'' | int | Рассрочка (''1'' — да, ''0'' — нет) |
| ''custom_user_price'' | float | Индивидуальная цена пакета |
| ''custom_user_rate_down'' | float | Индивидуальная скорость загрузки |
| ''custom_user_rate_up'' | float | Индивидуальная скорость отдачи |
=== Логика обработки ===
* Если логин уже занят и включена сисопция ''autogen_login_do'', логин генерируется автоматически.
* Если включена сисопция ''generate_pwd_unique'', пароль проверяется на уникальность.
=== Успешный ответ ===
{
"result": "ok",
"uid": 12345,
"login": "subscriber01"
}
=== Пример запроса ===
https://admin.mikbill.pro/json/index/usermanager?key=MY_API_KEY&request=create_user&connectiontemplateid=1&user=newuser&password=pass123&gid=5&fio=Иванов Иван&phone=0501234567
----
==== get_user_data ====
Получение полных данных абонента по ''uid''. Аналог ''getuserdatambpAjax''.
=== Параметры ===
^ Параметр ^ Тип ^ Описание ^
| ''uid'' | int | **Обязательный.** ID абонента |
=== Возвращаемые данные ===
== Основная информация ==
^ Поле ^ Тип ^ Описание ^
| ''uid'' | int | ID абонента |
| ''login'' | string | Логин |
| ''fio'' | string | ФИО |
| ''state_id'' | int | Статус: ''1'' — активен, ''2'' — заблокирован, ''3'' — заморожен, ''4'' — удалён |
| ''flag_corporate'' | int | Юридическое лицо (''1''/''0'') |
| ''deposit'' | float | Баланс |
| ''credit'' | float | Кредит |
| ''blocked'' | int | Флаг блокировки |
| ''user_installed'' | int | Установлен ли абонент |
== Контактные данные ==
^ Поле ^ Тип ^ Описание ^
| ''phone'' | string | Телефон |
| ''mob_tel'' | string | Мобильный телефон |
| ''sms_tel'' | string | Телефон для SMS |
| ''email'' | string | Email |
== Тариф ==
^ Поле ^ Тип ^ Описание ^
| ''gid'' | int | ID текущего тарифа |
| ''tariff_name'' | string | Название текущего тарифа |
| ''gidd'' | int | ID следующего тарифа (''0'' — не назначен) |
| ''tariff_next_name'' | string | Название следующего тарифа |
| ''speed_rate'' | string | Скорость тарифа |
| ''speed_burst'' | string | Burst-скорость |
| ''discount'' | mixed | Значение скидки |
== Договор ==
^ Поле ^ Тип ^ Описание ^
| ''date_connect'' | string | Дата подключения |
| ''numdogovor'' | string | Номер договора |
| ''date_contract'' | string | Дата договора |
== Адрес ==
^ Поле ^ Тип ^ Описание ^
| ''houseid'' | int | ID дома |
| ''house'' | string | Дом |
| ''lane'' | string | Улица |
| ''settlementname'' | string | Населённый пункт |
| ''app'' | string | Квартира |
| ''porch'' | int | Подъезд |
| ''floor'' | int | Этаж |
| ''address'' | string | Полный адрес (текстовое поле) |
== Сеть ==
^ Поле ^ Тип ^ Описание ^
| ''sectorid'' | int | ID сектора |
| ''sector'' | string | Название сектора |
| ''local_ip'' | string | Локальный IP |
| ''local_mac'' | string | MAC-адрес |
| ''framed_ip'' | string | Framed IP |
| ''swid'' | int | ID коммутатора |
| ''switchname'' | string | Название коммутатора |
| ''switchport'' | int | Порт коммутатора |
== Статус и группа ==
^ Поле ^ Тип ^ Описание ^
| ''online'' | int | Онлайн-статус (''1''/''0'') |
| ''usersgroupid'' | int | ID группы абонентов |
== Дополнительно ==
^ Поле ^ Тип ^ Описание ^
| ''comment'' | string | Комментарий |
| ''inn'' | string | ИНН |
| ''date_birth'' | string | Дата рождения |
| ''passportserie'' | string | Серия паспорта |
| ''passportpropiska'' | string | Прописка по паспорту |
| ''passportgdevidan'' | string | Кем выдан паспорт |
| ''custom_fields'' | object | Все кастомные поля (ключ-значение) |
=== Пример ответа ===
{
"uid": 12345,
"login": "subscriber01",
"fio": "Иванов Иван Иванович",
"state_id": 1,
"flag_corporate": 0,
"deposit": 150.50,
"credit": 0,
"gid": 5,
"tariff_name": "Турбо 100",
"gidd": 0,
"tariff_next_name": "",
"phone": "0501234567",
"mob_tel": "",
"sms_tel": "0501234567",
"email": "user@example.com",
"date_connect": "2024-01-15",
"numdogovor": "D-12345",
"date_contract": "2024-01-15",
"blocked": 0,
"user_installed": 1,
"houseid": 42,
"house": "15",
"lane": "ул. Центральная",
"settlementname": "г. Киев",
"app": "101",
"porch": 2,
"floor": 5,
"address": "",
"sectorid": 3,
"sector": "Сектор-1",
"local_ip": "10.0.0.15",
"local_mac": "AA:BB:CC:DD:EE:FF",
"framed_ip": "192.168.1.15",
"swid": 7,
"switchname": "SW-Main-01",
"switchport": 12,
"speed_rate": "100M/100M",
"speed_burst": "",
"online": 1,
"usersgroupid": 0,
"comment": "",
"inn": "",
"date_birth": "1990-05-20",
"discount": 0,
"passportserie": "",
"passportpropiska": "",
"passportgdevidan": "",
"custom_fields": {
"ext_legal_person": "0",
"ext_date_fiz_contract_conclusion": "2024-01-15"
}
}
----
==== update_user ====
Обновление данных абонента. Аналог ''updateuserExtjs''.
=== Обязательные параметры ===
^ Параметр ^ Тип ^ Описание ^
| ''uid'' | int | ID абонента |
Помимо ''uid'', необходимо передать хотя бы одно поле для обновления.
=== Поля, доступные для обновления ===
== Основные ==
^ Поле ^ Тип ^ Описание ^
| ''fio'' | string | ФИО |
| ''phone'' | string | Телефон |
| ''mob_tel'' | string | Мобильный телефон |
| ''sms_tel'' | string | Телефон для SMS |
| ''email'' | string | Email |
| ''password'' | string | Пароль |
| ''user'' | string | Логин |
| ''gid'' | int | ID тарифа |
| ''deposit'' | float | Баланс |
| ''credit'' | float | Кредит |
| ''blocked'' | int | Флаг блокировки |
== Адрес ==
^ Поле ^ Тип ^ Описание ^
| ''houseid'' | int | ID дома |
| ''app'' | string | Квартира |
| ''porch'' | int | Подъезд |
| ''floor'' | int | Этаж |
| ''address'' | string | Адрес (текст) |
== Сеть ==
^ Поле ^ Тип ^ Описание ^
| ''sectorid'' | int | ID сектора |
| ''swid'' | int | ID коммутатора |
| ''switchport'' | int | Порт коммутатора |
| ''local_ip'' | string | Локальный IP |
| ''local_mac'' | string | MAC-адрес |
| ''framed_ip'' | string | Framed IP |
== Прочее ==
^ Поле ^ Тип ^ Описание ^
| ''prim'' | string | Комментарий |
| ''numdogovor'' | string | Номер договора |
| ''date_abonka'' | string | Дата начала абонплаты |
| ''passportserie'' | string | Серия паспорта |
| ''passportpropiska'' | string | Прописка |
| ''passportgdevidan'' | string | Кем выдан паспорт |
| ''inn'' | string | ИНН |
| ''user_installed'' | int | Установлен |
| ''date_birth'' | string | Дата рождения |
== Кастомные поля ==
Любые поля с префиксом ''ext_'', например:
^ Поле ^ Описание ^
| ''ext_date_fiz_contract_conclusion'' | Дата заключения договора |
| ''ext_legal_person'' | Юридическое лицо (''1''/''0'') |
| ''ext_gender'' | Пол |
=== Ошибки обновления ===
Метод ''updateUser'' может вернуть дополнительные коды ошибок:
^ Код ^ Описание ^
| 1 | Login already exists |
| 2 | No free IP in sector |
| 3 | Invalid MAC format |
| 15 | No permission to change parameter |
| 26 | Password not unique |
| 28 | Duplicate MAC address |
=== Успешный ответ ===
{
"result": "ok",
"uid": 12345
}
=== Пример запроса ===
https://admin.mikbill.pro/json/index/usermanager?key=MY_API_KEY&request=update_user&uid=12345&fio=Петров Пётр&phone=0509876543&gid=7
----
===== Примеры использования =====
==== cURL ====
# Получить информацию об API
curl "https://admin.mikbill.pro/json/index/usermanager?key=MY_API_KEY&request=get_api_information"
# Создать абонента
curl -X POST "https://admin.mikbill.pro/json/index/usermanager" \
-d "key=MY_API_KEY" \
-d "request=create_user" \
-d "connectiontemplateid=1" \
-d "user=newuser" \
-d "password=SecurePass123" \
-d "gid=5" \
-d "fio=Иванов Иван" \
-d "phone=0501234567" \
-d "houseid=42" \
-d "app=101"
# Получить данные абонента
curl "https://admin.mikbill.pro/json/index/usermanager?key=MY_API_KEY&request=get_user_data&uid=12345"
# Обновить данные абонента
curl -X POST "https://admin.mikbill.pro/json/index/usermanager" \
-d "key=MY_API_KEY" \
-d "request=update_user" \
-d "uid=12345" \
-d "gid=7" \
-d "phone=0509876543"
==== PHP ====
$params = [
'key' => 'MY_API_KEY',
'request' => 'get_user_data',
'uid' => 12345,
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://admin.mikbill.pro/json/index/usermanager');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);