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.}"
rescue SabyVok::AuthError => e
warn "auth failed: #{e.}"
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