Предавторизация или холдирование — это возможность запомнить платежный способ клиента, обновить заказ или списать деньги в несколько этапов.
Такой способ проведения платежа позволяет:
- указать платежный инструмент для оплаты заказа, установить лимит списания по заказу;
- произвести холдирование средств по заказу в рамках установленного лимита без участия клиента;
- скорректировать корзину товаров в счете в рамках произведенного холда без его отмены;
- добавить товары в корзину сверх захолдированной суммы и произвести дополнительное холдирование в рамках установленного лимита без участия клиента;
- расхолдировать средства по заказу и захолдировать заново на сумму измененной корзины.
Для проведения платежа с предавторизацией:
- Установите в
POST /invoices
платежный способ и лимиты при создании счета. - Отправьте запрос
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"
}
}
}
Предавторизация
После создания счета производится предавторизация:
- Смартап отправляет номер счета (
invoice_id
) на устройство клиента. - Устройство клиента активирует платежную библиотеку – набор инструментов для проведения оплаты через SmartPay.
- Платежная библиотека вызывает метод получения счета
GET /invoices/{invoice_id}
(см. раздел Получение статуса) с токеном клиента для получения списка привязанных карт. - Клиент выбирает карту и подтверждает предавторизацию.
- Платежная библиотека вызывает метод
POST /invoices/{invoice_id}
(см. раздел Проведение платежа) для оплаты счета предавторизации – нулевого счета с токеном клиента. - Смартап вызывает метод получения счета
GET /invoices/{invoice_id}
со своим токеном и получает сумму лимита по корзине в параметреinapp_serviceparam_amount_limit
. - Смартап отправляет запрос на создание счета
POST /invoices
(см. раздел Создание счета) на сумму корзины, равную указанному лимиту по корзине.
Значения параметров 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}
для оплаты счета предавторизации – нулевого счета с токеном клиента (см. раздел Предавторизация).
Смартап не формирует никаких изменений счета в SmartPay, счет остается захолдированным на первоначальную сумму.
- Смартап вызывает метод получения счета
GET /invoices/{invoice_id}
со своим токеном и получает новую сумму лимита по корзине в параметреinapp_serviceparam_amount_limit
. - После получения подтверждения о предавторизации смартап отправляет запрос на создание счета
POST /invoices
. - Смартап отправляет запрос в SmartPay на оплату только что созданного счета
POST /invoices/{invoice_id}
со своим токеном. Параметры см. в разделе Проведение оплаты.
Подтверждение счета на частичную сумму может происходить после сборки товаров и даже после доставки.
Увеличение суммы заказа
Вы можете увеличить сумму заказа, добавив дополнительную корзину. Это возможно после того, как платежная библиотека вызвала метод POST /invoices/{invoice_id}
для оплаты счета предавторизации – нулевого счета с токеном клиента (см. раздел Предавторизация).
- Смартап разбивает заказ на 2 корзины: основную, на сумму первоначального холда, и дополнительную. При необходимости переформировывает состав первой корзины, чтобы упаковать ее как можно ближе к сумме холда.
- Смартап формирует дополнительный счет
POST /invoices
в SmartPay под своим токеном на сумму второй корзины. - Смартап отправляет запрос в SmartPay на оплату дополнительного счета
POST /invoices/{invoice_id}
со своим токеном. В запросе указывается счет предавторизации – нулевой созданный счет.
Если вам нужно увеличить сумму заказа, но заказ нельзя разбить на две корзины, то отмените счет и создайте новый:
- Смартап формирует запрос в SmartPay на отмену счета на первоначальную корзину
DELETE /invoices/{invoice_id}
. - SmartPay производит отмену счета.
- Смартап отправляет запрос в SmartPay на создание счета с общей корзиной товаров на сумму корзины
POST /invoices
. - Смартап отправляет запрос в SmartPay на оплату счета
POST /invoices/{invoice_id}
. В запросе указывается счет предавторизации.
Отмена счета
Отмена счета возможна после того, как платежная библиотека вызвала метод POST /invoices/{invoice_id}
для оплаты счета предавторизации – нулевого счета с токеном клиента (см. раздел Предавторизация).
- Смартап формирует запрос в SmartPay на отмену счета
DELETE /invoices/{invoice_id}
. - SmartPay проверяет, нет ли не отмененных связанных счетов по этому счету. Если нет, SmartPay производит отмену счета предавторизации.