An open API service indexing awesome lists of open source software.

https://github.com/dementevvv/saby_vok

Легкий Ruby-клиент для API Всё о компаниях (СБИС)
https://github.com/dementevvv/saby_vok

api-client business-data inn ogrn saby sbis

Last synced: 6 months ago
JSON representation

Легкий Ruby-клиент для API Всё о компаниях (СБИС)

Awesome Lists containing this project

README

          

# Saby Vok Ruby Client

**saby_vok** - Ruby-клиент для API «Всё о компаниях» (СБИС). Библиотека сама выполняет сервисную авторизацию, автоматически обновляет токены при 401/403, проставляет заголовки `X-SBISAccessToken` и `X-SBISSessionId`, а также умеет работать с JSON и бинарными ответами.

## Требования

- Ruby >= 3.1
- Действующие `client_id`, `client_secret`, `secret_key` в личном кабинете СБИС

## Установка

Через Bundler:

```ruby
gem "saby_vok"
```

или командой:

```bash
bundle add saby_vok
```

Без Bundler:

```bash
gem install saby_vok
```

После установки подключите библиотеку:

```ruby
require "saby_vok"
```

## Быстрый старт

```ruby
require "saby_vok"

client = SabyVok::Client.new(
ENV.fetch("SABY_CLIENT_ID"),
ENV.fetch("SABY_CLIENT_SECRET"),
ENV.fetch("SABY_SECRET_KEY")
)

companies = client.req(inn: "7605016030")
puts companies.first["company_name"]
```

Бинарные ответы сохраняйте как есть:

```ruby
File.binwrite("logo.png", client.logo(inn: "7605016030"))
```

## Обработка ошибок

```ruby
begin
client.req
rescue SabyVok::ValidationError => e
warn "wrong params: #{e.message}"
rescue SabyVok::AuthError => e
warn "auth failed: #{e.message}"
rescue SabyVok::HttpError => e
warn "http #{e.status}: #{e.body}"
end
```

## Конфигурация и синглтон

```ruby
SabyVok.configure do |config|
config.client_id = ENV.fetch("SABY_CLIENT_ID")
config.client_secret = ENV.fetch("SABY_CLIENT_SECRET")
config.secret_key = ENV.fetch("SABY_SECRET_KEY")
config.host = "https://api.sbis.ru/vok/" # опционально
config.timeout = 10 # секунды
config.retries = 2
end

client = SabyVok.client
```

Нужно обновить настройки - вызовите `SabyVok.reset_client!`, либо создавайте отдельные экземпляры `SabyVok::Client.new(...)` для разных проектов/хостов. Внутри используются мьютексы (`Mutex` и `Mutex_m`), поэтому загрузка токенов и доступ к `SabyVok.client` потокобезопасны.

## Rails / Rack проекты

```ruby
# Gemfile
gem "saby_vok"

# config/initializers/saby_vok.rb
SabyVok.configure do |config|
creds = Rails.application.credentials.fetch(:saby_vok)
config.client_id = creds.fetch(:client_id)
config.client_secret = creds.fetch(:client_secret)
config.secret_key = creds.fetch(:secret_key)
end

# anywhere in app
SabyVok.client.req(inn: params[:inn])
```

## Поддерживаемые методы

JSON:

- `req`, `registration_information`, `tenders_info`, `tenders(limit:, page:)`
- `finance`, `cost_business`, `reliability`, `reliability_blocks`, `market_position`, `creditworthiness`
- `owners`, `affiliate`, `dirs_history`, `founders_history`
- `license_stat`, `license_data`, `inspections_stat`, `inspections_data`
- `statistic_courts`, `courts`, `executive_lists`, `bankruptcy`, `fea`
- `subscriptions_events`, `subscriptions_contractors`, `subscribe`, `unsubscribe`
- `contractor_history`, `contacts_official`, `branches`
- `excerpts_list`, `excerpts_last`, `search`, `client_stat`
- `trademarks`, `vehicle`, `vehicle_stat`, `pledges`

Бинарные:

- `logo`, `bankruptcy_file`, `events_file`
- `sro_file`, `excerpts_file`, `trademarks_image`
- `pdf_business_report`, `pdf_due_diligence_report`, `pdf_financial_report`, `pdf_signed_excerpt`
- `xml_egrul_excerpt`, `xml_reporting_excerpt`
- `pledges_file`, `tenders` документы

## Ограничения API

- Нужен хотя бы один из параметров: `inn` или `ogrn`.
- `kpp` разрешён только вместе с `inn`.
- Массовые запросы: до 20 значений одного типа (ИНН или ОГРН). Пары ИНН+КПП указывайте перед одиночными ИНН.
- Пагинация: `limit > 0`, `page >= 0`.

## Демо-окружение

- Базовый URL демо: `https://api.sbis.ru/vok-demo/`.
- Демо-ИНН: `7605016030`, `7736050003`, `7707049388`, `7814593627`, `7827004484`, `772871281410`, `6382082839`, `7708503727`, `7709464710`.
- В демо отключены методы, возвращающие файлы.

## Разработка

```bash
bundle install
rake test
rubocop
```

Пулы и багрепорты приветствуются в [issues](https://github.com/DementevVV/saby_vok/issues).

## Лицензия

MIT - см. `LICENSE.txt`.

## Автор

Vitalii Dementev - [@DementevVV](https://github.com/DementevVV)