BACKEND
Получение и обновление токенов
На стороне бэкэнда обеспечьте надежную обработку токенов авторизации, включая своевременное обновление access-токена и refresh-токена. Токены периодически истекают, и важно поддерживать актуальность сеанса пользователя.
Подробнее о работе access-токена и refresh-токена
Генерация и передача идентификатора пользователя
Для идентификации пользователя на сервере партнера организуйте генерацию уникального идентификатора пользователя (userID для МП, sessionId для Web) и его передачу на сторону приложения. Этот идентификатор создается вами и используется в коммуникациях между SDK -> ваш backend для идентификации пользователя и нахождения токена для последующей передачи на сервер ЕЛК (Единый личный кабинет).
Правила формирования userID/sessionId:
- уникален для каждого пользователя;
- генерируется и хранится на стороне партнера;
- передается при инициализации SDK.
Прокси-обработка запросов
Настройте обработку запросов, поступающих от SDK, как прокси-сервер.
Последовательность действий:
-
Получение запроса от SDK. Примите HTTP-запросы от фронтальной стороны.
-
Передача запроса на сервер ЕЛК. Преобразуйте полученный запрос в нужный формат и отправьте его на сервер ЕЛК.
-
Обработка ответа от ЕЛК. Получите ответ от нашего сервера и верните его обратно в SDK
Если ответ требует дополнительной обработки (например, изменение имени или аватара пользователя), воспользуйтесь рекомендациями из специального раздела (Изменение аватара и имени пользователя)
Рассмотрим простые примеры того, как обрабатывать запросы от SDK и передавать их далее на сервер ЕЛК, а затем возвращать обработанные ответы в SDK.
Пример обработки запроса и ответа по виджетам ЕЛК
SDK отправляет на ваш сервер (url переданный в partnerProfileUrl при инициализации SDK) следующий запрос:
| # | Имя | Тип | Обязательный | Описание | Пример |
|---|---|---|---|---|---|
| 1 | Authorization | Заголовок | Да | Токен сессии. К значению userID/sessionId (полученному при инициализации SDK) в начале добавляется «Bearer ». | Bearer DC3641EC-A0C1-F61A-B2DE-A331C0B2E20F |
| 2 | [Ключ от партнера] | Заголовок | Нет | Один или несколько ключей и их значения, полученные от партнера при инициализации в параметре headersELK. | first: oneUser-Agent: Ktor client |
| 3 | Accept | Заголовок | Да | Ожидаемый тип ответа. | application/json |
| 4 | Content-Type | Заголовок | Да | Тип передаваемых данных. | application/json |
| Параметр | Тип | Обязательный | Описание | Пример |
|---|---|---|---|---|
| url | String | Да | Адрес, который партнер должен использовать для запроса данных на сервер ЕЛК. | https://oauth-ift.sber.ru/api/v1/userdata?infoSource=userInfo&widgetName=listDataDefault |
Пример полного тела запроса (JSON):
{
"url": "https://oauth-ift.sber.ru/api/v1/userdata?infoSource=[Тип ресурсной системы]&widgetName=[Название шаблона]"
}
{
"url": "https://oauth.sber.ru/api/v1/userdata?infoSource=[Тип ресурсной системы]&widgetName=[Название шаблона]"
}
Процесс инициализации вызова ЕЛК
-
Предварительная проверка сервером партнера
- Перед инициализацией вызова сервера ЕЛК, сервер партнера проверяет активность access-токена пользователя.
- При необходимости сервер партнера обновляет его ("подогрев").
-
Условие: Отсутствие токенов
- Если сервер партнера не находит у себя ни активного access-токена, ни refresh-токена пользователя,
- То сервер партнера должен вернуть в SDK ошибку 401 Unauthorized.
Формат ответа об ошибке:
HTTP/1.1 401 Unauthorized
{
"error": "unauthorized_client"
}
- Запрос данных для виджетов ЕЛК
- При успешной проверке токенов сервер партнера направляет запрос на сервер ЕЛК.
- Адрес запроса получен в запросе от SDK
- Тип запроса GET
Параметры запроса
| № | Имя (Name) | Расположение (In) | Описание | Обязательный |
|---|---|---|---|---|
| 1 | infoSource | query | Список источников данных. Получен от SDK. | Да |
| 2 | widgetName | query | Наименование шаблона. Получен от SDK. | Да |
| 3 | x-introspect-rquid | header | Уникальный идентификатор сообщения (maxLength=32, pattern=([0-9][a-f][A-F]){32}). Необходим для журналирования. Для генерации можно использовать UUID/GUID, удалив разделители «-». | Да |
| 4 | Authorization | header | Полученный ранее access-токен. Должен иметь префикс Bearer. Пример: Bearer DC3641EC-A0C1-F61A-B2DE-A331C0B2E20F. ` | Да |
Пример запроса (cURL):
curl --request GET \
'https://oauth-ift.sber.ru/api/v1/userdata?infoSource=[Тип источника данных]&widgetName=[Название шаблона]' \
--header 'x-Introspect-RqUID: 55286baf3d4548da8d2252b2a8337f20' \
--header 'Authorization: Bearer 4cf09bfb-ce00-4847-9f24-28377692baf7'
curl --request GET \
'https://oauth.sber.ru/api/v1/userdata?infoSource=[Тип источника данных]&widgetName=[Название шаблона]' \
--header 'x-Introspect-RqUID: 55286baf3d4548da8d2252b2a8337f20' \
--header 'Authorization: Bearer 4cf09bfb-ce00-4847-9f24-28377692baf7'
Сервер партнера без дополнительной обработки на своей стороне возвращает ответ в SDK.
Пример ответов
{
"title": "Иван К",
"icon": "https://stat.online.sberbank.ru/SBERBANKID/icons/CODE16206.png",
"iconSize": "40",
"badge": "https://id.sber.ru/profile/external_partners/elk_assets/badge-gradient.png",
"initials": "ИК",
"value": "+7 900 000 00 00",
"click": {
"browserUrl": "https://id.sber.ru/profile/?utm_source=partner_profile&utm_medium=app_samokat&utm_campaign=button_nmt"
}
}
| Параметр (путь) | Описание | Обязательность |
|---|---|---|
title | Имя пользователя | Да |
icon | Ссылка на аватарку (пока не передается) | Нет |
iconSize | Размер аватарки | Нет |
badge | Ссылка на иконку SberID | Да |
initials | Инициалы пользователя | Нет |
value | НМТ | Нет |
click | Информация о переходе при нажатии на виджет | Нет |
.browserUrl | Открытие ссылки в браузере устройства | Нет |
.deepLinkUrl | Открытие по диплинку | Нет |
.nativeUrl | Открытие нативной шторки | Нет |
.sso | Бесшовный переход через app_token | Да |
..webLink | Ссылка на поверхность партнера | Да |
..openIn | Где открывать: browser или webview | Нет |
..clientId | ID партнера для перехода | Нет |
{
"title": "Бонусы Спасибо",
"value": "30 000",
"titleIcon": "https://id.sber.ru/profile/external_partners/elk_assets/spasibo-gradient.png",
"click": {
"browserUrl": "samokat://?action=sber_spasibo"
}
}
| Параметр (путь) | Описание | Обязательность |
|---|---|---|
title | Текст в баннере (наименование виджета или подписи) | Нет |
titleicon | Иконка виджета | Да |
description | Статус подписи (если активна) | Нет |
value | Значение бонусного баланса | Нет |
click | Способ открытия при клике (ссылка, диплинк, нативная шторка или SSO) | Нет |
.browserUrl | Открытие ссылки в браузере устройства | Нет |
.deepplinkUrl | Открытие по диплинку | Нет |
.nativeUrl | Открытие нативной шторки | Нет |
.sso | Бесшовный переход через app_token | Да |
..webLink | Ссылка на поверхность партнера (для SSO) | Да |
..openIn | Где открывать: browser или webview | Нет |
..clientId | ID партнера для перехода | Нет |
{
"title": "СберПрайм+",
"titleIcon": "https://id.sber.ru/profile/external_partners/elk_assets/prime-gradient.png",
"description": "Активна",
"click": {
"sso": {
"webLink": "https://www.sberbank.com/sberprime/me?utm_source=elk_app&utm_medium=samokat&utm_campaign=1",
"openIn": "browser",
"clientId": "6db1c92c-ed87-4939-bc32-1f155b58e6c4"
}
}
}
| Параметр (путь) | Описание | Обязательность |
|---|---|---|
title | Текст баннера (наименование виджета или название подписки) | Да |
titleicon | Иконка виджета | Да |
description | Статус виджета: Активна / Подключить / Не активна / Ожидает оплаты (оранжевый) | Да |
click | Способ открытия при клике | Нет |
.sso | Бесшовный переход через app_token | Да |
..webLink | Ссылка на поверхность партнера (для SSO) | Да |
..openIn | Где открывать: browser или webview | Не т |
..clientId | ID партнера для перехода | Нет |
Таким образом, выполнение перечисленных шагов позволит эффективно организовать back-end взаимодействие с сервисом ЕЛК и минимизировать возможные проблемы интеграции.