Интеграция с информационной системой

Структура данных API-интерфейса

Структура данных API-интерфейса

Для обмена данными программный интерфейс СБИС API использует формат JSON-RPC. Обмена с online.sbis.ru происходит с помощью HTTP-запросов/ответов.

  • POST — запросы на выполнение команд;
  • GET — запросы для получения содержимого указанного ресурса — данных вложений или электронных подписей (ЭП).

Заголовок запроса

В заголовке запроса обязательно указывается:

  • адрес сервера:
  • идентификатор сессии «X-SBISSessionID»;
  • кодировка символов в поле «Content-Type»:
    • «utf-8»: application/json-rpc;charset=utf-8 — рекомендуемая кодировка;
    • либо «windows-1251»: application/json-rpc;charset=windows-1251;
  • название и версия информационной системы в заголовке «User-Agent».

Объект запроса

Объект запроса содержит:

  • значение и версия спецификации JSON-RPC — «jsonrpc»:«2.0»;
  • параметр «method» с названием команды;
  • параметр «params» с объектом параметров команды;
  • параметр «id»с целочисленным значением.

Объект ответа

В ответ на запрос с сервера возвращается JSON-структура:

  • значение и версия спецификации JSON-RPC — «jsonrpc»:«2.0»;
  • параметр «id» со значением равным значению в объекте запроса;
  • значение объекта «result», содержащее ответ на команду.

Если произошла ошибка, в ответе на запрос появится значение «error».

Объект ошибки

В случае ошибки в объекте ответа в поле «error» будут:

  • «code» — код ошибки;
  • «message» — текстовое сообщение об ошибке;
  • «details» — подробное описанием ошибки;
  • «data» — тип ошибки.

Пример POST-запроса

POST https://online.sbis.ru/service/?srv=1 HTTP/1.1
Content-Type: application/json-rpc;charset=utf-8
Accept: */*
User-Agent: YourSystemName/0.1.0
X-SBISSessionID: 0000ea78-0000ea79-00ba-d3b85272bc0c4842
{
  "jsonrpc": "2.0",
  "method": "СБИС.ПрочитатьДокумент",
  "params": {
    "Документ": {
      "Идентификатор": "e1756445-f1be-4562-b5cf-4549968b5f4f"
    }
  },
  "id": 0
}

Пример ответа(упрощенный для наглядности)

{
  "jsonrpc": "2.0",
  "result": {
    ...
  }
}

Пример GET-запроса на получение содержимого вложения

GET https://online.sbis.ru/service/?method=%D0%92%D0%B5%D1%80%D1%81%D0%B8%D1%8F%D0%92%D0%BD%D0%B5%D1%88%D0%BD%D0%B5%D0%B3%D0%BE%D0%94%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0.%D0%A1%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D1%82%D1%8C%D0%9E%D0%B4%D0%B8%D0%BD%D0%A4%D0%B0%D0%B9%D0%BB&params=eyLQmNC00J4iOjMyMX0=&id=0 HTTP/1.1
Content-Type: application/json-rpc;charset=windows-1251
Accept: */*
X-SBISSessionID: 0000ea78-0000ea79-00ce-dc4d2645fe204752

Пример ответа

HTTP/1.1 200 OK
Content-Type: application/octet-stream; charset=windows-1251
Content-Length: 1555
Content-Range: bytes 0-1554/1555
X-SBISSessionID: 0000ea78-0000ea79-00ce-dc4d2645fe204752
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Accept, Content-type
Content-Disposition: attachment; filename="ON_SFAKT.XML"
Cache-Control: must-revalidate, max-age=0
<?xml version="1.0" encoding="WINDOWS-1251"?>
 <Файл ВерсПрог="0.1 Beta" ВерсФорм="5.01" ИдФайл="ON_SFAKT_9999999998000000001_9999999998000000001_3333333330000000001_20120823_251a931a-0ce4-4ae6-9d5c-7c5e44cfd7d9">
     <Документ КНД="1115101">
         <Подписант ПрПодп="1">
             <ФИО Имя="Электронных" Отчество="Документов" Фамилия="Отправитель"/>
         </Подписант>
             <СвСчФакт ДатаПРС="00.00.0000" ДатаСЧ="18.01.2011" НомерПРС=" " НомерСЧ="00000013">
                 <СведПокуп>
                     <РегСвед>
                         <СведЮЛ ИННЮЛ="9999999998" КПП="000000001" НаимОрг="ООО Получатель"/>
                     </РегСвед>
                        <АдресСвед>
                            <АдрПокупРФ Город="385002" Дом="ул.Адмирала Грейга" Индекс="" КодРегион="" Корпус="2" НаселПункт="Санкт-Петербург г" Район="Россия" Улица="г.Кронштадт"/>
                        </АдресСвед>
                </СведПокуп>
                <СведПрод>
                    <РегСвед>
                        <СведЮЛ ИННЮЛ="3333333330" КПП="000000001" НаимОрг="ООО Отправитель"/>
                    </РегСвед>
                    <АдресСвед>
                        <АдрПокупРФ Город="Кронштадт г" Дом="1" Индекс="197762" Кварт=" " КодРегион="Санкт-Петербург г" Корпус=" " НаселПункт=" " Район=" " Улица="Арсенальный пер"/>
                    </АдресСвед>
                </СведПрод>
            </СвСчФакт>
            <ТаблСчФакт ОКВ_СФ="810" СтТРУУчНалВс="708.00" СумНДСВс="108.00">
                <СведТРУ ЕдИзм_ТРУ="шт" КодПроисх=" " КолТРУ="12.00000" НаимТРУ=""Все о жизни" электронная книга" НалСтав="18.00" НомерТД=" " ОКЕИ_ТРУ="796" СтТРУБезНДС="600.00" СтТРУУчНал="708.00" СтрПроисх=" " СумАкц="0.00" СумНДС="108.00" ЦенаТРУ="0.00"/>
            </ТаблСчФакт>
    </Документ>
 </Файл>

Пример ошибки

{
  "jsonrpc": "2.0",
  "error": {
    "code": -32000,
    "message": "Сервис оператора временно недоступен.",
    "details": "Ошибка определения АЯ: Сервис http://operator-online.sbis.ru/data/service/ временно недоступен. Повторите попытку позже.",
    "type": "error",
    "data": {
      "classid": "{00000000-0000-0000-0000-1aa000050000}",
      "addinfo": null
    }
  },
  "id": 0
}