Схема отправки данных

  1. Отправитель формирует пакет данных и отправляет файл данных для обработки
  2. Отправитель ожидает завершения обработки данных

Описание процесса отправки данных

Отправка данных производится из внешнего сервиса (отправителя) в 2 операции:

  1. Непосредственно отправка данных запросом POST {{baseURL}}/integration/post
  2. Получение информации о состоянии загрузки данных запросом GET {{baseURL}}/jobs/{id}

Данные отправляются в виде zip-архива. В составе архива обязательно должен содержаться файл manifest.json, описывающий файлы данных в этом архиве.

Структура файла manifest.json:

  • upload - список файлов данных
    • file – имя файла (идентификатор данных)
    • version – версия данных
    • handler - идентификатор обработчика данных

manifest.json

{
  "upload": [
    {
      "file": "base.json",
      "handler": "example-base",
      "version": "83B92336"
    },
    {
      "file": "sync-1.json",
      "handler": "example-sync",
      "version": "51B4E081"
    },
    {
      "file": "sync-2.json",
      "handler": "example-sync",
      "version": "EB28A449"
    }
  ]
}

Примеры файлов данных:

Файл base.json

{
  "organization": {
    "name": "ООО Ромашка",
    "inn": "7725895602",
    "kpp": "772501001",
    "address": "Москва г, Вавилова ул, дом № 1"
  },
  "bank_accounts": [
    {
      "bank": "044525555",
      "account": "40802810900000003155"
    }
  ]
}

Файл sync-1.json

{
  "date": "2018-02-15T10:25:22",
  "number": "1",
  "amount": 100000,
  "account": "40802810900000003155",
  "description": "Оплата по первому счету",
  "recipient_id": "123456789012",
  "recipient_name": "ИП Сергиенко Сергей",
  "recipient_account": "98765432109876543210",
  "recipient_bank": "044525555"
}

Файл sync-2.json

{
  "date": "2018-02-14T10:00:00",
  "number": "2",
  "amount": 50000,
  "account": "40802810900000003155",
  "description": "Оплата по второму счету",
  "recipient_id": "123456789012",
  "recipient_name": "ИП Сергиенко Сергей",
  "recipient_account": "98765432109876543210",
  "recipient_bank": "044525555"
}

После отправки данных в приложении планируется задание их обработки и в ответ на отправку файлов возвращается информация о запланированном задании.

Поля ответа:

  • result - результат
    • storage - идентификатор объектного хранилища (в данном случае - jobs)
    • id - идентификатор объекта хранилища (в данном случае - идентификатор задания)

Пример ответа на отправленные данные

{
  "general": {
    "response": 10200,
    "error": false,
    "message": ""
  },
  "result": {
    "storage": "jobs",
    "id": "47e7efd6-ddb6-11e7-819b-0050568925e0"
  }
}

По идентификатору задания выполняется дальнейшее отслеживание подготовки данных с помощью запроса GET /jobs/{id}

Пока файлы не обработаны будет возвращаться ответ:

Пример ответа, пока файлы данных не обработаны

{
  "general": {
    "response": 10202,
    "error": false,
    "message": ""
  }
}

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

Пример подтверждения обработки данных

{
  "general": {
    "response": 10200,
    "error": false,
    "message": ""
  },
  "result": [
    {
      "file": "base.json",
      "version": "83B92336",
      "handler": "example-base",
      "response": 10200,
      "error": false,
      "message": ""
    },
    {
      "file": "sync-1.json",
      "version": "51B4E081",
      "handler": "example-sync",
      "response": 10200,
      "error": false,
      "message": ""
    },
    {
      "file": "sync-2.json",
      "version": "EB28A449",
      "handler": "example-sync",
      "response": 10200,
      "error": false,
      "message": ""
    }
  ]
}

Если в процессе возникнут ошибки, то после их устранения будет необходимо повторить отправку.

Об ошибках будет сообщено в подтверждении обработки файлов данных.

После обработки данных в приложении, на основе данных отправителя будут созданы соответствующие документы.

Пример использования

Процесс добавления данных в приложение состоит из нескольких последовательных запросов, адреса которых получаются из ответов предыдущих запросов:

  1. Открытие сессии отправки данных
  2. Отправка данных 
  3. Открытие сессии ожидания результата
  4. Ожидание результата


Открытие сессии отправки данных

Запрос

POST https://stage.1cfresh.com/a/bs/10435/hs/dt/storage/integration/post
Authorization: Basic ***
IBSession: start

Ответ

200
Content-Length: 0
Accept-Ranges: bytes
Location: https://stage.1cfresh.com:443/a/bs/10435/hs/dt/upload/33188784deb957240da13d737d41c7e4486c0e4616837c16b0c5dcf97cd8a4d8
Set-Cookie: ibsession=1bb59853-87ce-4b06-a293-b5b7961da9ce;Path=/a/bs/10435/;Version=1

Отправка данных

Запрос

PUT https://stage.1cfresh.com/a/bs/10435/hs/dt/upload/33188784deb957240da13d737d41c7e4486c0e4616837c16b0c5dcf97cd8a4d8/
Authorization: Basic ***
Cookie: ibsession=1bb59853-87ce-4b06-a293-b5b7961da9ce;Path=/a/bs/10435/;Version=1
IBSession: finish
50 4B 03 04 14 00 00 08 00 00 90 79 38 4E 9D E2 94 E7 7B 02 00 00 7B 02 00 00 0E 00 00 00 ...

Ответ

201
Content-Type: application/json; charset=UTF-8
Content-Length: 156

{
"general": {
"response": 10200,
"error": false,
"message": ""
},
"result": {
"storage": "jobs",
"id": "52307619-1fd1-11e9-b87e-0050568908e4"
}
}
Открытие сеанса ожидания результата

Запрос

GET https://stage.1cfresh.com/a/bs/10435/hs/dt/storage/jobs/52307619-1fd1-11e9-b87e-0050568908e4
Authorization: Basic ***
IBSession: start

Ответ

302
Content-Length: 0
Accept-Ranges: bytes
Location: https://stage.1cfresh.com:443/a/bs/10435/hs/dt/download/33340f613a2fb437109c58497633dc1784424750f6e22b30d3439b44542af57b
Set-Cookie: ibsession=9c9ccb9d-0d83-4d00-a45d-c912047488d2;Path=/a/bs/10435/;Version=1


Ожидание результата

Запрос

GET https://stage.1cfresh.com/a/bs/10435/hs/dt/download/33340f613a2fb437109c58497633dc1784424750f6e22b30d3439b44542af57b/
Authorization: Basic ***
Cookie: ibsession=9c9ccb9d-0d83-4d00-a45d-c912047488d2;Path=/a/bs/10435/;Version=1

Ответ - результат еще не получен

200
Content-Type: application/octet-stream
Content-Length: 73
Content-Disposition: attachment; filename="52307619-1fd1-11e9-b87e-0050568908e4.json"

{
"general": {
"response": 10202,
"error": false,
"message": ""
}
}

Запрос

GET https://stage.1cfresh.com/a/bs/10435/hs/dt/download/33340f613a2fb437109c58497633dc1784424750f6e22b30d3439b44542af57b/
Authorization: Basic ***
Cookie: ibsession=9c9ccb9d-0d83-4d00-a45d-c912047488d2;Path=/a/bs/10435/;Version=1

Ответ - результат получен

200
Content-Type: application/octet-stream
Content-Length: 706
Content-Disposition: attachment; filename="52307619-1fd1-11e9-b87e-0050568908e4.json"

{
"general": {
"response": 10200,
"error": false,
"message": ""
},
"result": [
{
"file": "base_data.json",
"version": "",
"handler": "base_data",
"response": 10200,
"error": false,
"message": ""
},
{
"file": "kl_to_1c.txt",
"version": "",
"handler": "initial_balances_bank_account_statement",
"response": 10400,
"error": true,
"message": "Начальные остатки должны быть указаны на начало года."
},
{
"file": "kl_to_1c.txt",
"version": "",
"handler": "bank_account_statement_1c_txt",
"response": 10240,
"error": true,
"message": "Не удалось провести: \"Списание с расчетного счета\"!"
}
]
}