Project

saby_vok

0.0
No release in over 3 years
Thin Ruby wrapper around the Saby Vok API with easy auth and binary/JSON helpers.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Runtime

 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:

gem "saby_vok"

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

bundle add saby_vok

Без Bundler:

gem install saby_vok

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

require "saby_vok"

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

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"]

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

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

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

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

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

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 проекты

# 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.
  • В демо отключены методы, возвращающие файлы.

Разработка

bundle install
rake test
rubocop

Пулы и багрепорты приветствуются в issues.

Лицензия

MIT - см. LICENSE.txt.

Автор

Vitalii Dementev - @DementevVV