Задача
В личном кабинете Интернет-банка клиенту банка должна быть предоставляется возможность подключения к бухгалтерскому решению фирмы 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":[]
}