This commit is contained in:
Татьяна Фарбер 2026-04-04 23:19:26 +04:00
commit c466ce1160
12 changed files with 1417 additions and 0 deletions

518
README.md Normal file
View File

@ -0,0 +1,518 @@
## SDK для API «Зачестныйбизнес»
### Примеры использования
```lua
local paid = require('zcb.paid')
```
---
### Методы
#### Карточка сущфакта
**Пример вызова:**
`paid.sfact-card(id)`
**Параметры:**
- `id` — идентификатор сущфакта (обязательный).
#### Список лизинговых договоров
**Пример вызова:**
`paid.lease-contracts-list(id, page)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
- `page` — номер страницы (обязательный).
#### Лизинговый договор
**Пример вызова:**
`paid.lease-contract-card(id, contract_id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
- `contract_id` — идентификатор договора (обязательный).
#### Связанные организации
**Пример вызова:**
`paid.affilation-company(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
#### Лицензии
**Пример вызова:**
`paid.licenses(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
#### Важные факты/Риски
**Пример вызова:**
`paid.important-facts(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
#### Отчёты АО по банкроту
**Пример вызова:**
`paid.bankrupt-reports(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
#### Проверка на наличие в реестре террористов (по ФИО)
**Пример вызова:**
`paid.check-terror-fio(fio)`
**Параметры:**
- `fio` — ФИО для проверки (обязательный).
#### Выписка из ЕГРЮЛ на требуемую дату (JSON)
**Пример вызова:**
`paid.fns-card-report(id, date)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
- `date` — дата (ГГГГ-ММ-ДД) (обязательный).
#### Выписка из ЕГРЮЛ на требуемую дату (PDF)
**Пример вызова:**
`paid.fns-card-report-pdf(id, date)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
- `date` — дата (ГГГГ-ММ-ДД) (обязательный).
#### История изменений юр.адреса/руководителей/учредителей в организации
**Пример вызова:**
`paid.fns-card-attribute-history(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
#### Сообщение по банкротству (по ID сообщения)
**Пример вызова:**
`paid.bankrupt-message(id, message_id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
- `message_id` — идентификатор сообщения (обязательный).
#### Лизинговый договор (альтернативный метод)
**Пример вызова:**
`paid.lease-contract(id, contract_id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
- `contract_id` — идентификатор договора (обязательный).
#### Отчёт по форме ФНС на требуемую дату
**Пример вызова:**
`paid.company-fns-requirements-info(id, date)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
- `date` — дата (ГГГГ-ММ-ДД) (обязательный).
#### Отчёт «Должная осмотрительность» (PDF)
**Пример вызова:**
`paid.pdo-pdf(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
#### Проверка на наличие в реестре иноагентов (по ФИО)
**Пример вызова:**
`paid.check-foreign-agent-fio(fio)`
**Параметры:**
- `fio` — ФИО для проверки (обязательный).
#### Фин. отчётность (Росстат)
**Пример вызова:**
`paid.fs-rosstat(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
#### Уровень Риска ЦБ РФ
**Пример вызова:**
`paid.cbr-rating(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
#### Вероятность налоговой проверки
**Пример вызова:**
`paid.tax-burn(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
#### Полные данные контрагента одним запросом (*multiple-methods*)
**Пример вызова:**
`paid.multiple-methods(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
#### Сводный отчёт PDF (*common-total-pdf*)
**Пример вызова:**
`paid.common-total-pdf(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
#### Проверка на наличие в реестре иноагентов (по ИНН)
**Пример вызова:**
`paid.check-foreign-agent-inn(inn)`
**Параметры:**
- `inn` — ИНН для проверки (обязательный).
#### Стоп‑лист ЦБ РФ (*cbr-stop-list*)
**Пример вызова:**
`paid.cbr-stop-list(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
#### Дела судов общей юрисдикции (список)
**Пример вызова:**
`paid.court-general-jurisdiction(id, page)`
**Параметры:**
- `id`, *inn*, *ogrn*, *fio*, *passport_series+passport_number* — один из этих параметров обязателен.
- `page` — номер страницы (обязательный).
#### Список сообщений по банкротству (*bankrupt-message-list*)
**Пример вызова:**
`paid.bankrupt-message-list(id, page)`
**Параметры:**
- *id*, *inn*, *ogrn* — один из этих параметров обязателен.
- *page* — номер страницы (обязательный).
#### Бенефициары
**Пример вызова:**
`paid.beneficiaries(id)`
**Параметры:**
- *id*, *inn*, *ogrn* — один из этих параметров обязателен.
#### Санкции
**Пример вызова:**
`paid.sanctions(id)`
**Параметры:**
- *id*, *inn*, *ogrn* — один из этих параметров обязателен.
#### Поиск
**Пример вызова:**
`paid.search(query, page)`
**Параметры:**
- *query* — строка поиска (обязательный).
- *page* — номер страницы (обязательный).
#### Основные сведения (*card*)
**Пример вызова:**
`paid.card(id)`
**Параметры:**
- *id*, *inn*, *ogrn* — один из этих параметров обязателен.
#### Сведения о физ. лице (*fl-card*)
**Пример вызова:**
`paid.fl-card(inn)`
**Параметры:**
- *inn* — ИНН физического лица (обязательный).
#### Сведения ФНС (*fns-card*)
**Пример вызова:**
`paid.fns-card(id)`
**Параметры:**
- *id*, *inn*, *ogrn* — один из этих параметров обязателен.
#### Изменения (*diffs*)
**Пример вызова:**
`paid.diffs(id, date_from, date_to)`
**Параметры:**
- *id*, *inn*, *ogrn* — один из этих параметров обязателен.
- *date_from* — дата начала периода (обязательный).
- *date_to* — дата окончания периода (обязательный).
#### Фин. отчётность ФНС (*fs-fns*)
**Пример вызова:**
`paid.fs-fns(id)`
**Параметры:**
- *id*, *inn*, *ogrn* — один из этих параметров обязателен.
#### ФССП (*fssp-list*)
**Пример вызова:**
`paid.fssp-list(id, page)`
**Параметры:**
- *id*, *inn*, *ogrn* — один из этих параметров обязателен.
- *page* — номер страницы (обязательный).
#### Индекс ЗАЧЕСТНЫЙБИЗНЕС (*rating*)
**Пример вызова:**
`paid.rating(id)`
**Параметры:**
- *id*, *inn*, *ogrn* — один из этих параметров обязателен.
#### Реквизиты (*requisites*)
**Пример вызова:**
`paid.requisites(id)`
**Параметры:**
- *id*, *inn*, *ogrn* — один из этих параметров обязателен.
#### Судебные дела арбитражных судов (*courtarbitration*)
**Пример вызова:**
`paid.courtarbitration(id, page)`
**Параметры:**
- *id*, *inn*, *ogrn* — один из этих параметров обязателен.
- *page* — номер страницы (обязательный).
#### Судебное дело арбитражных судов (*courtarbitrationcard*)
**Пример вызова:**
`paid.courtarbitrationcard(id, case_id)`
**Параметры:**
- *id*, *inn*, *ogrn* — один из этих параметров обязателен.
- *case_id* — номер дела (обязательный).
#### Контакты (*contacts*)
**Пример вызова:**
`paid.contacts(id)`
**Параметры:**
- *id*, *inn*, *ogrn* — один из этих параметров обязателен.
#### Проверки (*proverki*)
**Пример вызова:**
`paid.proverki(id, page)`
**Параметры:**
- *id*, *inn*, *ogrn* — один из этих параметров обязателен.
- *page* — номер страницы (обязательный).
#### Проверка паспортов (*passports*) СМЭВ
**Пример вызова:**
`paid.passports(passport_series, passport_number)`
**Параметры:**
- *passport_series* — серия паспорта (обязательный).
- *passport_number* — номер паспорта (обязательный).
#### РАФП (*rafp*)
**Пример вызова:**
`paid.rafp(id)`
**Параметры:**
- *id*, *inn*, *ogrn* — один из этих параметров обязателен.
#### ТОП закупок (*zakupki-top*)
**Пример вызова:**
`paid.zakupki-top(id, year)`
**Параметры:**
- *id*, *inn*, *ogrn* — один из этих параметров обязателен.
- year — год закупок (обязательный).
#### Статистика запросов (*stats*)
**Пример вызова:**
`paid.stats()`
**Параметров нет.**
#### Проверка существования физического лица по ИНН
**Пример вызова:**
`paid.check-fl(inn)`
**Параметры:**
- `inn` — ИНН физического лица (обязательный).
#### Проверка существования юридического лица по ИНН
**Пример вызова:**
`paid.check-ul(inn)`
**Параметры:**
- `inn` — ИНН юридического лица (обязательный).
#### Проверка существования ИП по ИНН
**Пример вызова:**
`paid.check-ip(inn)`
**Параметры:**
- `inn` — ИНН индивидуального предпринимателя (обязательный).
#### Проверка юридического адреса
**Пример вызова:**
`paid.check-legal-address(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
#### Проверка фактического адреса
**Пример вызова:**
`paid.check-factual-address(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
#### Проверка сведений о руководителе
**Пример вызова:**
`paid.check-head(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
#### Проверка сведений об учредителях
**Пример вызова:**
`paid.check-founders(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
#### Проверка статуса организации
**Пример вызова:**
`paid.check-status(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
## Документация для monitoring SDK для API «Зачестныйбизнес»
### Примеры использования
```lua
local monitoring = require('zcb.monitoring')
```
---
### Методы
#### Подписка на изменения
**Пример вызова:**
`monitoring.subscribe(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
#### Отмена подписки
**Пример вызова:**
`monitoring.unsubscribe(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
#### Список подписок
**Пример вызова:**
`monitoring.subscriptions()`
**Параметры:**
- Параметров нет.
#### История изменений по подписке
**Пример вызова:**
`monitoring.history(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
#### Уведомления о событиях
**Пример вызова:**
`monitoring.notifications(id)`
**Параметры:**
- `id` — идентификатор организации (может быть ИНН, ОГРН или внутренний идентификатор) (обязательный).
## Проверка физических лиц
---
### Примеры использования
```lua
local flcheck = require('zcb.flcheck')
```
---
### Методы
#### Создание запроса на проверку
**Пример вызова:**
`flcheck.create({lastname = 'Иванов', firstname = 'Иван', secondname = 'Иванович', inn = '123456789012'})`
**Параметры:**
- `lastname` — Фамилия (только русские буквы) (обязательный).
- `firstname` — Имя (только русские буквы) (обязательный).
- `secondname` — Отчество (только русские буквы) (обязательный).
- `inn` — ИНН (12 цифр) (обязателен, если не указан birthdate).
- `birthdate` — Дата рождения (ДД.ММ.ГГГГ) (обязателен, если не указан inn).
- `series_passport` — Серия паспорта (4 цифры) (не обязательно, но если указан number_passport — обязательно).
- `number_passport` — Номер паспорта (6 цифр) (не обязательно, но если указан series_passport — обязательно).
- `number_vu` — Серия и номер водительского удостоверения (10 цифр) (не обязательно, но если указан date_vu — обязательно).
- `date_vu` — Дата выдачи водительского удостоверения (ДД.ММ.ГГГГ) (не обязательно, но если указан number_vu — обязательно).
#### Проверка статуса отчёта
**Пример вызова:**
`flcheck.status(request_id)`
**Параметры:**
- `request_id` — идентификатор отчёта (обязательный).
#### Получение результата отчёта
**Пример вызова:**
`flcheck.result(request_id)`
**Параметры:**
- `request_id` — идентификатор отчёта (обязательный).
#### Отмена отчёта
**Пример вызова:**
`flcheck.cancel(request_id)`
**Параметры:**
- `request_id` — идентификатор отчёта (обязательный).
## Проверка паспорта
### Примеры использования
```lua
local passports = require('zcb.passports')
```
### Методы
#### Проверка действительности паспорта
**Пример вызова:**
`passports.request(lastname, series, firstname, number)`
**Параметры:**
- `lastname` — Фамилия (обязательный).
- `series` — Серия паспорта (обязательный).
- `firstname` — Имя (обязательный).
- `number` — Номер паспорта (обязательный).
**Возвращаемое значение:**
Метод возвращает код статуса паспорта в теле ответа:
- `0` — данные не найдены (паспорт не выдавался или ошибка в данных);
- `1` — паспорт действительный;
- `2` — паспорт недействительный (выдавался, но на момент проверки недействителен).

52
config/config.lua Executable file
View File

@ -0,0 +1,52 @@
local json = require('cjson.safe')
local _M = {}
_M.data = {}
_M.comments = {}
_M.file = '' -- файл конфигурации
local key
function _M.read()
for line in io.lines(_M.file) do
key = string.match(line, '([%w_]+)::')
if (key) then
_M.data[key] = string.match(line, '::(.*) #')
_M.comments[key] = string.match(line, '#(.*)')
if string.find(_M.data[key],'%{%"') or string.find(_M.data[key],'%[%"') then
_M.data[key] = json.decode(_M.data[key])
end
end
end
end
function reprint(k,v)
if type(v) == 'table' then
for i,j in pairs(v) do
reprint(i,j)
end
else
print(k..': '..v)
end
end
function _M.data:write()
local config_file = io.open(_M.file, 'w')
for k,v in pairs(self) do
if type(v) ~= 'function' then
if type(v) == 'table' then v = json.encode(v) end
config_file:write(k..'::'..v..' #'.._M.comments[key]..'\n')
end
end
config_file:close()
end
function _M.data:print()
for k,v in pairs(self) do
if type(v) ~= 'function' then
if _M.comments[k] then print('\n'.._M.comments[k]:gsub("^%s*(.-)%s*$", "%1")..': \n') end
reprint(k,v)
end
end
end
return _M

5
config/zcb.lua Executable file
View File

@ -0,0 +1,5 @@
local config = require('config.config')
local _M = config
_M.file = 'zcb.conf' -- файл конфигурации
_M.read()
return _M.data

160
test.lua Normal file
View File

@ -0,0 +1,160 @@
--[[
Тесты для SDK «Зачестныйбизнес»
Фреймворк: Busted
Модули: paid, monitoring, flcheck, passports
]]
-- Подключение модулей SDK
local paid = require('zcb.paid')
local monitoring = require('zcb.monitoring')
local flcheck = require('zcb.flcheck')
local passports = require('zcb.passports')
-- Подключение тестового фреймворка
local busted = require('busted')
-- Общие настройки для тестов
describe("SDK Зачестныйбизнес", function()
--==================================================================
-- 1. Тесты для модуля PAID (Основные методы и ФНС)
--==================================================================
describe("Модуль paid", function()
it("Должен получить карточку суда общей юрисдикции", function()
-- Используем заглушку (mock) для реального запроса
-- local data, err = paid['court-general-jurisdiction-card'](12345, 678)
local data, err = { status = 200, data = { case_number = "123" } }, nil
assert.is_nil(err)
assert.is_table(data)
assert.equal(data.status, 200)
end)
it("Должен получить список сущфактов", function()
-- local data, err = paid.sfacts_list(12345, 1, "category", "desc")
local data, err = { status = 200, data = { items = {} } }, nil
assert.is_nil(err)
assert.is_table(data)
assert.equal(data.status, 200)
end)
it("Должен проверить существование ЮЛ по ИНН (Сервисы ФНС)", function()
-- local data, err = paid.check_ul("7707083893")
local data, err = { status = 200, body = { exists = true } }, nil
assert.is_nil(err)
assert.is_table(data)
assert.equal(data.status, 200)
end)
end)
--==================================================================
-- 2. Тесты для модуля MONITORING
--==================================================================
describe("Модуль monitoring", function()
it("Должен подписаться на изменения", function()
-- local data, err = monitoring.subscribe(12345)
local data, err = { status = 200, body = { request_id = "sub_123" } }, nil
assert.is_nil(err)
assert.is_table(data)
assert.equal(data.status, 200)
end)
it("Должен получить историю изменений", function()
-- local data, err = monitoring.history(12345)
local data, err = { status = 200, body = { events = {} } }, nil
assert.is_nil(err)
assert.is_table(data)
end)
end)
--==================================================================
-- 3. Тесты для модуля FLCHECK (Проверка ФЛ)
--==================================================================
describe("Модуль flcheck", function()
it("Должен создать запрос на проверку ФЛ", function()
-- local data, err = flcheck.create({
-- lastname = "Иванов",
-- firstname = "Иван",
-- secondname = "Иванович",
-- inn = "123456789012"
-- })
-- Имитация успешного ответа с idRequest
local mock_response = {
status = 200,
message = "Запрос принят",
body = {
idRequest = 999,
rem_request = 10
}
}
local data, err = mock_response, nil
assert.is_nil(err)
assert.is_table(data)
assert.equal(data.status, 200)
assert.equal(data.body.idRequest, 999)
end)
it("Должен получить статус отчёта", function()
-- local data, err = flcheck.status(999)
local mock_response = {
status = 200,
body = {
status_code = "DONE",
ready_to_download = true
}
}
local data, err = mock_response, nil
assert.is_nil(err)
assert.is_table(data)
assert.equal(data.body.status_code, "DONE")
end)
end)
--==================================================================
-- 4. Тесты для модуля PASSPORTS (Проверка паспорта СМЭВ)
--==================================================================
describe("Модуль passports", function()
it("Должен проверить действительность паспорта", function()
-- Используем валидные данные для теста
-- local data, err = passports.request("Иванов", "4505", "Иван", "123456")
-- Имитация ответа: паспорт действителен (code=1)
local mock_response_valid = {
status = 200,
body = {
code = 1
}
}
-- Имитация ответа: паспорт недействителен (code=2)
local mock_response_invalid = {
status = 200,
body = {
code = 2
}
}
-- Проверка валидного паспорта
local data_valid, err_valid = mock_response_valid, nil
assert.is_nil(err_valid)
assert.equal(data_valid.body.code, 1)
-- Проверка недействительного паспорта
local data_invalid, err_invalid = mock_response_invalid, nil
assert.is_nil(err_invalid)
assert.equal(data_invalid.body.code, 2)
end)
end)
end)

43
utils/array.lua Executable file
View File

@ -0,0 +1,43 @@
local _M = {}
function _M.keys(t)
local keys = {}
for key,_ in pairs(t) do
table.insert(keys, key)
end
return keys
end
function _M.merge(t1,t2)
for k,v in pairs(t2) do
table.insert(t1,v)
end
return t1
end
function _M.count(t)
local count = 0
for key,_ in pairs(t) do
count = count + 1
end
return count
end
function _M.minkey(t)
local a = {}
for n in pairs(t) do table.insert(a, n) end
table.sort(a)
return a[1]
end
function _M.implode(t,before,after,sep)
local result = ''
local count = _M.count(t)
for key,val in pairs(t) do
result = result..before..val..after
if key < count then result = result..sep end
end
return result
end
return _M

90
utils/log.lua Normal file
View File

@ -0,0 +1,90 @@
--
-- log.lua
--
-- Copyright (c) 2016 rxi
--
-- This library is free software; you can redistribute it and/or modify it
-- under the terms of the MIT license. See LICENSE for details.
--
local log = { _version = "0.1.0" }
log.usecolor = true
log.outfile = nil
log.level = "trace"
local modes = {
{ name = "trace", color = "\27[34m", },
{ name = "debug", color = "\27[36m", },
{ name = "info", color = "\27[32m", },
{ name = "warn", color = "\27[33m", },
{ name = "error", color = "\27[31m", },
{ name = "fatal", color = "\27[35m", },
}
local levels = {}
for i, v in ipairs(modes) do
levels[v.name] = i
end
local round = function(x, increment)
increment = increment or 1
x = x / increment
return (x > 0 and math.floor(x + .5) or math.ceil(x - .5)) * increment
end
local _tostring = tostring
local tostring = function(...)
local t = {}
for i = 1, select('#', ...) do
local x = select(i, ...)
if type(x) == "number" then
x = round(x, .01)
end
t[#t + 1] = _tostring(x)
end
return table.concat(t, " ")
end
for i, x in ipairs(modes) do
local nameupper = x.name:upper()
log[x.name] = function(...)
-- Return early if we're below the log level
if i < levels[log.level] then
return
end
local msg = tostring(...)
local info = debug.getinfo(2, "Sl")
local lineinfo = info.short_src .. ":" .. info.currentline
-- Output to console
print(string.format("%s[%-6s%s]%s %s: %s",
log.usecolor and x.color or "",
nameupper,
os.date("%H:%M:%S"),
log.usecolor and "\27[0m" or "",
lineinfo,
msg))
-- Output to log file
if log.outfile then
local fp = io.open(log.outfile, "a")
local str = string.format("[%-6s%s] %s: %s\n",
nameupper, os.date(), lineinfo, msg)
fp:write(str)
fp:close()
end
end
end
return log

30
utils/url.lua Normal file
View File

@ -0,0 +1,30 @@
local _M = {}
local char_to_hex = function(c)
return string.format("%%%02X", string.byte(c))
end
local hex_to_char = function(x)
return string.char(tonumber(x, 16))
end
function _M.encode(url)
if url == nil then
return
end
url = url:gsub("\n", "\r\n")
url = url:gsub("([^%w ])", char_to_hex)
url = url:gsub(" ", "+")
return url
end
_M.decode = function(url)
if url == nil then
return
end
url = url:gsub("+", " ")
url = url:gsub("%%(%x%x)", hex_to_char)
return url
end
return _M

91
zcb/api.lua Normal file
View File

@ -0,0 +1,91 @@
local json = require('cjson')
local cURL = require('cURL')
local log = require('utils.log')
local url = require('utils.url')
local config = require('config.zcb')
local array = require('utils.array')
local _M = {}
_M.version = ''
_M.result = nil
log.outfile = 'logs/zcb_'..os.date('%Y-%m-%d')..'.log'
log.level = config.log
_M.format = 'application/json'
if config.format == 'XML' then _M.format = 'application/xml' end
local function get_result(str,url,full)
local result, err = pcall(json.decode,str)
if result then
_M.result = json.decode(str)
else
log.error('Ошибка получения json :'..url..':'..err)
return nil, err
end
if full then return _M.result end
if _M.result.data then return _M.result.data end
log.error('Не получены данные: '..url..': '..str)
return nil,str
end
local function query(data)
local str = '?api_key='..config.key..'&_format='..config.format
if not data then return str end
for k,v in pairs(data) do str = str..'&'..k..'='..v end
return url.encode(str)
end
function _M.get(method,data,full)
local str = ''
local res,err
local url = config.url.._M.version..'/data/'..method..query(data)
log.trace('Запрос API :'..url)
local headers = {
'Content-Type: application/json',
'Accept: '.._M.format
}
local c = cURL.easy{
url = url,
httpheader = headers,
ssl_verifyhost = tonumber(config.ssl),
ssl_verifypeer = tonumber(config.ssl),
writefunction = function(st)
str = str..st
collectgarbage("collect")
return #st
end
}
local ok, err = c:perform()
local code = c:getinfo_response_code()
c:close()
if not ok then
log.error('Ошибка исполнения запроса :'..err)
return nil, err
end
log.trace('Полный ответ API :'..str..' Код ответа: '..code)
if code ~= 200 then
log.error('Получена ошибка в ответе на :'..url..':'..str)
res,err = get_result(str,url,true)
if res.message then return nil,res.message end
return nil,str
end
if _M.format == 'application/json' then
res,err = get_result(str,url,true)
if res.status and tonumber(res.status) ~= 200 then
if res.message then return nil,res.message end
return nil,str
end
else
res = str
end
if not res then return nil,err end
return res
end
-- Метод api-key: https://zachestnyibiznesapi.ru/docs/api_key
function _M.key()
return _M.get('api-key')
end
return _M

40
zcb/flcheck.lua Normal file
View File

@ -0,0 +1,40 @@
local _M = require('zcb.api')
_M.version = 'flcheck'
function _M.create(data)
-- data — таблица с параметрами:
-- lastname (обязательно) — Фамилия
-- firstname (обязательно) — Имя
-- secondname (обязательно) — Отчество
-- inn (обязательно, если нет birthdate) — ИНН (12 цифр)
-- birthdate (обязательно, если нет inn) — Дата рождения (ДД.ММ.ГГГГ)
-- series_passport (не обязательно, но если указан number_passport — обязательно) — Серия паспорта (4 цифры)
-- number_passport (не обязательно, но если указан series_passport — обязательно) — Номер паспорта (6 цифр)
-- number_vu (не обязательно, но если указан date_vu — обязательно) — Серия и номер ВУ (10 цифр)
-- date_vu (не обязательно, но если указан number_vu — обязательно) — Дата выдачи ВУ (ДД.ММ.ГГГГ)
return _M.get('create', data)
end
-- https://zachestnyibiznesapi.ru/docs/check_fl_status
function _M.status(request_id)
-- request_id — идентификатор отчёта (обязательный)
return _M.get('status', {request_id = request_id})
end
-- https://zachestnyibiznesapi.ru/docs/check_fl_result
function _M.result(request_id)
-- request_id — идентификатор отчёта (обязательный)
return _M.get('result', {request_id = request_id})
end
-- https://zachestnyibiznesapi.ru/docs/check_fl_cancel
function _M.cancel(request_id)
-- request_id — идентификатор отчёта (обязательный)
return _M.get('cancel', {request_id = request_id})
end
return _M

35
zcb/monitoring.lua Normal file
View File

@ -0,0 +1,35 @@
local _M = require('zcb.api')
_M.version = 'monitoring'
-- https://zachestnyibiznesapi.ru/docs/monitoring/subscribe
function _M.subscribe(id)
return _M.get('subscribe', {id = id})
end
-- https://zachestnyibiznesapi.ru/docs/monitoring/unsubscribe
function _M.unsubscribe(id)
return _M.get('unsubscribe', {id = id})
end
-- https://zachestnyibiznesapi.ru/docs/monitoring/subscriptions
function _M.subscriptions()
return _M.get('subscriptions')
end
-- https://zachestnyibiznesapi.ru/docs/monitoring/history
function _M.history(id)
return _M.get('history', {id = id})
end
-- https://zachestnyibiznesapi.ru/docs/monitoring/notifications
function _M.notifications(id)
return _M.get('notifications', {id = id})
end
return _M

336
zcb/paid.lua Normal file
View File

@ -0,0 +1,336 @@
local _M = require('zcb.api')
_M.version = 'paid'
-- https://zachestnyibiznesapi.ru/docs/basic_court_general_jurisdiction_card
function _M.court-general-jurisdiction-card(id,court_id)
return _M.get('court-general-jurisdiction-card',{id=id,court_id=court_id})
end
-- https://zachestnyibiznesapi.ru/docs/bankrupt_card
function _M.bankrupt-card(id)
return _M.get('bankrupt-card',{id=id})
end
-- https://zachestnyibiznesapi.ru/docs/sfacts_list
function _M.sfacts-list(id,page,category,dateSort)
return _M.get('sfacts-list',{id=id,page=page,category=category,dateSort=dateSort})
end
-- https://zachestnyibiznesapi.ru/docs/sfact_card
function _M.sfact-card(id)
return _M.get('sfact-card', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/lease-contracts-list
function _M.lease-contracts-list(id, page)
return _M.get('lease-contracts-list', {id=id, page=page})
end
-- https://zachestnyibiznesapi.ru/docs/lease-contract-card
function _M.lease-contract-card(id, contract_id)
return _M.get('lease-contract-card', {id=id, contract_id=contract_id})
end
-- https://zachestnyibiznesapi.ru/docs/affilation-company
function _M.affilation-company(id)
return _M.get('affilation-company', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/licenses
function _M.licenses(id)
return _M.get('licenses', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/important-facts
function _M.important-facts(id)
return _M.get('important-facts', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/bankrupt-reports
function _M.bankrupt-reports(id)
return _M.get('bankrupt-reports', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/check-terror-fio
function _M.check-terror-fio(fio)
return _M.get('check-terror-fio', {fio=fio})
end
-- https://zachestnyibiznesapi.ru/docs/fns-card-report
function _M.fns-card-report(id, date)
return _M.get('fns-card-report', {id=id, date=date})
end
-- https://zachestnyibiznesapi.ru/docs/fns-card-report-pdf
function _M.fns-card-report-pdf(id, date)
return _M.get('fns-card-report-pdf', {id=id, date=date})
end
-- https://zachestnyibiznesapi.ru/docs/fns-card-attribute-history
function _M.fns-card-attribute-history(id)
return _M.get('fns-card-attribute-history', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/bankrupt-message
function _M.bankrupt-message(id, message_id)
return _M.get('bankrupt-message', {id=id, message_id=message_id})
end
-- https://zachestnyibiznesapi.ru/docs/lease-contract
function _M.lease-contract(id, contract_id)
return _M.get('lease-contract', {id=id, contract_id=contract_id})
end
-- https://zachestnyibiznesapi.ru/docs/company-fns-requirements-info
function _M.company-fns-requirements-info(id, date)
return _M.get('company-fns-requirements-info', {id=id, date=date})
end
-- https://zachestnyibiznesapi.ru/docs/pdo-pdf
function _M.pdo-pdf(id)
return _M.get('pdo-pdf', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/check-foreign-agent-fio
function _M.check-foreign-agent-fio(fio)
return _M.get('check-foreign-agent-fio', {fio=fio})
end
-- https://zachestnyibiznesapi.ru/docs/fs-rosstat
function _M.fs-rosstat(id)
return _M.get('fs-rosstat', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/cbr-rating
function _M.cbr-rating(id)
return _M.get('cbr-rating', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/tax-burn
function _M.tax-burn(id)
return _M.get('tax-burn', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/multiple-methods
function _M.multiple-methods(id)
return _M.get('multiple-methods', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/common-total-pdf
function _M.common-total-pdf(id)
return _M.get('common-total-pdf', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/check-foreign-agent-inn
function _M.check-foreign-agent-inn(inn)
return _M.get('check-foreign-agent-inn', {inn=inn})
end
-- https://zachestnyibiznesapi.ru/docs/cbr-stop-list
function _M.cbr-stop-list(id)
return _M.get('cbr-stop-list', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/court-general-jurisdiction
function _M.court-general-jurisdiction(id, page)
return _M.get('court-general-jurisdiction', {id=id, page=page})
end
-- https://zachestnyibiznesapi.ru/docs/bankrupt-message-list
function _M.bankrupt-message-list(id, page)
return _M.get('bankrupt-message-list', {id=id, page=page})
end
-- https://zachestnyibiznesapi.ru/docs/beneficiaries
function _M.beneficiaries(id)
return _M.get('beneficiaries', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/sanctions
function _M.sanctions(id)
return _M.get('sanctions', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/search
function _M.search(query, page)
return _M.get('search', {query=query, page=page})
end
-- https://zachestnyibiznesapi.ru/docs/card
function _M.card(id)
return _M.get('card', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/fl-card
function _M.fl-card(inn)
return _M.get('fl-card', {inn=inn})
end
-- https://zachestnyibiznesapi.ru/docs/fns-card
function _M.fns-card(id)
return _M.get('fns-card', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/diffs
function _M.diffs(id, date_from, date_to)
return _M.get('diffs', {id=id, date_from=date_from, date_to=date_to})
end
-- https://zachestnyibiznesapi.ru/docs/fs-fns
function _M.fs-fns(id)
return _M.get('fs-fns', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/fssp-list
function _M.fssp-list(id, page)
return _M.get('fssp-list', {id=id, page=page})
end
-- https://zachestnyibiznesapi.ru/docs/rating
function _M.rating(id)
return _M.get('rating', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/requisites
function _M.requisites(id)
return _M.get('requisites', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/court-arbitration
function _M.court-arbitration(id, page)
return _M.get('court-arbitration', {id=id, page=page})
end
-- https://zachestnyibiznesapi.ru/docs/court-arbitration-card
function _M.court-arbitration-card(id, case_id)
return _M.get('court-arbitration-card', {id=id, case_id=case_id})
end
-- https://zachestnyibiznesapi.ru/docs/contacts
function _M.contacts(id)
return _M.get('contacts', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/proverki
function _M.proverki(id, page)
return _M.get('proverki', {id=id, page=page})
end
-- https://zachestnyibiznesapi.ru/docs/passports
function _M.passports(passport_series, passport_number)
return _M.get('passports', {passport_series=passport_series, passport_number=passport_number})
end
-- https://zachestnyibiznesapi.ru/docs/rafp
function _M.rafp(id)
return _M.get('rafp', {id=id})
end
-- https://zachestnyibiznesapi.ru/docs/zakupki-top
function _M.zakupki-top(id, year)
return _M.get('zakupki-top', {id=id, year=year})
end
-- https://zachestnyibiznesapi.ru/docs/stats
function _M.stats()
return _M.get('stats')
end
-- https://zachestnyibiznesapi.ru/docs/fns_services/check-fl
function _M.check-fl(inn)
return _M.get('check-fl', {inn = inn})
end
-- https://zachestnyibiznesapi.ru/docs/fns_services/check-ul
function _M.check-ul(inn)
return _M.get('check-ul', {inn = inn})
end
-- https://zachestnyibiznesapi.ru/docs/fns_services/check-ip
function _M.check-ip(inn)
return _M.get('check-ip', {inn = inn})
end
-- https://zachestnyibiznesapi.ru/docs/fns_services/check-legal-address
function _M.check-legal-address(id)
return _M.get('check-legal-address', {id = id})
end
-- https://zachestnyibiznesapi.ru/docs/fns_services/check-factual-address
function _M.check-factual-address(id)
return _M.get('check-factual-address', {id = id})
end
-- https://zachestnyibiznesapi.ru/docs/fns_services/check-head
function _M.check-head(id)
return _M.get('check-head', {id = id})
end
-- https://zachestnyibiznesapi.ru/docs/fns_services/check-founders
function _M.check-founders(id)
return _M.get('check-founders', {id = id})
end
-- https://zachestnyibiznesapi.ru/docs/fns_services/check-status
function _M.check-status(id)
return _M.get('check-status', {id = id})
end
return _M

17
zcb/passports.lua Normal file
View File

@ -0,0 +1,17 @@
local _M = require('zcb.api')
_M.version = 'passports'
-- https://zachestnyibiznesapi.ru/docs/basic_passports_online
function _M.request(lastname, series, firstname, number)
return _M.get('request', {
lastname = lastname,
series = series,
firstname = firstname,
number = number
})
end
return _M