Доступно с версии 0.84
Рекомендуемая минимальная версия для использования 1.00
Table of Contents | ||
---|---|---|
|
Children Display | ||
---|---|---|
|
Warning |
---|
|
Warning | ||
---|---|---|
| ||
Доступно с версии 0.84 и выше |
Warning | ||
---|---|---|
| ||
Чтобы включить API нужно прописать |
Общая информация
Подключение
Code Block |
---|
$conf{API_ENABLE} в файле config.pl = 1; |
Конфигурация
В системе реализован RESTfull RESTful интерфейс управления услугами и абонентами. Интерфейс находит по адресу /api.cgi
. Оправка
Отправка, получение данных производится по протоколу HTTP POST/GET/PUT/DELETE
. Все взаимодействие по интерфейсу выполняется по принципам REST (ресурс определяться по средствам задания имени в URL).
Для сохранение совместимости с стандартом REST все ключи автоматически переводятся в camelCaseв camelCase, но поскольку несоответствие названий в Базе Данных базе данных может усложнить разработку – существует – существует возможность отключить такое превращение используя несколько вариантов:
- Параметр
$conf{API_FILDS_CAMELIZE}
в конфигурационном файле - Задать в заголовках запроса CAMELIZE в соответствующие значение (имеет приоритет над значением в конфигурационном файле)параметрах snakeCase=1 в GET или в POST "snakeCase": "1"
Значение | Результат |
---|---|
1 | Все ключи превращаются в camelCase |
0 | Ключи в исходном виде, как в базе данных (snake_case ) |
Авторизация
Для подтверждения личности при выполнении запросов, некоторые пути требуют соответствующий привилегии:
- Авторизация администратора выполняется через API_KEY (можно задать в веб-интерфейсе). Ключ нужно передать в заголовке запроса KEY в значении API_KEY.
- Пользователям нужно использовать идентификатор сессии (sid), передавая его значение в заголовке USERSID. Для получения sid можно
воспользоваться авторизацией через API используя маршрут авторизация абонента (/users/login).
swagger: '2.0'
info:
version: 1.0.0
title: Abills admins API
host: demo.abills.net.ua:9443
basePath: /api.cgi
tags:
- name: users
description: Работа с пользователями
- name: groups
description: Группы пользователей
- name: tp
description: Тарифные планы
- name: msgs
description: Msgs
- name: internet
description: Internet
- name: iptv
description: Iptv
- name: abon
description: Abon
- name: districts
description: Районы
- name: streets
description: Улицы
- name: builds
description: Дома
- name: payments
description: Оплаты
- name: fees
description: Списания
- name: online
description: Сессии пользователя
- name: version
description: Версии
schemes:
- https
paths:
/users/login:
post:
tags:
- users
summary: Авторизация пользователя
operationId: loginUser
produces:
- application/json
parameters:
- in: body
name: body
required: true
schema:
$ref: '#/definitions/UserLogin'
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/inline_response_200'
/users/:
post:
tags:
- users
summary: Добавить нового пользователя
operationId: addUser
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: body
description: Параметры, которые нужно указать
required: true
schema:
$ref: '#/definitions/User'
responses:
'200':
description: успешное выполнение
schema:
$ref: '#/definitions/UserCreated'
security:
- KEY: []
/users/all:
get:
tags:
- users
summary: Получить всех пользователей
consumes:
- application/json
produces:
- application/json
parameters:
- in: query
name: fio
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: fio2
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: fio3
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: deposit
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: extDeposit
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: extBillId
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: credit
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: creditDate
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: loginStatus
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: phone
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: email
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: floor
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: entrance
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: addressFlat
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: pasportDate
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: pasportNum
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: pasportGrant
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: city
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: zip
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: gid
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: companyId
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: companyName
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: contractId
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: contractSufix
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: contractDate
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: expire
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: reduction
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: lastPayment
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: lastFees
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: registration
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: reductionDate
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: comments
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: billId
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: activate
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: acceptRules
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: password
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: birthDate
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: taxNumber
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: pageRows
description: Количество записей
type: integer
default: 100000
- in: query
name: sort
description: Сортировка по одному параметру выше
type: string
responses:
'200':
description: успешное выполнение
schema:
$ref: '#/definitions/UserList'
security:
- KEY: []
/users/{UID}:
get:
tags:
- users
summary: Получить пользователя по UID
description: Возвращает пользователя
operationId: getUserByUID
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователя в биллинге
required: true
type: integer
format: int64
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/User'
'404':
description: Пользователь не найден
schema:
$ref: '#/definitions/ApiResponse'
security:
- KEY: []
put:
tags:
- users
summary: Обновить информацию о пользователе
operationId: updateUser
consumes:
- application/json
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователь
required: true
type: integer
format: int64
- in: body
name: body
required: true
schema:
$ref: '#/definitions/User'
responses:
'400':
description: Invalid ID supplied
security:
- KEY: []
delete:
tags:
- users
summary: Удалить пользователя
operationId: deleteUser
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователя
required: true
type: integer
format: int64
responses:
'404':
description: Пользователь не найден
schema:
$ref: '#/definitions/ApiResponse'
security:
- KEY: []
/users/{UID}/pi:
get:
tags:
- users
summary: Получить персональную информацию о пользователе
description: Возвращает персональную информацию пользователя
operationId: getUserPiByUID
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователя в биллинге
required: true
type: integer
format: int64
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/UserPi'
'404':
description: Пользователь не найден
schema:
$ref: '#/definitions/ApiResponse'
security:
- KEY: []
post:
tags:
- users
summary: Добавление персональной информации пользователю
operationId: addUserPi
consumes:
- application/json
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователь
required: true
type: integer
format: int64
- in: body
name: body
required: true
schema:
$ref: '#/definitions/UserPi'
responses:
'404':
description: Пользователь не найден
schema:
$ref: '#/definitions/ApiResponse'
security:
- KEY: []
put:
tags:
- users
summary: Изменение персональной информации пользователю
operationId: changeUserPi
consumes:
- application/json
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователь
required: true
type: integer
format: int64
- in: body
name: body
required: true
schema:
$ref: '#/definitions/UserPi'
responses:
'404':
description: Пользователь не найден
schema:
$ref: '#/definitions/ApiResponse'
security:
- KEY: []
/users/{UID}/contacts:
get:
tags:
- users
summary: Получить контакты пользователя по UID
description: Возвращает контакты пользователя
operationId: getUserContactsByUID
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователя в биллинге
required: true
type: integer
format: int64
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/ContactsArray'
'404':
description: Пользователь не найден
schema:
$ref: '#/definitions/ApiResponse'
security:
- KEY: []
post:
tags:
- users
summary: Добавление контакта пользователю
operationId: updateUserContact
consumes:
- application/json
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователь
required: true
type: integer
format: int64
- in: body
name: body
required: true
schema:
$ref: '#/definitions/User'
responses:
'404':
description: Пользователь не найден
schema:
$ref: '#/definitions/ApiResponse'
security:
- KEY: []
/users/{UID}/contacts/{ID}:
put:
tags:
- users
summary: Обновить контакт пользователю
operationId: updateUserConctact
consumes:
- application/json
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователь
required: true
type: integer
format: int64
- name: ID
in: path
description: ID контакта
required: true
type: integer
format: int64
responses:
'404':
description: Пользователь не найден
schema:
$ref: '#/definitions/ApiResponse'
security:
- KEY: []
delete:
tags:
- users
summary: Удалить контакт пользователя
operationId: deleteUserContact
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователя
required: true
type: integer
format: int64
- name: ID
in: path
description: ID контакта
required: true
type: integer
format: int64
responses:
'404':
description: Пользователь не найден
schema:
$ref: '#/definitions/ApiResponse'
security:
- KEY: []
/users/contacts:
post:
tags:
- users
summary: Получить контакты
description: Возвращает контакты пользователей
operationId: getContacts
produces:
- application/json
parameters:
- in: body
name: body
description: Параметры для фильтрации контактов
required: true
schema:
$ref: '#/definitions/Contacts'
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/ContactsArray'
security:
- KEY: []
/users/internet/all:
get:
tags:
- internet
summary: Получить всех пользователей
consumes:
- application/json
produces:
- application/json
parameters:
- in: query
name: cid
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: cpe_mac
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: vlan
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: server_vlan
description: Параметр который возвращает биллинг
type: boolean
default: 0
name: joinService
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: simultaneonsly
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: speed
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: nasId
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: port
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: allFilterId
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: filterId
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: tpId
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: tpNum
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: tpName
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: monthFee
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: abonDistribution
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: dayFee
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: personalTp
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: paymentType
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: disable
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: ipnActivate
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: dayTrafLimit
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: weekTrafLimit
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: totalTrafLimit
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: feesMethod
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: nasIp
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: fio
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: fio2
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: fio3
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: deposit
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: extDeposit
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: extBillId
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: credit
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: creditDate
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: loginStatus
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: phone
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: email
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: floor
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: entrance
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: addressFlat
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: pasportDate
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: pasportNum
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: pasportGrant
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: city
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: zip
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: gid
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: companyId
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: companyName
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: contractId
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: contractSufix
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: contractDate
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: expire
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: reduction
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: lastPayment
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: lastFees
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: registration
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: reductionDate
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: comments
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: billId
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: activate
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: acceptRules
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: password
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: birthDate
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: taxNumber
description: Параметр который возвращает биллинг
type: boolean
default: 0
- in: query
name: pageRows
description: Количество записей
type: integer
default: 100000
- in: query
name: sort
description: Сортировка по одному параметру выше
type: string
responses:
'200':
description: успешное выполнение
schema:
$ref: '#/definitions/UserInternetList'
security:
- KEY: [ ]
/users/{UID}/internet:
get:
tags:
- internet
summary: Получить список ТП Internet пользователя
description: Возвращает ТП интернет пользователя
operationId: getUserInternetByUID
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователя в биллинге
required: true
type: integer
format: int64
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/UserInternetList'
'404':
description: Пользователь не найден
schema:
$ref: '#/definitions/ApiResponse'
security:
- KEY: []
post:
tags:
- internet
summary: Добавление ТП Internet пользователю
operationId: addUserInternet
consumes:
- application/json
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователь
required: true
type: integer
format: int64
- in: body
name: body
required: true
schema:
$ref: '#/definitions/UserInternet'
responses:
'404':
description: Пользователь не найден
schema:
$ref: '#/definitions/ApiResponse'
security:
- KEY: []
/users/{UID}/internet/{ID}:
get:
tags:
- internet
summary: Информация об интернет услуге пользователя по ID услуги
operationId: internetInfoUser
consumes:
- application/json
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователь
required: true
type: integer
format: int64
- name: ID
in: path
description: ID услуги
required: true
type: integer
format: int64
responses:
'404':
description: Пользователь не найден
schema:
$ref: '#/definitions/ApiResponse'
security:
- KEY: []
/users/{UID}/iptv:
get:
tags:
- iptv
summary: Получить список ТП Iptv пользователя
description: Возвращает ТП Iptv пользователя
operationId: getUserIptvByUID
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователя в биллинге
required: true
type: integer
format: int64
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/UserIptvList'
'404':
description: Пользователь не найден
schema:
$ref: '#/definitions/ApiResponse'
security:
- KEY: []
/users/{UID}/iptv/{ID}:
get:
tags:
- iptv
summary: Информация об Iptv услуге пользователя по ID услуги
operationId: iptvInfoUser
consumes:
- application/json
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователь
required: true
type: integer
format: int64
- name: ID
in: path
description: ID услуги
required: true
type: integer
format: int64
responses:
'404':
description: Пользователь не найден
schema:
$ref: '#/definitions/ApiResponse'
security:
- KEY: []
/msgs/:
post:
tags:
- msgs
summary: Добавить сообщение
operationId: addMsgs
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: body
description: Параметры, которые нужно указать
required: true
schema:
$ref: '#/definitions/Msgs'
responses:
'200':
description: успешное выполнение
schema:
$ref: '#/definitions/ApiSuccessAddResponse'
security:
- KEY: []
/msgs/{ID}:
get:
tags:
- msgs
summary: Получить сообщение по ID
description: Возвращает сообщение
operationId: getMsgsInfoByID
produces:
- application/json
parameters:
- name: ID
in: path
description: ID сообщения
required: true
type: integer
format: int64
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/Msgs'
'404':
description: Сообщение не найден
schema:
$ref: '#/definitions/ApiResponse'
security:
- KEY: []
/msgs/list:
post:
tags:
- msgs
summary: Получить список сообщений
operationId: msgsList
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: body
description: Параметры, по которым можно фильтровать сообщения
required: true
schema:
$ref: '#/definitions/Msgs'
responses:
'200':
description: успешное выполнение
schema:
$ref: '#/definitions/ApiSuccessAddResponse'
security:
- KEY: []
/msgs/{ID}/reply:
get:
tags:
- msgs
summary: Ответы на сообщение
operationId: repliesListToMsgs
consumes:
- application/json
produces:
- application/json
parameters:
- name: ID
in: path
description: ID сообщения
required: true
type: integer
format: int64
responses:
'200':
description: успешное выполнение
schema:
$ref: '#/definitions/MsgsRepliesList'
security:
- KEY: []
post:
tags:
- msgs
summary: Ответить на сообщение
operationId: addReplyToMsgs
consumes:
- application/json
produces:
- application/json
parameters:
- name: ID
in: path
description: ID сообщения
required: true
type: integer
format: int64
- in: body
name: body
description: Параметры, которые нужно указать
required: true
schema:
$ref: '#/definitions/MsgsReply'
responses:
'200':
description: успешное выполнение
schema:
$ref: '#/definitions/ApiSuccessAddResponse'
security:
- KEY: []
/msgs/reply/{REPLY_ID}/attachment:
post:
tags:
- msgs
summary: Прикрепление файла к ответу
operationId: addAttachmentToReply
consumes:
- application/json
produces:
- application/json
parameters:
- name: REPLY_ID
in: path
description: ID ответа на сообщение
required: true
type: integer
format: int64
- in: body
name: body
description: Параметры, которые нужно указать
required: true
schema:
$ref: '#/definitions/MsgsReplyAttachment'
responses:
'200':
description: успешное выполнение
schema:
$ref: '#/definitions/ApiSuccessAddResponse'
security:
- KEY: []
/msgs/chapters:
get:
tags:
- msgs
summary: Получить список разделов
operationId: chaptersList
consumes:
- application/json
produces:
- application/json
parameters: []
responses:
'200':
description: успешное выполнение
schema:
$ref: '#/definitions/MsgsChapter'
security:
- KEY: []
/groups:
get:
tags:
- groups
summary: Получить группы пользователей
description: Возвращает группы пользователей
operationId: getGroupsList
produces:
- application/json
parameters: []
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/Groups'
security:
- KEY: []
/tp/{tpID}:
get:
tags:
- tp
summary: Получить информацию по тарифному плану
description: Возвращает тарифный план
operationId: getTpInfo
produces:
- application/json
parameters:
- name: tpID
in: path
description: tpID тарифного плана
required: true
type: integer
format: int64
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/Tp'
'404':
description: Тарифный план не найден
schema:
$ref: '#/definitions/ApiResponse'
security:
- KEY: []
/tp/{tpID}/intervals/:
get:
tags:
- tp
summary: Получить информацию по интервалам ТП
description: Возвращает интервалы ТП
operationId: getTpIntervalsInfo
produces:
- application/json
parameters:
- name: tpID
in: path
description: tpID тарифного плана
required: true
type: integer
format: int64
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/TpIntervals'
'404':
description: Тарифный план не найден
schema:
$ref: '#/definitions/ApiResponse'
security:
- KEY: []
/districts:
get:
tags:
- districts
summary: Получить районы
description: Возвращает список районов
operationId: getDistricts
produces:
- application/json
parameters: []
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/DistrictsArray'
security:
- KEY: []
post:
tags:
- districts
summary: Добавление района
operationId: addDistrict
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: body
required: true
schema:
$ref: '#/definitions/Districts'
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/ApiSuccessAddResponse'
security:
- KEY: []
/districts/{ID}:
get:
tags:
- districts
summary: Получить информацию о районе
operationId: getDistrictInfo
produces:
- application/json
parameters:
- name: ID
in: path
description: ID района
required: true
type: integer
format: int64
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/Districts'
security:
- KEY: []
put:
tags:
- districts
summary: Обновить информацию о районе
operationId: updateDistrict
consumes:
- application/json
produces:
- application/json
parameters:
- name: ID
in: path
description: ID района
required: true
type: integer
format: int64
- in: body
name: body
required: true
schema:
$ref: '#/definitions/Districts'
responses:
'400':
description: Invalid ID supplied
security:
- KEY: []
/streets:
get:
tags:
- streets
summary: Получить улицы
description: Возвращает список улиц
operationId: getStreets
produces:
- application/json
parameters: []
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/StreetsArray'
security:
- KEY: []
post:
tags:
- streets
summary: Добавление района
operationId: addStreet
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: body
required: true
schema:
$ref: '#/definitions/Streets'
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/ApiSuccessAddResponse'
security:
- KEY: []
/streets/{ID}:
get:
tags:
- streets
summary: Получить информацию о улице
description: Возвращает улицу
operationId: getStreetInfo
produces:
- application/json
parameters:
- name: ID
in: path
description: ID улицы
required: true
type: integer
format: int64
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/Streets'
security:
- KEY: []
put:
tags:
- streets
summary: Обновить информацию о улице
operationId: updateStreet
consumes:
- application/json
produces:
- application/json
parameters:
- name: ID
in: path
description: ID улицы
required: true
type: integer
format: int64
- in: body
name: body
required: true
schema:
$ref: '#/definitions/Streets'
responses:
'400':
description: Invalid ID supplied
security:
- KEY: []
/builds:
get:
tags:
- builds
summary: Получить дома
description: Возвращает список домов
operationId: getBuilds
produces:
- application/json
parameters: []
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/BuildsArray'
security:
- KEY: []
post:
tags:
- builds
summary: Добавление дома
operationId: addBuild
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: body
required: true
schema:
$ref: '#/definitions/Builds'
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/ApiSuccessAddResponse'
security:
- KEY: []
/builds/{ID}:
get:
tags:
- builds
summary: Получить информацию о доме
description: Возвращает дом
operationId: getBuildInfo
produces:
- application/json
parameters:
- name: ID
in: path
description: ID дома
required: true
type: integer
format: int64
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/Builds'
security:
- KEY: []
put:
tags:
- builds
summary: Обновить информацию о доме
operationId: updateBuild
consumes:
- application/json
produces:
- application/json
parameters:
- name: ID
in: path
description: ID дома
required: true
type: integer
format: int64
- in: body
name: body
required: true
schema:
$ref: '#/definitions/Builds'
responses:
'400':
description: Invalid ID supplied
security:
- KEY: []
/payments/types:
get:
tags:
- payments
summary: Получить список типов оплат
description: Возвращает список типов оплат
operationId: getPaymentTypesList
produces:
- application/json
parameters: []
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/PaymentTypesArray'
security:
- KEY: []
/payments/users/{UID}:
get:
tags:
- payments
summary: Получить список оплат пользователя
description: Возвращает список оплат пользователя
operationId: getUserPayments
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователя
required: true
type: integer
format: int64
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/UserPaymentsArray'
security:
- KEY: []
post:
tags:
- payments
summary: Добавление оплаты пользователю
operationId: addUserPayment
consumes:
- application/json
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователя
required: true
type: integer
format: int64
- in: body
name: body
required: true
schema:
$ref: '#/definitions/UserPaymentAdd'
responses:
'400':
description: Invalid ID supplied
security:
- KEY: []
/fees/types:
get:
tags:
- fees
summary: Получить список типов списания
description: Возвращает список типов списания
operationId: getFeesTypesList
produces:
- application/json
parameters: []
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/FeesTypesArray'
security:
- KEY: []
/fees/users/{UID}:
get:
tags:
- fees
summary: Получить список списаний пользователя
description: Возвращает список списаний пользователя
operationId: getUserFees
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователя
required: true
type: integer
format: int64
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/UserFeesArray'
security:
- KEY: []
/fees/users/{UID}/{SUM}:
post:
tags:
- fees
summary: Добавление списания пользователю
operationId: addUserFee
consumes:
- application/json
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователя
required: true
type: integer
format: int64
- name: SUM
in: path
description: Сумма списания
required: true
type: integer
format: int64
- in: body
name: body
required: true
schema:
$ref: '#/definitions/UserFeeAdd'
responses:
'400':
description: Invalid ID supplied
security:
- KEY: []
/abon/tariffs:
get:
tags:
- abon
summary: Получить список ТП
description: Возвращает список ТП
operationId: getAbonTps
produces:
- application/json
parameters: []
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/AbonTpsArray'
security:
- KEY: []
post:
tags:
- abon
summary: Добавление ТП
operationId: addAbonTp
consumes:
- application/json
produces:
- application/json
parameters:
- in: body
name: body
required: true
schema:
$ref: '#/definitions/AbonAddTp'
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/ApiSuccessAddResponse'
security:
- KEY: []
/abon/tariffs/{ID}:
get:
tags:
- abon
summary: Получить информацию о ТП
description: Возвращает информацию о ТП
operationId: getAbonTp
produces:
- application/json
parameters:
- name: ID
in: path
description: ID ТП
required: true
type: integer
format: int64
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/AbonTp'
security:
- KEY: []
/abon/tariffs/{ID}/users/{UID}:
post:
tags:
- abon
summary: Добавление ТП пользователю
operationId: addAbonTpToUser
consumes:
- application/json
produces:
- application/json
parameters:
- name: ID
in: path
description: ID ТП
required: true
type: integer
format: int64
- name: UID
in: path
description: UID пользователя
required: true
type: integer
format: int64
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/ApiSuccessAddResponse'
security:
- KEY: []
delete:
tags:
- abon
summary: Удаление ТП пользователя
description: Удаление ТП пользователя
operationId: getUserAbonTps
produces:
- application/json
parameters:
- name: ID
in: path
description: ID ТП
required: true
type: integer
format: int64
- name: UID
in: path
description: UID пользователя
required: true
type: integer
format: int64
responses:
'200':
description: Успешное выполнение
security:
- KEY: []
/abon/users:
get:
tags:
- abon
summary: Получить список пользователей Abon
description: Возвращает список пользователей Abon
operationId: getUsersAbon
produces:
- application/json
parameters: []
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/AbonUsersArray'
security:
- KEY: []
/online/{UID}:
get:
tags:
- online
summary: Получить сессии пользователя по UID
description: Возвращает сессии пользователя
operationId: getUserSessions
produces:
- application/json
parameters:
- name: UID
in: path
description: UID пользователя в биллинге
required: true
type: integer
format: int64
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/OnlineSessionsArray'
'404':
description: Пользователь не найден
schema:
$ref: '#/definitions/ApiResponse'
security:
- KEY: []
/version:
get:
tags:
- version
summary: Получить версии биллинга и API
operationId: getVersion
produces:
- application/json
parameters: []
responses:
'200':
description: Успешное выполнение
schema:
$ref: '#/definitions/Version'
security:
- KEY: []
securityDefinitions:
KEY:
type: apiKey
name: KEY
in: header
definitions:
User:
type: object
properties:
login:
type: string
example: testUser
password:
type: string
example: '123456'
createBill:
type: integer
UserPi:
type: object
properties:
fio:
type: string
example: Петренко
description: Фамилия
fio2:
type: string
example: Иван
description: Имя
fio3:
type: string
example: Петрович
description: Отчество
comments:
type: string
email:
type: string
phone:
type: string
UserCreated:
type: object
properties:
preAdd:
type: integer
example: 1
total:
type: integer
example: 0
insertId:
type: string
example: '17'
uid:
type: string
example: '32'
affected:
type: integer
example: 1
login:
type: string
example: testUser
UserInternetList:
type: array
items:
$ref: '#/definitions/UserInternetList_inner'
UserInternet:
type: object
properties:
tpId:
type: integer
example: 41
cid:
type: string
example: 14:11:11:11:11:c1
activate:
type: string
example: '0000-00-00'
expire:
type: string
example: '0000-00-00'
UserIptvList:
type: array
items:
$ref: '#/definitions/UserIptvList_inner'
Contacts:
type: object
properties:
value:
type: string
example: test@gmail.com
type:
type: string
example: _SHOW
description: _SHOW - отобразить поле
typeName:
type: string
example: _SHOW
ContactsArray:
type: array
items:
$ref: '#/definitions/ContactsArray_inner'
Tp:
type: object
properties:
id:
type: integer
example: 2
tpId:
type: integer
example: 83
dayFee:
type: integer
monthFee:
type: integer
module:
type: string
example: Internet
changePrice:
type: integer
activPrice:
type: integer
serviceId:
type: integer
status:
type: integer
TpIntervals:
type: array
items:
$ref: '#/definitions/TpIntervals_inner'
Groups:
type: array
items:
$ref: '#/definitions/Groups_inner'
Msgs:
type: object
properties:
uid:
type: integer
example: 11135
chapter:
type: integer
example: 2
message:
type: string
example: Test message
state:
type: integer
example: 0
subject:
type: string
example: Message subject
priority:
type: integer
example: 2
MsgsReply:
type: object
properties:
aid:
type: integer
example: 2
reply_text:
type: string
example: Reply text
MsgsRepliesList:
type: array
items:
$ref: '#/definitions/MsgsRepliesList_inner'
MsgsReplyAttachment:
type: object
properties:
filename:
type: string
example: Test.txt
filesize:
type: integer
example: 12
content:
type: string
example: ' Test content'
content_type:
type: string
example: text/plain
message_type:
type: integer
example: 1
MsgsChapter:
type: array
items:
$ref: '#/definitions/MsgsChapter_inner'
Districts:
type: object
properties:
name:
type: string
example: пос.Зуевка
city:
type: string
example: Харцызск
zip:
type: string
DistrictsArray:
type: array
items:
$ref: '#/definitions/DistrictsArray_inner'
Streets:
type: object
properties:
name:
type: string
example: ул.Цэемовская
district_id:
type: integer
example: 2
second_name:
type: string
StreetsArray:
type: array
items:
$ref: '#/definitions/StreetsArray_inner'
Builds:
type: object
properties:
street_id:
type: integer
example: 2
number:
type: string
BuildsArray:
type: array
items:
$ref: '#/definitions/BuildsArray_inner'
PaymentTypesArray:
type: array
items:
$ref: '#/definitions/PaymentTypesArray_inner'
UserPaymentsArray:
type: array
items:
$ref: '#/definitions/UserPaymentsArray_inner'
UserPaymentAdd:
type: object
properties:
sum:
type: integer
example: 500
method:
type: integer
example: 6
bill_id:
type: integer
example: 10
FeesTypesArray:
type: array
items:
$ref: '#/definitions/FeesTypesArray_inner'
UserFeesArray:
type: array
items:
$ref: '#/definitions/UserFeesArray_inner'
UserFeeAdd:
type: object
properties:
method:
type: integer
example: 6
bill_id:
type: integer
example: 10
describe:
type: string
AbonTpsArray:
type: array
items:
$ref: '#/definitions/AbonTpsArray_inner'
AbonAddTp:
type: object
properties:
price:
type: integer
example: 100
period:
type: integer
example: 1
name:
type: string
example: Test abon TP
description:
type: string
example: Test description
AbonTp:
type: object
properties:
id:
type: integer
example: 1
name:
type: string
example: Test abon TP
price:
type: integer
example: 100
userPortal:
type: integer
example: 0
userCount:
type: integer
example: 10
discount:
type: integer
example: 0
paymentType:
type: integer
example: 0
periodAlignment:
type: integer
example: 1
nextAbonDate:
type: string
example: '2021-10-01'
description:
type: string
AbonUsersArray:
type: array
items:
$ref: '#/definitions/AbonUsersArray_inner'
OnlineSessionsArray:
type: array
items:
$ref: '#/definitions/OnlineSessionsArray_inner'
Version:
type: object
properties:
version:
type: string
example: 0.91.0
apiVersion:
type: string
example: '0.01'
billing:
type: string
example: Abills
ApiResponse:
type: object
properties:
errstr:
type: string
example: ERROR_NOT_EXIST
errno:
type: integer
example: 2
ApiSuccessAddResponse:
type: object
properties:
total:
type: integer
example: 0
affected:
type: integer
example: 1
insertId:
type: integer
example: 37
UserLogin:
type: object
properties:
login:
type: string
example: testuser
password:
type: string
example: testuser
inline_response_200:
type: object
properties:
login:
type: string
example: testuser
sid:
type: string
example: sW44EJZLyWDMeXAV
uid:
type: string
example: '5690'
UserInternetList_inner:
type: object
properties:
id:
type: integer
example: 2
tpName:
type: string
example: Премиум до 100м
tpId:
type: integer
example: 41
internetStatus:
type: integer
example: 0
cid:
type: string
example: 14:11:11:11:11:c1
monthFee:
type: integer
example: 250
dayFee:
type: integer
example: 0
UserIptvList_inner:
type: object
properties:
id:
type: integer
example: 2
tpName:
type: string
example: Премиум Iptvportal
tpId:
type: integer
example: 41
serviceStatus:
type: integer
example: 0
monthFee:
type: integer
example: 250
dayFee:
type: integer
example: 0
serviceId:
type: integer
example: 0
subscribeId:
type: integer
example: 0
filterId:
type: integer
example: 0
ContactsArray_inner:
type: object
properties:
id:
type: integer
example: 1
uid:
type: string
example: '132'
value:
type: string
example: test@gmail.com
typeName:
type: string
example: Email
TpIntervals_inner:
type: object
properties:
begin:
type: string
example: '00:00:00'
end:
type: string
example: '23:59:59'
id:
type: integer
example: 2
tarif:
type: string
trafficClasses:
type: string
day:
type: integer
Groups_inner:
type: object
properties:
id:
type: integer
example: 53
name:
type: string
example: Должники
descr:
type: string
domainId:
type: integer
disableChgTp:
type: integer
example: 1
MsgsRepliesList_inner:
type: object
properties:
id:
type: integer
example: 2
text:
type: string
example: Reply text
aid:
type: integer
example: 2
admin:
type: string
example: abills
datetime:
type: string
example: '2021-08-09 13:25:41'
mainMsg:
type: integer
example: 40
MsgsChapter_inner:
type: object
properties:
id:
type: integer
example: 2
name:
type: string
example: Первый раздел
responsible:
type: integer
example: 1
innerChapter:
type: integer
example: 0
autoclose:
type: integer
example: 50
DistrictsArray_inner:
type: object
properties:
id:
type: integer
example: 10
name:
type: string
example: пос.Зуевка
city:
type: string
example: Харцызск
zip:
type: string
streetCount:
type: integer
example: 31
StreetsArray_inner:
type: object
properties:
id:
type: integer
example: 10
streetName:
type: string
example: ул.Цэемовская
districtId:
type: integer
example: 2
buildCount:
type: integer
example: 31
BuildsArray_inner:
type: object
properties:
id:
type: integer
example: 10
streetName:
type: string
example: ул.Цэемовская
streetId:
type: integer
example: 2
number:
type: string
example: '31'
PaymentTypesArray_inner:
type: object
properties:
id:
type: integer
example: 10
name:
type: string
example: Credit card
feesType:
type: integer
example: 0
color:
type: string
UserPaymentsArray_inner:
type: object
properties:
id:
type: integer
example: 10
sum:
type: integer
example: 500
regDate:
type: string
example: '2021-07-02 07:46:01'
method:
type: integer
example: 6
innerDescribe:
type: string
FeesTypesArray_inner:
type: object
properties:
id:
type: integer
example: 10
name:
type: string
example: Пеня
sum:
type: integer
example: 500
defaultDescribe:
type: string
UserFeesArray_inner:
type: object
properties:
id:
type: integer
example: 10
sum:
type: integer
example: 500
regDate:
type: string
example: '2021-07-02 07:46:01'
method:
type: integer
example: 2
dsc:
type: string
example: 'Internet: М/А Премиум до 100м (41) - Распределение абонплаты'
AbonTpsArray_inner:
type: object
properties:
tpId:
type: integer
example: 1
name:
type: string
example: Test abon TP
price:
type: integer
example: 100
userPortal:
type: integer
example: 0
userCount:
type: integer
example: 10
discount:
type: integer
example: 0
paymentType:
type: integer
example: 0
periodAlignment:
type: integer
example: 1
nextAbonDate:
type: string
example: '2021-10-01'
description:
type: string
AbonUsersArray_inner:
type: object
properties:
tpId:
type: integer
example: 1
tpName:
type: string
example: Test abon TP
price:
type: integer
example: 100
serviceCount:
type: integer
example: 1
date:
type: string
example: '2021-08-11'
nextAbon:
type: string
example: '2021-09-01'
uid:
type: integer
example: 11135
login:
type: string
example: '3433'
OnlineSessionsArray_inner:
type: object
properties:
clientIpNum:
type: integer
example: 3232238092
nasId:
type: integer
example: 12
duration:
type: string
example: '838:59:59'
status:
type: integer
example: 10
userName:
type: string
example: userName
clientIp:
type: string
example: 192.168.10.12
acctSessionId:
type: string
example: Akie6VpiYU
UserList:
type: array
items:
type: object
properties:
deposit:
type: number
example: 36579.21
fio:
type: string
example: Иванов Иван
uid:
type: integer
example: 1
gid:
type: integer
example: 1
login:
type: string
example: testuser
billId:
type: integer
example: 12
Сделать ограничение на Admin RESTful API, можно с помощью опции $conf{API_IPS},
в конфигурационном файле config.pl, пример
Code Block |
---|
$conf{API_IPS} = '192.20.208.1, 217.116.76.0/24, 104.81.60.171'; |
Или в настройках Настройка>Администраторы>Доступ
Возвращать по почту письма, смс или другие вещи которые поддерживают перевод в RESTful API, можно включить с помощью опции $conf{API_CONF_LANGUAGE},
в конфигурационном файле config.pl, пример
Code Block |
---|
$conf{API_CONF_LANGUAGE} = 1; |
Опция дебага, позволяет выводить debuginfo при ошибке, и также её сохранять с API_LOG. Никак не влияет на работу системы.
Code Block |
---|
$conf{API_DEBUG} = 1; |
Авторизация
Для подтверждения личности при выполнении запросов, некоторые пути требуют соответствующий привилегии:
- Авторизация администратора выполняется через
API_KEY
. Ключ нужно передать в заголовке запросаKEY
в значенииAPI_KEY
.
Для полученияAPI_KEY
нужно его задать через веб-интерфейс Настройки > Администраторы, полеAPI_KEY
. - Пользователям нужно использовать идентификатор сессии (
sid
), передавая его значение в заголовкеUSERSID
.
Для полученияsid
можно воспользоваться авторизацией через API используя путь авторизация абонента (/user/login
).
Разрешить получить сессию администратора с помощью REST API
Code Block |
---|
$conf{API_ADMIN_AUTH_LOGIN} = 1; |
СТРОГО НЕ РЕКОМЕНДУЕТСЯ ДЛЯ ИСПОЛЬЗОВАНИЯ!!! Возвращает apiKey в запросе на получение сессии!!!
Code Block |
---|
$conf{API_ADMIN_AUTH_LOGIN_RETURN_API_KEY} = 1; |
Запуск на nginx
Чтобы включить поддержку nginx нужно:
прописать в config.pl опцию
Code Block $conf{API_NGINX}=1;
- Отредактировать ваш конфигурационный файл nginx
Работа с API для ботов
для авторизации в USER API телеграмм бота необходимо
1) Прописать IP с которых будет обращаться бот к серверу
Code Block |
---|
$conf{BOT_APIS}='127.0.0.1'; |
2) Прописать секрет бота для дополнительной проверки запроса (любое значение)
Code Block |
---|
$conf{BOT_SECRET}='test1234567787654'; |
Авторизация происходит по хедеру X-ABillS-Bot-Secret
X-ABillS-Bot-Secret хранится в телеграм боте и передается для авторизации
Получение информации по пользователю и работа с пользователем
1) хедер X-ABillS-Bot - какой именно бот авторизуется, возможные варианты - Viber, Telegram
2) хедер X-ABillS-User-ID - id пользователя в боте
3) хедер X-ABillS-Admin-ID - id админа в боте
Получить OpenAPI вашей версии
1) Прямо с API
Выставьте переменную:
Code Block |
---|
$conf{API_SWAGGER} = 1; |
Обращайтесь за
USER API - /api.cgi/swagger
ADMIN API - /api.cgi/swagger/admin
Для того, чтобы развернуть Redocly, скопируйте файлы с misc/api/redocly/
в cgi-bin
.
USER API - /redocly-user.html
ADMIN API - /redocly-admin.html
2) Прямо с файла
В каждом биллинге уже установлен полностью скомпилированный OpenAPI.
Они находятся за путями misc/api/bundle_user.yaml
и misc/api/bundle_admin.yaml
Стандарт REST
Реализованный в системе RESTful интерфейс управления услугами и абонентами соответствует стандарту REST API.