Для защиты от несанкционированного доступа к API перед подключением мы проверяем:
- наличие у приложения действующей подписки, которая инициирует вызов;
- сессию токена;
- запрос и ответ на соответствие схемам API.
Чтобы подключить API:
- Получите ClientId и ClientSecret для смартапа.
- Добавьте сценарий получения
access_token
в сервис для вызова API. - Добавьте
access_token
в сервис для вызова SmartPush API.
Шаг 1. Получите ClientId и ClientSecret
Запрос доступа
Чтобы получить ClientId и ClientSecret:
- Перейдите в Studio в личное пространство и нажмите кнопку Создать проект.
- Нажмите на проект SmartService и выберите SmartPush.
- Напишите обоснование, для чего вам доступ к сервису и нажмите кнопку Отправить на модерацию. Подробнее о заполнении заявки читайте в разделе Проект для SmartServices.
Когда доступы появятся, вы сможете использовать сервисы. Информация о статусе будет доступна в настройке проекта в карточке Доступы.
Генерация secret
После пройденной модерации в карточке с доступами отобразится раздел со следующими настройками:
- client_id — значение отображается всегда;
- scope — отображается список сервисов, к которым открыт доступ, например, SmartPush, SaluteSpeech;
- secret — отображается после нажатия кнопки Получить Client Secret.
Подробнее о доступах читайте в разделе Получение доступов к SmartPush. Чтобы получить ClientSecret, нажмите кнопку Получить Client Secret. Скопируйте значения и используйте их для дальнейшей работы с API SmartServices.
Шаг 2. Добавьте access_token в сервис API
На этом шаге необходимо добавить сценарий получения access_token
в сервис вызова API.
Формат запроса
Параметры запроса
Поле | Описание |
---|---|
Обязательное | Авторизационные данные. Значения clientId и clientSecret кодируются в Base 64 и разделяются двоеточием: |
Обязательное | Уникальный идентификатор запроса. Формируется по паттерну
|
Обязательное | Значение сервиса — |
curl --location --request POST 'https://ngw.devices.sberbank.ru:9443/api/v2/oauth' \
--header 'Authorization: Basic
ZTU2MjM2MjctYmI4Yy00MTJjLTk0Yjct232hNjk5OGU4ZWYzOjg4N2QxNWEyLWNiNGYtNDk5OC05NTkxLTViMjZkNjJkMzc1MQ==' \
--header 'RqUID: 6f0b1291-c7f3-43c6-bb2e-9f3efb2dc98e' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'scope=SMART_PUSH'
Пример запроса из SmartApp Framework
var response = $http.query(tokenUrl, {
method: "POST",
headers: {
RqUID: reqId,
"Content-Type": "application/x-www-form-urlencoded",
Authorization: "Basic " + auth,
},
form: {
scope: "SMART_PUSH",
},
dataType: "text",
});
Формат ответа
Поле | Описание |
---|---|
Обязательное | Сгенерированный токен |
Обязательное | Время действия токена в секундах |
{
"access_token": "eyJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwiYWxnIjoiUVAtMjU2In0",
"expires_at": 1617814516729
}
Пример ответа в случае ошибки 400
{
"code": "SCOPE_DATA_FORMAT_INVALID",
"message": "%s data format invalid"
}
Коды ошибок
Код | Описание |
---|---|
| Bad Request. Неправильный или некорректный запрос |
| Unauthorized. Не авторизован |
| Internal Server Error. Внутренняя ошибка сервера |
Шаг 3. Добавьте access_token для вызова SmartPush
На этом шаге необходимо добавить access_token
в сервис для вызова SmartPush.
Формат запроса
Параметры запроса
Поле | Описание |
---|---|
Обязательное | Авторизационные данные. Необходимо передать access_token в формате: |
Обязательное | Уникальный идентификатор запроса. Формируется по паттерну
|
Обязательное | Тело запроса |
Пример запроса
curl --location --request POST 'https://ngw.devices.sberbank.ru:9443/api/v2/smartpush/apprequest' \
--header 'Authorization: Bearer
eyJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.DCXAAnwXjmRleOrIJcXDWbQwsP5UGSptcY3x5XXRkYZm6x3QkDQBL63DKQZzwrwmtuFbKajq6ULHuQhsmGax-l_R6AhRkr7pWzJi1jpzCenq9PAN2UjF0BX_IiDRgmEExH6_2OtHaJ_7KbudukIOLEgxD9l8WcXFY992dgqLL6eK2nnnUvyfmr4ITc9PWuAFsMIO6jweNFw0e9vRYEDkAbnv9EGR-w9CGwfBsHNWZwZlo7fyu07fkSfmqmGdBvU4344344luNNrHwktSGOzNhpLhu0-0A3KI950vmp_37QY8isDi3epGU3HShdrBZkk70fdXxBKQA.MV2IksoyxTV_c-qm6hSXaQ.LUT4JqOzKqmFOR07-Asq7Fhqj_eYSTXcsJAK-JchmM1QUqhPLBXsUyXXh6ZcjsnN7Q0QXzuBlSjaBWekgWANDirI6HP_MsEM4FxfJAOh73aowC700cEQPPYAxzPYG0d4bOqsZh8Ss57lJB2VM7M6Y2FcG2hb5Q0i2zPskqSWxXejuCyr2uIlY7Fe4bu4NUqtCaKJVwqriVWLfbA0OzZyA0osDc42Ba0u1adFAdaZDCE.IlKOixP8hSUimEI2pdP118Tx0StZjcLdbSauE5R0YAA'
\
--header 'RqUID: 6f0b1291-c7f3-43c6-bb2e-9f3efb2dc98e' \
--header 'Content-Type: application/json' \
--data-raw '{
"requestPayload": {
}'
Формат ответа
Параметры ответа
Поле | Описание |
---|---|
| Идентификатор запроса, переданный клиентом |
| Идентификатор ответа сервера |
| Время формирования ответа сервиса |
| Тело ответа |
Пример ответа
{
"requestId": "a5ac95c6-8997-4326-abe0-159ee39dd041",
"responseId": "7e0ee6d2-4d0f-49fd-ae34-f5717a36c05e",
"timestamp": "2021-04-07T16:08:18.092759Z",
"payload": {}
}
Пример ответа в случае ошибки
{
"requestId": "47a59d87-d30e-4737-8dde-6b6241f374c9",
"responseId": "d21b38c2-7438-4dea-b4b1-0c518e4b00c7",
"timestamp": "2021-04-07T16:54:51.128095Z",
"code": 401,
"errors": [
{
"key": "UNAUTHORIZED",
"message": "Invalid JWE claim: 'exp', token expired."
}
]
}
Коды ошибок
Код | Описание |
---|---|
| Bad Request. Неправильный или некорректный запрос |
| Unauthorized. Не авторизован |
| Internal Server Error. Внутренняя ошибка сервера |