ym88659208ym87991671
Оплата с предавторизацией | Документация для разработчиков
Skip to main content

Оплата с предавторизацией

Обновлено 09 сентября 2022

Предавторизация или холдирование — это возможность запомнить платежный способ клиента, обновить заказ или списать деньги в несколько этапов.

Такой способ проведения платежа позволяет:

  • указать платежный инструмент для оплаты заказа, установить лимит списания по заказу;
  • произвести холдирование средств по заказу в рамках установленного лимита без участия клиента;
  • скорректировать корзину товаров в счете в рамках произведенного холда без его отмены;
  • добавить товары в корзину сверх захолдированной суммы и произвести дополнительное холдирование в рамках установленного лимита без участия клиента;
  • расхолдировать средства по заказу и захолдировать заново на сумму измененной корзины.

Для проведения платежа с предавторизацией:

  1. Установите в POST /invoices платежный способ и лимиты при создании счета.
  2. Отправьте запрос POST /invoices/{invoice_id} для списания денег со счета клиента без авторизации.

Основной сценарий

Создание счета

Для создания счета на проведение платежа используйте запрос POST /invoices. Описание параметров см. в разделе Создание счета.

Пример запроса:

{
"ptype": 0,
"invoice": {
"invoice_params": [
{
"key": "inapp_serviceparam_payment_instruments",
"value": "card"
},
{
"key": "inapp_serviceparam_action_name",
"value": "Подтвердить"
},
{
"key": "inapp_serviceparam_amount_limit",
"value": "105000"
}
],
"order": {
"order_id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
"order_number": "145",
"order_date": "2020-04-29T08:17:03+03",
"service_id": "6",
"amount": 0,
"currency": "RUB",
"purpose": "ООО «Ромашка»",
"description": "Предавторизация по заказу 145",
"language": "ru-RU",
"expiration_date": "2021-03-07T08:52:38.137Z"
}
}
}

Предавторизация

После создания счета производится предавторизация:

  1. Смартап отправляет номер счета (invoice_id) на устройство клиента.
  2. Устройство клиента активирует платежную библиотеку – набор инструментов для проведения оплаты через SmartPay.
  3. Платежная библиотека вызывает метод получения счета GET /invoices/{invoice_id} (см. раздел Получение статуса) с токеном клиента для получения списка привязанных карт.
  4. Клиент выбирает карту и подтверждает предавторизацию.
  5. Платежная библиотека вызывает метод POST /invoices/{invoice_id} (см. раздел Проведение платежа) для оплаты счета предавторизации – нулевого счета с токеном клиента.
  6. Смартап вызывает метод получения счета GET /invoices/{invoice_id} со своим токеном и получает сумму лимита по корзине в параметре inapp_serviceparam_amount_limit.
  7. Смартап отправляет запрос на создание счета POST /invoices (см. раздел Создание счета) на сумму корзины, равную указанному лимиту по корзине.
danger

Значения параметров service_id, order_number и order_date должны совпадать со значениями таких же параметров в счете предавторизации.

Пример запроса:

{
"ptype": 0,
"invoice": {
"order": {
"order_id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
"order_number": "145",
"order_date": "2020-04-29T08:17:03+03",
"service_id": "6",
"amount": 105000,
"currency": "RUB",
"purpose": "Создание счета",
"description": "Списание средств по заказу 145",
"language": "ru-RU",
"expiration_date": "2021-03-07T08:52:38.137Z"
}
}
}

Проведение оплаты

Смартап отправляет запрос на оплату только что созданного им счета POST /invoices/{invoice_id} со своим токеном в SmartPay. Описание параметров см. в разделе Проведение платежа.

Запрос может быть отправлен непосредственно перед сборкой заказа.

Пример запроса:

{
"operations": [
{
"operation": "payment",
"code": "invoice",
"value": "167900"
}
],
"device_info": {
"device_platform_type": "iOS",
"device_platform_version": "13.6.1",
"device_model": "iPhone 7",
"device_manufacturer": "Apple",
"device_id": "83c3f257-46d8-41fe-951b-f79d04e288c2",
"surface": "SBOL",
"surface_version": "11.5.0"
},
"return_url": "https://ok",
"fail_url": "https://fail"
}

Дополнительные сценарии

Уменьшение суммы заказа

Уменьшение суммы заказа возможно после того, как платежная библиотека вызвала метод POST /invoices/{invoice_id} для оплаты счета предавторизации – нулевого счета с токеном клиента (см. раздел Предавторизация).

note

Смартап не формирует никаких изменений счета в SmartPay, счет остается захолдированным на первоначальную сумму.

  1. Смартап вызывает метод получения счета GET /invoices/{invoice_id} со своим токеном и получает новую сумму лимита по корзине в параметре inapp_serviceparam_amount_limit.
  2. После получения подтверждения о предавторизации смартап отправляет запрос на создание счета POST /invoices.
  3. Смартап отправляет запрос в SmartPay на оплату только что созданного счета POST /invoices/{invoice_id} со своим токеном. Параметры см. в разделе Проведение оплаты.
note

Подтверждение счета на частичную сумму может происходить после сборки товаров и даже после доставки.

Увеличение суммы заказа

Вы можете увеличить сумму заказа, добавив дополнительную корзину. Это возможно после того, как платежная библиотека вызвала метод POST /invoices/{invoice_id} для оплаты счета предавторизации – нулевого счета с токеном клиента (см. раздел Предавторизация).

  1. Смартап разбивает заказ на 2 корзины: основную, на сумму первоначального холда, и дополнительную. При необходимости переформировывает состав первой корзины, чтобы упаковать ее как можно ближе к сумме холда.
  2. Смартап формирует дополнительный счет POST /invoices в SmartPay под своим токеном на сумму второй корзины.
  3. Смартап отправляет запрос в SmaPay на оплату дополнительного счета POST /invoices/{invoice_id} со своим токеном. В запросе указывается счет предавторизации – нулевой созданный счет.

Если вам нужно увеличить сумму заказа, но заказ нельзя разбить на две корзины, то отмените счет и создайте новый:

  1. Смартап формирует запрос в SmartPay на отмену счета на первоначальную корзину DELETE /invoices/{invoice_id}.
  2. SmartPay производит отмену счета.
  3. Смартап отправляет запрос в SmartPay на создание счета с общей корзиной товаров на сумму корзины POST /invoices.
  4. Смартап отправляет запрос в SmartPay на оплату счета POST /invoices/{invoice_id}. В запросе указывается счет предавторизации.

Отмена счета

Отмена счета возможна после того, как платежная библиотека вызвала метод POST /invoices/{invoice_id} для оплаты счета предавторизации – нулевого счета с токеном клиента (см. раздел Предавторизация).

  1. Смартап формирует запрос в SmartPay на отмену счета DELETE /invoices/{invoice_id}.
  2. SmartPay проверяет, нет ли не отмененных связанных счетов по этому счету. Если нет, SmartPay производит отмену счета предавторизации.

Заметили ошибку?

Выделите текст и нажмите Ctrl + Enter, чтобы сообщить нам о ней