Перед подключением
Авторизация
В заголовке каждого запроса необходимо передавать токен API Key в следующем формате:
- Тип токена: JWT
- Имя заголовка: token
Подробнее о получении параметров авторизации в разделе Получение токена.
URL для запросов
Все запросы необходимо отправлять на следующий URL:
https://smartpay.devices.sberbank.ru/api/subscription-market/
Список доступных подписок
Вы можете отображать пользователю список подписок, которые он может оформить в смартапе. Для этого используйте метод GET /v2/products
.
Параметры заголовка
Поле | Описание | |
---|---|---|
token Обязательное |
Токен для авторизации запроса. Подробнее в разделе Получение токена | |
user_id Обязательное |
Блок с информацией о пользователе. Передается для получения информации о покупках конкретного пользователя | |
| partner_client_id |
Уникальный идентификатор клиента в вашем бэкенде. Обязательный, если не указан |
| encrypted_sub_id |
Идентификатор пользователя, полученный с помощью сценария. Идентификатор можно получить из переменной $request.rawRequest.uuid.sub. Обязательный, если не указан |
Параметры запроса
Параметр | Описание |
---|---|
Обязательное |
Идентификатор сервиса, который вы получили в письме о подключении подписок. Подробнее в разделе Доступ к подпискам |
Пример запроса
curl --location --request GET 'https://smartpay.devices.sberbank.ru/api/subscription-market/v2/products?serviceId=127' \
--header 'token: eyJhbGci...' \
--header 'user_id: {"encrypted_sub_id": "lhIq..."}' \
--header 'Content-Type: application/json' \
Параметры ответа
Поле | Описание | ||
---|---|---|---|
success |
Результат обработки запроса. Значения:
| ||
message |
Текстовое описание ошибки | ||
body |
Блок с информацией о подписках | ||
| productId |
Идентификатор продукта подписки. Выдается при запросе доступа к подпискам | |
| name |
Наименование продукта подписки. Передается значение из заявки на получение доступа к подпискам | |
| description |
Описание подписки. Передается значение из заявки на получение доступа к подпискам | |
| productCode |
Артикул (код подписки у провайдера). Передается значение из заявки на получение доступа к подпискам | |
| tariffParams |
Блок с параметрами тарифа | |
| | tariffId |
Идентификатор тарифа. Выдается при запросе доступа к подпискам |
| | partnerName |
Наименование тарифа |
| | periodName |
Название периода списания за подписку: |
| | periodType |
Единица измерения продолжительности периода подписки: |
| | periodDuration |
Продолжительность периода подписки |
| | periodPrice |
Стоимость периода подписки. Указывается в копейках |
Пример ответа
{
"success": true,
"message": "",
"body": [
{
"productId": 1,
"name": "Тариф Middle",
"description": "Тариф Middle - базовое предложение...",
"productCode": "Middle",
"tariffParams": [
{
"tariffId": 1,
"partnerName": "Тариф Middle",
"periodName": "PROMO | START | STANDARD | GRACE | HOLD",
"periodType": "MINUTE | HOUR | DAY | MONTH | YEAR",
"periodDuration": 30,
"periodPrice": "10000"
}
]
}
]
}
Подключение подписки
Для подключения используйте метод POST /v2/subscriptions
.
Для этого вам понадобится идентификатор тарифа (tariffId
), полученный методом GET /v2/products
.
Формат данных application/json
запроса задается в заголовке запроса:
Content-Type: application/json
Параметры заголовка
Поле | Описание | |
---|---|---|
token Обязательное |
Токен для авторизации запроса. Подробнее в разделе Получение токена | |
user_id Обязательное |
Блок с информацией о пользователе | |
| encrypted_sub_id Обязательное |
Идентификатор пользователя. Передается для получения информации о покупках конкретного пользователя. Идентификатор можно получить из переменной $request.rawRequest.uuid.sub |
Параметры запроса
Параметр | Описание |
---|---|
Обязательное |
Идентификатор тарифа, полученный по запросу GET /v2/products |
|
Json-объект, в котором можно передать любую информацию по подписке. Информация будет отправляться в callback-уведомлениях при наступлении событий (активация, отмена, продление подписки) |
|
Тип контакта пользователя. Варианты значений: EMAIL, PHONE |
|
Электронная почта пользователя |
|
Телефон пользователя |
|
Идентификатор резерва по подписке на стороне провайдера |
|
Идентификатор устройства. Обязательно передать, если был передан в запросе GET /v2/products при получении тарифа |
|
Тип устройства |
|
Признак автоматического продления подписки: |
Пример запроса
curl -X POST 'https://.../v2/subscriptions' \
-H 'accept: /' \
-H 'token: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9…' \
-H 'user_id: { "encrypted_sub_id": "123" }' \
-H 'Content-Type: application/json' \
-d '{"tariffId" : 162,
"addParameters" : "
{\"provider\":\"prime\",\"token\":null,\"authType\":null,\"contentId\":\"162\",\"deviceId\":\"SBB01Y10AB02...\",\"deviceManufacturer\":\"SberDevices\",\"deviceModel\":\"sberbox\",\"deviceSoftware\":\"1.73.11\",\"ipAddress\":\"109.252...\",\"recurrent\":true,\"contentType\":\"subscription\",\"contentСount\":0,\"externalStoreId\":\"Подписка Middle на месяц с промо-периодом\",\"deviceType\":\" SberBox\",\"timezoneId\":\"Europe/Moscow\",\"user_id\":\"u1234\",\"phone\":null,\"subId\":\"d75644b...\"}
",
"contact" : "EMAIL | PHONE",
"email" : "sberbank@sberbank.ru",
"phone" : "79123456789 | +79123456789 | 89123456789 | +7-(912)-345-67-89 | +7 (912) 345 67 89 | или комбинация приведенных примеров",
"reservationId" : "qwerty1234",
"deviceId" : "SBB01Y10AB02...",
"deviceType" : "SberBox",
"recurrent" : true}'
Параметры ответа
Поле | Описание | |
---|---|---|
success |
Результат обработки запроса. Значения:
| |
message |
Текстовое описание ошибки | |
body |
Блок с информацией о подписках | |
| orderId |
Идентификатор созданной подписки |
| invoiceId |
Идентификатор платежа для оформления подписки |
| name |
Наименование подписки. Передается значение из заявки на получение доступа к подпискам |
| description |
Описание подписки. Передается значение из заявки на получение доступа к подпискам |
| price |
Цена первого периода подписки. Указывается в копейках: |
| currency |
Валюта списания. По умолчанию возвращается значение RUB |
| periodType |
Единица измерения продолжительности периода подписки: |
| periodDuration |
Продолжительность периода подписки |
| state |
Текущий статус подписки. В ответе будет возвращаться статус ACCEPTED |
Пример ответа
{
"success": true,
"message": "",
"body": {
"orderId": 999,
"invoiceId": "b702aae8-13df-11eb-a058-b...",
"name": "Тариф Middle",
"description": "Тариф Middle - базовое предложение...",
"price": 10000,
"currency": "RUB",
"periodType": "DAY",
"periodDuration": 30,
"state": "ACCEPTED"
}
}
Защита от дублированных платежей
Срок жизни счета на оплату подписки — 20 минут. Если в течение этого времени пользователь попытается снова оформить подписку по этому тарифу, не оплатив первый заказ, то ему отобразится этот же счет.
Если пользователь оплатил подписку, повторное оформление по тому же тарифу невозможно, пока подписка не закончится.
Оплата подписки
В ответ на запрос POST /v2/subscriptions
придет параметр invoiceId
— это идентификатор платежа для оформления подписки. Даже если для подписки предусмотрен бесплатный PROMO период, необходимо провести платеж для привязки карты. В этом случае средства не списываются — пользователь просто указывает реквизиты банковской карты для последующих списаний.
Процесс оплаты подписки совпадает со стандартным процессом оплаты. Подробнее в разделе POLICY_RUN_APP
.
Получение статуса оплаты
Если пользователь активировал подписку, вы получите событие PAY_DIALOG_FINISHED
и callback-уведомление об активации подписки. Чтобы отобразить результат оплаты пользователю, используйте метод получения статуса платежа по invoiceId
, с которым был инициирован платеж.
Запрос статуса платежа аналогичен запросу статуса при проведении разового платежа. Подробнее в разделе Получение статуса.