1. Общие сведения
Сервисы используют методы GET, POST и PUT, отвечающие стандарту RFC 7231. Путь к сервису должен соответствовать шаблону «api/[version]/[controller]», например, «api/v1/metering_devices». Тело запроса содержит json-объект, соответствующий описанию сервиса, наименования свойств объектов формируются по правилам snake_case. Свойства со значениями по умолчанию исключаются из сериализации. Все операции по лицевым счетам проводятся исключительно по соответствующим платежным кодам. Все запросы должны быть авторизованы, ограничения по данным накладываются в разрезе платежного кода.
Требования к методу | |||
| GET | POST | PUT |
Имеет тело запроса | Нет | Да | Да |
Имеет тело ответа | Да | Да | Нет |
Безопасный | Да | Нет | Нет |
Идемпотентный | Да | Нет | Да |
2. Требования по аутентификации
Обращения к сервисам доступны только по HTTPS протоколу. Аутентификация сторонней системы производится самоподписным доверенным сертификатом на уровне nginx.
Аутентификация конечного пользователя производится методом передачи заголовка Authorization (используется базовая аутентификация) на уровне прикладной системы. Для базовой авторизации пользователя предлагается использовать платежный код в качестве имени пользователя и результат слияния фамилии и номера квартиры через разделитель “@”.
Пример:
Аутентификация пользователя | |
Построение заголовка | Basic Base64([платежный код]:[фамилия]@[квартира]) Пример для пользователя с фамилией «Иванов», квартирой «64А» и платежным кодом «810123456»: Password = “иванов@64а” Token = “810123456:иванов@64а” Base64String = “ODEwMTIzNDU2OtC40LLQsNC90L7QskA2NNCw” |
Результат | Authorization: Basic ODEwMTIzNDU2OtC40LLQsNC90L7QskA2NNCw |
3. Обработка ошибок
В качестве ответов для всех сервисов резервируются следующие коды ответов, для каждого из методов набор ошибок может быть расширен:
Зарезервированные коды ответов | |
Код ответа | Описание ответа |
400 (Bad Request) | Запрос подписан неверным сертификатом сторонней системы |
401 (Unauthorized) | Введен неверный платежный код, фамилии или номера квартиры |
403 (Forbidden) | Запрошенные данные недоступны |
404 (Not Found) | Запрошенный объект не найден |
408 (Request Timeout) | Запрос не отработал за отведенный промежуток времени |
422 (Unprocessable entity) | Объект распознан, но не может быть обработан |
В теле ответа неуспешные ответы могут быть дополнены информацией, детализирующей возникшие в процессе обработки ошибки. Тело ответа представляется json массивом объектов и состоит из свойств, описанных в таблице:
Описание объекта ошибки | |||
Свойство | Тип | Описание | |
Id | UInt32 | Идентификатор объекта | |
Code | Int32 | Идентификатор ошибки | |
Comment | String | Детализация ошибки | |
Пример | |||
[ { "id": 500, "code": 10000, "comment": "Целая часть введенного показания превышает разрядность прибора учета" } ] |
1. Перечень сервисов
Реализуются следующие сервисы:
Сервис данных о ЛС | |||||||||||||||||||||||||||
1. | Маршрут | api/PersonalAccount/GetPersonalAccountInfo | |||||||||||||||||||||||||
Метод | GET | ||||||||||||||||||||||||||
Заголовки | Аутентификации пользователя | ||||||||||||||||||||||||||
Описание | Получение информации по лицевому счету | ||||||||||||||||||||||||||
Тело ответа |
|
Сервис данных о ЛС | |||||||||||||
2. | Маршрут | /api/Payment/GetPayment/{publicPersonalAccount} | |||||||||||
Метод | GET | ||||||||||||
Заголовки | Аутентификации пользователя | ||||||||||||
Описание | Получение списка оплат (3 последние) | ||||||||||||
Тело ответа |
|
Сервис данных о ЛС | |||||||||||||
3 | Маршрут | /api/Counter/GetCounters | |||||||||||
Метод | GET | ||||||||||||
Заголовки | Аутентификации пользователя | ||||||||||||
Описание | Список ПУ у абонента | ||||||||||||
Тело ответа |
|
Сервис данных о ЛС | |||||||||||||||||||
4 | Маршрут | /api/Counter/SaveValue | |||||||||||||||||
Метод | POST | ||||||||||||||||||
Заголовки | Аутентификации пользователя | ||||||||||||||||||
Описание | Сохранение показания ПУ | ||||||||||||||||||
Тело ответа |
|
Сервис данных о ЛС | |||||||||||||||||||
5 | Маршрут | api/Charge/ChargesPerMonth | |||||||||||||||||
Метод | GET | ||||||||||||||||||
Заголовки | Аутентификации пользователя | ||||||||||||||||||
Описание | Получение начислений за определенный месяц и год | ||||||||||||||||||
Тело ответа |
|
Сервис данных о ЛС | |||||||||||||||||||
6 | Маршрут | api/Charge/GetChargesDescription | |||||||||||||||||
Метод | GET | ||||||||||||||||||
Заголовки | Аутентификации пользователя | ||||||||||||||||||
Описание | Получение расшифровки начислений за предыдущий месяц | ||||||||||||||||||
Тело ответа |
|
Список сервисов
№ | Наименование | Описание |
1 | GetLs (pUlica,pNdom, pnKvar,pfio) | Предоставление информации по лицевому счету по адресу (улица, номер дома и номер квартиры. фамилии собственника или ответственного квартиросъемщика) |
2 | GetBalance(pNumLs, pDatMonth) | Предоставление суммы начисления к оплате по лицевому счету за месяц |
3 | GetCounters(pNumLs) | Получение списка приборов учета по лицевому счету |
4 | GetPlat(pNumLs) | Получение списка последних 3-х оплат по лицевому счету |
5 | GetSumDetails(pNumLs,kod) | Получение расшифровки суммы начисления по услуге |
6 | SaveCountersVal(pNumLs,pNumCnt,pValue) | Сохранить показание прибора учета |
7 | SaveClaim(pNumLs,pNote) | Сохранить заявку |
GetLs (pUlica,pNdom, pnKvar,pfio)
Входные параметры
Наименование | Тип | Обязательность | Описание | Пример |
pUlica | Строка(80) | Да | Улица | амирхана |
pNdom | Строка(10) | Да | Дом | 5 |
pnKvar | Строка(10) | Да | Квартира | 1 |
pFam | Строка(60) | Да | Фамилия | иванов |
Выходные параметры
Наименование | Тип | Обязательность | Описание | Пример |
pNumLs | Строка(10) | Да | Номер лицевого счета | 5016123456 |
pDateOpen | Дата | Да | Дата открытия лиц счета | 10.02.2001 |
pDateClose | Дата | Нет | Дата закрытия лиц счета | 30.01.2020 |
pSquare | Число(8,2) | Нет | Общая площадь | 54,2 |
pCountRoom | Число(2) | Нет | Количество комнат | 1 |
GetBalance(pNumLs, pDatMonth)
Входные параметры
Наименование | Тип | Обязательность | Описание | Пример |
pNumLs | Строка(10) | Да | Номер лицевого счета | 5016123456 |
pDatMonth | Строка(20) | Да | Месяц и год начисления | январь 20 года |
Выходные параметры
Наименование | Тип | Обязательность | Описание | Пример |
pSumCharge | Число(8,2) | Да | Начислено к оплате | 1000 |
pSumReal | Число(8,2) | Да | в т ч начислено за месяц | 700 |
pSumInsaldo | Число(8,2) | Да | в т ч долг / переплата | 300 |
GetCounters(pNumLs)
Входные параметры
Наименование | Тип | Обязательность | Описание | Пример |
pNumLs | Строка(10) | Да | Номер лицевого счета | 5016123456 |
Выходные параметры
Передаётся список записей со следующими атрибутами
Наименование | Тип | Обязательность | Описание | Пример |
pNum | Число(2) | Да | Номер записи в списке | 1 |
pNameService | Строка(50) | Да | Название коммунальной услуги | Холодное водоснабжение |
pNumCnt | Строка(50) | Да | Заводской номер прибора учёта | 276381298 |
pCntVal | Число(15,5) | Нет | Последнее показание | 1545 |
pDatUchet | Дата | Нет | Показание на дату | 20.10.2020 |
GetPlat(pNumLs)
Входные параметры
Наименование | Тип | Обязательность | Описание | Пример |
pNumLs | Строка(10) | Да | Номер лицевого счета | 5016123456 |
Выходные параметры
Передаётся список записей со следующими атрибутами
Наименование | Тип | Обязательность | Описание | Пример |
pNum | Число(2) | Да | Номер записи в списке | 1 |
pSumPlat | Число(15,2) | Да | Сумма оплаты | 5000 |
pDatVvod | Дата | Да | Дата оплаты | 01.10.2020 |
pSource | Строка(50) | Нет | Источник поступления | Почта РФ |
GetSumDetails(pNumLs,kod)
Входные параметры
Наименование | Тип | Обязательность | Описание | Пример |
pNumLs | Строка(10) | Да | Номер лицевого счета | 5016123456 |
pServiceNum | Чисто(10) | Нет | Номер услуги в счёт фактуре | 10 |
pServiceName | Строка(50) | Нет | Название услуги в счёт фактуре | Обращение с ТКО |
Выходные параметры
Передаётся список записей со следующими атрибутами
Наименование | Тип | Обязательность | Описание | Пример |
pSumNach | Число(15,2) | Да | Начислено всего | 5000 |
pDescr | Строка(200) | Да | Расшифровка начисления | К оплате 700 рублей в том числе 500 рублей начисления за текущий месяц, 150 рублей долг за прошлый месяц, 50 рублей перерасчёт за прошлый период) Начислено 500 рублей по следующим данным: Тариф за единицу измерения 10 рублей с квадратного метра Общая площадь 50 квадратных метров |
SaveCountersVal(pNumLs,pNumCnt,pValue)
Входные параметры
Наименование | Тип | Обязательность | Описание | Пример |
pNumLs | Строка(10) | Да | Номер лицевого счета | 5016123456 |
pNumCnt | Строка(50) | Да | Заводской номер прибора учёта | 827873 |
pValue | Число(15,5) | Да | Показание прибора учёта | 122.1 |
Выходные параметры
Наименование | Тип | Обязательность | Описание | Пример |
pStatus | Логическое | Да | Статус сохранения | false |
pResult | Строка(100) | Нет | Описание причины несохранения | Текущее показание не может быть меньше предыдущего (130) |
SaveClaim(pNumLs,pNote)
Входные параметры
Наименование | Тип | Обязательность | Описание | Пример |
pNumLs | Строка(10) | Да | Номер лицевого счета | 5016123456 |
pNote | Строка(150) | Да | Описание заявки | Заказать справку о начислениях с января по декабрь 2020 |
Выходные параметры
Наименование | Тип | Обязательность | Описание | Пример |
pStatus | Логическое | Да | Статус сохранения | true |
pResult | Строка(100) | Нет | Описание причины несохранения | Заявка успешно сохранена. Номер обращения 287373 |