Если вы принимаете платежи в смартапе, то вы можете получать информацию по реализованным товарам и услугам. Сделать это можно через SmartStore — сервис управления товарами смартапа. SmartStore является частью сервиса приема платежей SmartPay, поэтому для его использования достаточно создать смартап и получить токен для SmartPay.
Пока SmartStore предоставляет API только для получения информации о купленных товарах. В дальнейшем возможности сервиса будут расширяться.
Перед использованием
Авторизация
В сервисе SmartStore можно авторизоваться по эксплуатационному токену от SmartPay. Токен передается в заголовке каждого запроса:
Тип токена: Bearer
Имя заголовка: Authorization
Подробнее о параметрах авторизации смотрите в разделе Проект SmartPay.
URL для запросов
Все запросы к SmartStore необходимо отправлять на следующий URL:
https://smartpay.devices.sberbank.ru/api/smart-store/items
Список купленных товаров
Вы можете получить информацию о купленных товарах, если: 
 - при оплате из смартапа был указан идентификатор пользователя user_id; 
 - купленные товары перешли в статус confirmed (id=0).
Получить информа цию о купленных товарах можно по идентификатору пользователя, идентификатору смартапа и коду товара. Если был частичный возврат, вы получите информацию только по тем товарам, что остались у клиента.
Список купленных товаров формируется из корзины, которая передается в запросах к SmartPay:
- для SmartApp API — при создании счета (POST /invoices);
- для Code — при формировании корзины ($payment.addItem);
- для Graph — при добавлении товара в счет ($payment.addItem).
Информация по всем товарам
Метод GET /items возвращает информацию по всем товарам, которые пользователь купил внутри смартапа. Информация возвращается в виде списка, к которому можно применить постраничную выгрузку и сортировку.
Параметры заголовка
| Название | Тип | Обязательный | Описание | 
|---|---|---|---|
| user_id | object | Да | Блок с информацией о пользователе | 
| encrypted_sub_id | string | Да | Идентификатор пользователя. Передается для получения информации о покупках конкретного пользователя. Идентификатор можно получить из переменной $request.rawRequest.uuid.sub | 
Параметры запроса
| Название | Тип | Обязательный | Описание | 
|---|---|---|---|
| page | numeric | Нет | Номер страницы. Передается, если необходимо получить информацию с определенной страницы вывода результатов | 
| size | numeric | Нет | Количество записей на одной странице | 
| sort | string | Нет | Параметр сортировки результата. Допустимые значения: • ASC (по возрастанию) • DESC (по убыванию) Пример передачи параметра: sort=item_code, DESC При передаче в строке запроса символ «,» должен экранироваться: sort=item_code%2CDESC | 
Пример запроса
curl -X GET "http://................./items?page=1&size=20&sort=item_code%2CDESC"
-H  "accept: application/json"
-H  "authorization: Bearer $BEARER_TOKEN"
-H  "user_id: {"encrypted_sub_id": "wE8B12AKT5tbzBOFSM+wk8kK0Xzh/i8J2WRZvP+39b+uv…………"}"
Параметры ответа
| Название | Тип | Описание | 
|---|---|---|
| success | boolean | Результат обработки запроса. Значения: • true — данные получены • false — данные не получены | 
| message | string | Текстовое описание ошибки | 
| body | object | Блок с результатом поиска | 
| content | list | Список найденных покупок с характеристиками | 
| item_code | string | Код товара. Возвращается то же значение, что было передано при регистрации заказа | 
| quantities | object | Информация о количестве купленных товаров | 
| quantity_value | numeric | Количество купленных товаров | 
| quantity_measure | string | Единицы товара. Например: шт., кг и пр. | 
| image_url | string | Ссылка на логотип товара. Берется последнее значение, которое было передано при регистрации заказа | 
| totalElements | numeric | Общее количество найденных товаров | 
| totalPages | numeric | Количество страниц для отображения результатов | 
| number | numeric | Номер текущей отображаемой страницы | 
| sort | object | Информация о сортировке вывода результатов | 
| unsorted | boolean | Признак сортировки списка: • true — список не отсортирован • false — список отсортирован | 
| sorted | boolean | Признак сортировки списка: • true — список отсортирован • false — список не отсортирован | 
| empty | boolean | Признак пустоты списка: • true — список пустой, параметр sort не передавался в запросе • false — список непустой | 
| size | numeric | Количество найденных товаров на странице | 
| numberOfElements | numeric | Общее количество найденных товаров | 
| first | boolean | Признак первой страницы: • true — получена информация с первой страницы • false — получена информация не с первой страницы | 
| last | boolean | Признак последней страницы: • true — получена информация с последней страницы • false — получена информация не с последней страницы | 
Пример ответа
{
  "success": true,
  "message": "",
  "body": {
    "totalElements": 0,
    "totalPages": 0,
    "number": 0,
    "sort": {
      "unsorted": true,
      "sorted": false,
      "empty": false
    },
    "size": 0,
    "content": [
      {
        "item_code": "com.MashaAndTheBear.HairSalon.crystal100",
        "quantities": [
          {
            "quantity_value": 3.5,
            "quantity_measure": "кг"
          }
        ],
        "image_url": "https://developers.sber.ru/docs/img/fork-page/assistant-salute-grey.png"
      }
    ],
    "pageable": {
      "sort": {
        "unsorted": true,
        "sorted": false,
        "empty": false
      },
      "offset": 0,
      "pageNumber": 1,
      "pageSize": 1,
      "paged": true,
      "unpaged": false
    },
    "numberOfElements": 0,
    "first": true,
    "last": false,
    "empty": false
  }
}
Информация по товару
Метод GET /items/{code} возвращает информацию о конкретном товаре, который пользователь купил внутри смартапа.
Параметры заголовка
| Название | Тип | Обязательный | Описание | 
|---|---|---|---|
| user_id | object | Да | Блок с информацией о пользователе | 
| encrypted_sub_id | string | Да | Идентификатор пользователя. Передается для получения информации о покупках конкретного пользователя. Идентификатор можно получить из переменной $request.rawRequest.uuid.sub | 
Параметры запроса
| Название | Тип | Обязательный | Описание | 
|---|---|---|---|
| code | string | Да | Код товара (item_code), по которому необходимо получить информацию | 
Пример запроса
curl -X GET "http://............/items/com.MashaAndTheBear.HairSalon.crystal100"
-H "accept: application/json"
-H "authorization: Bearer $BEARER_TOKEN"
-H "user_id: { "encrypted_sub_id": "wE8B12AKT5tbzBOFSM+wk8kK0Xzh……."}"
Параметры ответа
| Название | Тип | Описание | 
|---|---|---|
| success | boolean | Результат обработки запроса. Значения: • true — данные получены • false — данные не получены | 
| message | string | Текстовое описание ошибки | 
| body | object | Блок с результатом поиска | 
| item_code | string | Код товара. Возвращается то же значение, что было передано при регистрации заказа | 
| quantities | object | Информация о количестве купленных товаров | 
| quantity_value | numeric | Количество купленных товаров | 
| quantity_measure | string | Единицы товара. Например: шт., кг и пр. | 
| image_url | string | Ссылка на логотип товара. Берется последнее значение, которое было передано при регистрации заказа | 
Пример ответа
{
  "success": true,
  "message": "",
  "body": {
    "item_code": "com.MashaAndTheBear.HairSalon.crystal100",
    "quantities": [
      {
        "quantity_value": 3.5,
        "quantity_measure": "кг"
      }
    ],
    "image_url": "https://developers.sber.ru/docs/img/fork-page/assistant-salute-grey.png"
  }
}
Коды ошибок
В ответ на каждый запрос могут возвращаться следующие коды ошибок:
| Код | Описание | 
|---|---|
| 400 | Некорректный запрос. Например, в запросе отсутствует авторизационный токен смартапа или указан некорректный идентификатор пользователя («Invalid user_id header received») | 
| 401 | Неавторизованный запрос. Например, токену смартапа не предоставлены права или токен недействителен («The Token has expired on dd.mm.yyyy») | 
| 403 | Запрещенный запрос. Например, некорректно заполнен параметр encrypted_sub_id или сервису не удалось расшифровать sub_id | 
| 502 | Сервис недоступен. Ошибка на стороне SmartStore | 
