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}"
endSabyVok.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 потокобезопасны.
# 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,creditworthinessowners,affiliate,dirs_history,founders_historylicense_stat,license_data,inspections_stat,inspections_datastatistic_courts,courts,executive_lists,bankruptcy,feasubscriptions_events,subscriptions_contractors,subscribe,unsubscribecontractor_history,contacts_official,branchesexcerpts_list,excerpts_last,search,client_stattrademarks,vehicle,vehicle_stat,pledges
Бинарные:
logo,bankruptcy_file,events_filesro_file,excerpts_file,trademarks_imagepdf_business_report,pdf_due_diligence_report,pdf_financial_report,pdf_signed_excerptxml_egrul_excerpt,xml_reporting_excerptpledges_file,tendersдокументы
- Нужен хотя бы один из параметров:
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