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 Всё о компаниях (СБИС)
- Host: GitHub
- URL: https://github.com/dementevvv/saby_vok
- Owner: DementevVV
- License: mit
- Created: 2025-11-18T22:24:22.000Z (7 months ago)
- Default Branch: master
- Last Pushed: 2025-11-18T22:35:05.000Z (7 months ago)
- Last Synced: 2025-11-19T23:13:39.287Z (7 months ago)
- Topics: api-client, business-data, inn, ogrn, saby, sbis
- Language: Ruby
- Homepage: https://dementevvv.github.io/saby_vok/
- Size: 12.7 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
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)