Задача

В личном кабинете Интернет-банка клиенту банка должна быть предоставляется возможность подключения к бухгалтерскому решению фирмы 1С, расположенному в «облаке». После подключения клиенту банка становятся доступны:

  • Возможность перехода в приложение 1С без дополнительной аутентификации
  • Автоматический обмен платежными поручениями и выписками банка
  • Отображение в личном кабинете ключевых показателей бизнеса с возможностью перехода на связанные с показателями отчеты в приложении 1С
  • Отображение в личном кабинете списка задач, созданных в приложении 1С

Описанная выше задача может быть разбита на следующие основные сценарии:

Основные сценарии

  • Регистрация нового пользователя
  • Заполнение данных приложения
  • Прозрачная аутентификация пользователя в приложении
  • Отображение данных приложения в личном кабинете Интернет-банка
  • Синхронизация данных

Пример для плагина REST Client на Visual Studio Code

### ИСПОЛЬЗОВАНИЕ API ОБЛАЧНОГО СЕРВИСА ФРЕШ ДЛЯ ИНТЕГРАЦИИ С ЛИЧНЫМ КАБИНЕТОМ БАНКА
# Включает операции:
#  1. Регистрация нового пользователя
#  1.1. Проверка существования пользователя
#  1.2. Регистрация пользователя
#  1.3. Получение идентификатора пользователя
#  1.4. Получение адреса созданного приложения
#  2. Заполнение начальных данных приложения
#  3. Отбражение данных приложения в личном кабинете банка
#  3.1. Получение данных монитора руководителя
#  3.2. Получение даты последнего обновления монитора руководителя
#  3.3. Обновление списка монитора руководителя
#  3.4. Получение списка задач по налогам и отчетности
#  3.5. Получение даты последнего обновления списка задач по налогам и отчетности
#  4. Синхронизация данных между приложениями и банком
#  5. Продление подписки на тариф
#  5.1. Получение списка действующих подписок обслуживаемых абонентов
#  5.2. Добавление новой подписки на тариф
#  5.3. Получение данных организации абонента
#  5.4. Установка данных организации абонентв
#
### Используемые переменные
##    server - адрес сервера сервиса.
##    reg - адрес сервиса регистрации (по умолчанию - a/adm/hs/promo_reg)
##    auth - пользователь обслуживающей организации, которомо разрешена быстрая внешняя регистрация абонентов и управление подписками.
##    login - логин пользователя для регистрации в системе. Он же e-mail для отправки данных входа с паролем.
##            После регистрации можено поменять логин и e-mail в отдельных полях, оба поля уникальны в рамках сервиса.
##    name - наименование регистрируемого пользователя (не логин).
##    app_auth - данные авторизации пользователя обслуживающей организации для доступа к API приложения абонента.
##    base_data - файл данных начального заполнения в формате zip.
###
@server = https://stage.1cfresh.com
@reg = api/reg
@auth = Basic bank 123Qwer
@login = andreev.0@example.com
@name = Andreev
@app_auth = Basic bank.api 123Qwer
@base_data = base_data.zip
   
### 1. Регистрация нового пользователя
### 1.1. Проверка существования пользователя
POST {{server}}/{{reg}}/check_user/
Authorization: {{auth}}
   
{
"login":"{{login}}"
}
   
### 1.2. Регистрация пользователя
##  Используемые параметры:
##    email - адрес электронной почты клиента
##    name - наименование клиента (отображаемое имя, не логин)
##    fast_completion - признак, что нужно сразу начать подготовку приложения
##    tariff - код тарифа
##    validity - срок действия тарифа в днях.
  
POST {{server}}/{{reg}}/sign_up/
Authorization: {{auth}}
   
{
"email":"{{login}}",
"name": "{{name}}",
"fast_completion": true,
"send_notification": true,
"tariff": "4",
"validity": "365"
}
   
  
### 1.3. Получение идентификатора пользователя
##  Используемые параметры:
##    login - логин пользователя в сервисе (он же адрес электронной почты)
POST {{server}}/{{reg}}/get_user_id/
Authorization: {{auth}}
   
{
"login":"{{login}}"
}
   
  
### 1.4. Получение адреса созданного приложения (создание приложения, если оно не создано)
POST {{server}}/{{reg}}/get_app_url/
Authorization: {{auth}}
   
{
"login":"{{login}}",
"send_notification": false
}
  
### 1.5. Отправить оповещение пользователю
POST {{server}}/{{reg}}/send_notification/
Authorization: {{auth}}
   
{
"login":"{{login}}"
}
   
### Заполнение начальных данных используя подсистему "Интеграция объектов областей данных"
##  Используемые переменные:
##    app - вариант приложения (bs - 1С:Бизнес-старт, smtl - БТС)
##    tenant - область данных для проверки - из тела ответа на запрос 1.3 из поля "tenant"
@app = bs
@tenant = 2325
   
### 2.1. Установка начальных настроек интеграции


# @name setupSession
POST {{server}}/a/{{app}}/{{tenant}}/hs/dt/storage/integration/setup
Authorization: {{app_auth}}
IBSession: start
   
### 2.2. Загрузка файла данных и настроек и закрытие сессии
##  Используемые переменные:
##    Location и Cookie заполняются из заголовков Location и Set-Cookie соответственно из ответа на запрос 2.1.
    
PUT {{setupSession.response.headers.Location}}
Authorization: {{app_auth}}
Cookie: {{setupSession.response.headers.Set-Cookie}}
IBSession: finish
 
{
    "type": "bank",
    "name": "ПАО Банк",
    "id": ["044525999"],
    "dbo_url": "https://sample-bank.ru/my/documents",
    "use_notices": false
}
   
### 2.3. Открытие сессии для загрузки файла данных

# @name uploadSession
POST {{server}}/a/{{app}}/{{tenant}}/hs/dt/storage/integration/post
Authorization: {{app_auth}}
IBSession: start
    
### 2.4. Загрузка файла данных и закрытие сессии
##  Используемые переменные:
##    Location и Cookie заполняются из заголовков Location и Set-Cookie соответственно из ответа на запрос 2.3.

# @name uploadResult
PUT {{uploadSession.response.headers.Location}}
Authorization: {{app_auth}}
Cookie: {{uploadSession.response.headers.Set-Cookie}}
IBSession: finish

<< {{base_data}}
    
### 2.5. Открытие сессии для опроса состояния
##  Используемые переменные:
##    job_id - идентификатор задания из тела ответа на запрос 2.4 из поля "result.id"
##  ВНИМАНИЕ! При некоторых настройках прокси сервера редирект 1-го GET-запроса обрабатывается как в браузере.
##           В результате в ответе будет возвращен результат из 2-го GET запроса.

# @name jobSession
GET {{server}}/a/{{app}}/{{tenant}}/hs/dt/storage/jobs/{{uploadResult.response.body.$.result.id}}
Authorization: {{app_auth}}
IBSession: start
    
### 2.6. Опрос состояния (сессия закроется сама при остутствие запросов в течение 20 секунд)
## Используемые переменные:
##   Location и Cookie заполняются из заголовков Location и Set-Cookie соответственно из ответа на запрос 2.5.

# @name jobResult
GET {{jobSession.response.headers.Location}}
Authorization: {{app_auth}}
Cookie: {{jobSession.response.headers.Set-Cookie}}
    
### 3. Отбражение данных приложения в личном кабинете банка
##  Используемые переменные:
##    api_path - путь к API Бухгалтерии
@api_path = hs/api/v1
##  3.1. Получение данных монитора руководителя
   
GET {{server}}/a/{{app}}/{{tenant}}/{{api_path}}/kpi/
Authorization: {{app_auth}}
   
### 3.2. Получение даты последнего обновления монитора руководителя
GET {{server}}/a/{{app}}/{{tenant}}/{{api_path}}/kpi/last_update/
Authorization: {{app_auth}}
   
### 3.3. Обновление списка монитора руководителя
POST {{server}}/a/{{app}}/{{tenant}}/{{api_path}}/kpi/update/
Authorization: {{app_auth}}
   
### 3.4. Получение списка задач по налогам и отчетности
GET {{server}}/a/{{app}}/{{tenant}}/{{api_path}}/tasks/taxes/
Authorization: {{app_auth}}
   
### 3.5. Получение даты последнего обновления списка задач по налогам и отчетности
GET {{server}}/a/{{app}}/{{tenant}}/{{api_path}}/tasks/taxes/last_update/
Authorization: {{app_auth}}
   
### 4. Синхронизация данных
### Описана в документе https://its.1c.ru/db/fresh#content:19956679:1
   
### 5. Продление подписки на тариф
##  Используемые параметры:
##    account - код абонента обслуживающей организации
##    client - код абонента клиента
###
@account = 2
@client = 26
  
###  5.1. Получение списка действующих подписок обслуживаемых абонентов
POST {{server}}/api/
Authorization: {{auth}}
   
{
   "auth":{
      "account":{{account}}
   },
   "general":{
      "type":"ext",
      "method":"account/customer_subscriptions/list"
   },
   "servant":{{account}}
}
   
### 5.2. Добавление новой подписки на тариф
POST {{server}}/api
Authorization: {{auth}}
   
{
   "auth":{
      "account":{{account}}
   },
   "general":{
      "type":"ext",
      "method":"account/customer_subscriptions/create"
   },
   "servant":{{account}},
   "account":{{client}},
   "start":"2018-01-01T00:00:00",
   "completion":"2018-01-31T00:00:00",
   "tariff":"2"
}
   
   
### 5.3. Получение данных организации абонента
   
POST {{server}}/api
Authorization: {{auth}}
   
{
   "auth":{
      "account":{{account}}
   },
   "general":{
      "type":"ext",
      "method":"account/customers/attached_info"
   },
   "id":{{account}},
   "account":{{client}}
}
   
### 5.4 Установка данных организации абонента
POST {{server}}/api
Authorization: {{auth}}
   
{
   "auth":{
      "account":{{account}}
   },
   "general":{
      "type":"ext",
      "method":"account/customers/update_attached_info"
   },
   "id":{{account}},
   "account":{{client}},
   "properties": [
     {
       "key": "ИННАбонента",
       "value": "7725895602"
     },
     {
       "key": "КПП",
       "value": "772501001"
     },
     {
       "key": "Город",
       "value": "Москва"
     },
     {
       "key": "КодГорода",
       "value": "495"
     },
     {
       "key": "Телефон",
       "value": "84957725010"
     },
     {
       "key": "ЭлектроннаяПочта",
       "value": "{{login}}"
     }
   ],
   "fields":[]
}