Интеграция по API с использованием фискализации

Введение

Платёжный шлюз позволяет принимать оплату с передачей со стороны магазина Корзины товаров, относящихся к одному заказу. Корзина предоставляет собой детализацию заказа по товарным позициям, по которым производится оплата в рамках одного заказа. В запросе на оплату также передаются данные, необходимые для печати кассового чека.

Для получения кассового чека Платежный шлюз взаимодействует с ОФД (см. Онлайн-кассы).

Требования к запросам API

Требования к формированию запросов регистрации заказа с Корзиной

В запросах на регистрацию заказа (с предавторизацией или без) Корзина товаров передаётся в параметре <orderBundle>.

В случае невыполнения хотя бы одного из указанных выше условий заказ считается неправильно сформированным и Платежный шлюз возвращает ошибку.

Пример запроса регистрации заказа с Корзиной

curl --request POST \
  --url https://vtb.rbsuat.com/payment/rest/register.do \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data amount=123456 \
  --data userName=test_user \
  --data password=test_user_password \
  --data amount=200000 \
  --data 'returnUrl=https://mybestmerchantreturnurl.com' \
  --data 'orderBundle={
  "orderCreationDate": "2025-07-29T11:11:33",
  "cartItems": {
    "items": [
      {
        "positionId": 0,
        "name": 1,
        "quantity": {
          "value": 1,
          "measure": "0"
        },
        "itemCode": "5861-0-0",
        "itemPrice": 50000,
        "itemAmount": 50000,
        "tax": {
          "taxType": 14,
          "taxSum": 0
        }
      },
      {
        "positionId": 1,
        "name": "Delivery",
        "quantity": {
          "value": 1,
          "measure": "0"
        },
        "itemCode": "delivery",
        "itemPrice": 50000,
        "itemAmount": 50000,
        "itemAttributes": {
          "attributes": [
            {
              "name": "paymentMethod",
              "value": 1
            },
            {
              "name": "paymentObject",
              "value": "4"
            }
          ]
        },
        "tax": {
          "taxType": 15,
          "taxSum": 0
        }
      },
      {
        "positionId": 3,
        "name": 1,
        "quantity": {
          "value": 1,
          "measure": "0"
        },
        "itemCode": "5861-0-0",
        "itemPrice": 50000,
        "itemAmount": 50000,
        "tax": {
          "taxType": 6,
          "taxSum": 0
        }
      },
      {
        "positionId": 4,
        "name": 1,
        "quantity": {
          "value": 1,
          "measure": "0"
        },
        "itemCode": "5861-0-0",
        "itemPrice": 50000,
        "itemAmount": 50000,
        "tax": {
          "taxType": 7,
          "taxSum": 0
        }
      }
    ]
  },
  "customerDetails": {
    "email": "demo@example.com"
  }
}'

Требования к формированию запросов завершения заказа с Корзиной

При завершении заказов Корзина передаётся в элементе <depositItems>.

В случае невыполнения хотя бы одного из указанных выше условий, запрос завершения заказа считается неправильно сформированным и Платежный шлюз возвращает ошибку.

Пример запроса завершения заказа с Корзиной

curl --request POST \
  --url https://vtb.rbsuat.com/payment/rest/deposit.do \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data amount=4441 \
  --data currency=643\
  --data orderId=01492437-d2fb-77fa-8db7-9e2900a7d8c0 \
  --data 'depositItems={
  "items": [
    {
      "itemAmount": 3330,
      "itemCode": "NM-15",
      "itemCurrency": "643",
      "itemDetails": {
        "itemDetailsParams": [
          {
            "name": "brand",
            "value": "Noname"
          },
          {
            "name": "diameter",
            "value": "12mm"
          }
        ]
      },
      "itemPrice": 3330,
      "name": "Universal Mirror Enduro",
      "positionId": "2",
      "quantity": {
        "measure": "0",
        "value": 1
      },
      "tax": {
        "taxSum": 111,
        "taxType": 1
      }
    },
    {
      "itemAmount": 1111,
      "itemCode": "G-16",
      "itemCurrency": 643,
      "itemDetails": {
        "itemDetailsParams": [
          {
            "name": "brand",
            "value": "Noname"
          }
        ]
      },
      "itemPrice": 1111,
      "name": "Warm Grips",
      "positionId": "3",
      "quantity": {
        "measure": "0",
        "value": 1
      },
      "tax": {
        "taxSum": 111,
        "taxType": 1
      }
    }
  ]
}'

Требования к формированию запросов возврата заказа с Корзиной

В запросе на возврат Корзина указывается в блоке <refundItems>.

В случае невыполнения хотя бы одного из указанных выше условий, запрос возврата заказа считается неправильно сформированным и Платежный шлюз возвращает ошибку.

Пример запроса возврата с Корзиной

curl --request POST \
  --url https://vtb.rbsuat.com/payment/rest/refund.do \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data userName=test_user \
  --data password=test_user_password \
  --data currency=643\
  --data orderId=01491d0b-c848-7dd6-a20d-e96900a7d8c0 \
  --data amount=9000 \
  --data 'refundItems={
  "items": [
    {
      "itemAmount": 6000,
      "itemCode": "NM-15",
      "itemCurrency": "643",
      "itemDetails": {
        "itemDetailsParams": [
          {
            "name": "brand",
            "value": "Noname"
          },
          {
            "name": "diameter",
            "value": "12mm"
          }
        ]
      },
      "itemPrice": 6000,
      "name": "Universal Mirror Enduro",
      "positionId": "2",
      "quantity": {
        "measure": "0",
        "value": 1
      },
      "tax": {
        "taxSum": 111,
        "taxType": 1
      }
    },
    {
      "itemAmount": 3000,
      "itemCode": "G-16",
      "itemCurrency": 643,
      "itemDetails": {
        "itemDetailsParams": [
          {
            "name": "brand",
            "value": "Noname"
          }
        ]
      },
      "itemPrice": 3000,
      "name": "Warm Grips",
      "positionId": "3",
      "quantity": {
        "measure": "0",
        "value": 1
      },
      "tax": {
        "taxSum": 111,
        "taxType": 1
      }
    }
  ]
}'

Чеки закрытия

С 1 июля 2019 года владельцы онлайн-касс должны формировать чеки для зачёта и возврата предоплаты. Платёжный шлюз позволяет зарегистрировать второй чек (чек закрытия) без создания нового заказа с помощью запроса closeOfdReceipt.

Подробнее о регистрации второго чека читайте здесь.

Схемы взаимодействия при использовании различных видов оплаты

Одностадийная оплата

sequenceDiagram participant OS as Интернет-магазин participant PG as Платежный шлюз participant OFD as ОФД autonumber OS->>PG: Запрос на оплату PG->>PG: Оплата PG-->>OS: Ответ на запрос PG->> OFD: Запрос на формирование
чека расхода OFD->>PG:Результат формирования
чека расхода OS->>PG: Расширенный запрос состояния заказа PG-->>OS: Информация о заказе opt Нужна повторная регистрация чека OS->>PG: Запрос закрытия чека PG-> OFD: Запрос закрытия чека PG-->>OS: Ответ на запрос закрытия чека end
  1. Мерчант инициирует оплату заказа (см. список используемых запросов API).
  2. Платежный шлюз выполняет оплату.
  3. Платежный шлюз отвечает на запрос.
  4. Платежный шлюз отправляет в ОФД запрос на формирование чека расхода.
  5. ОФД возвращает результат формирования чека расхода.
  6. Мерчант отправляет в Платежный шлюз расширенный запрос состояния заказа getOrderStatusExtended.do.
  7. Платежный шлюз присылает информацию о заказе.
  8. (Необязательно) Мерчант отправляет в Платежный шлюз запрос закрытия чека closeOfdReceipt.
  9. Платежный шлюз обменивается данными с ОФД.
  10. Платежный шлюз направляет Мерчанту подтверждение получения информации (ответ на запрос закрытия).

Двухстадийная оплата

sequenceDiagram participant OS as Интернет-магазин participant PG as Платежный шлюз participant OFD as ОФД autonumber OS->>PG: Запрос на завершение PG->>PG: Завершение PG-->>OS: Ответ на завершение PG->> OFD: Запрос на формирование
чека расхода OFD->>PG:Результат формирования
чека расхода OS->>PG: Расширенный запрос состояния заказа PG-->>OS: Информация о заказе opt Нужна повторная регистрация чека OS->>PG: Запрос закрытия чека PG-> OFD: Обмен данными PG-->>OS: Ответ на запрос закрытия чека end
  1. Мерчант инициирует завершение заказа (см. список используемых запросов API).
  2. Платежный шлюз выполняет завершение заказа.
  3. Платежный шлюз отвечает на запрос.
  4. Платежный шлюз отправляет в ОФД запрос на формирование чека расхода.
  5. ОФД возвращает результат формирования чека расхода.
  6. Мерчант отправляет в Платежный шлюз расширенный запрос состояния заказа getOrderStatusExtended.do.
  7. Платежный шлюз присылает информацию о заказе.
  8. (Необязательно) Мерчант отправляет в Платежный шлюз запрос закрытия чека closeOfdReceipt.
  9. Платежный шлюз обменивается данными с ОФД.
  10. Платежный шлюз направляет Мерчанту подтверждение получения информации (ответ на запрос закрытия).

Запросы, используемые при одностадийной оплате

Запросы, используемые при двухстадийной оплате

Категории:
eCommerce API V1
Категории
Результаты поиска