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