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

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

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

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

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

  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 (см. раздел Создание счета) на сумму корзины, равную указанному лимиту по корзине.
Значения параметров 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, счет остается захолдированным на первоначальную сумму.
  1. Смартап вызывает метод получения счета GET /invoices/{invoice_id} со своим токеном и получает новую сумму лимита по корзине в параметре inapp_serviceparam_amount_limit.
  2. После получения подтверждения о предавторизации смартап отправляет запрос на создание счета POST /invoices.
  3. Смартап отправляет запрос в SmartPay на оплату только что созданного счета POST /invoices/{invoice_id} со своим токеном. Параметры см. в разделе Проведение оплаты.
Подтверждение счета на частичную сумму может происходить после сборки товаров и даже после доставки.

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

Вы можете увеличить сумму заказа, добавив дополнительную корзину. Это возможно после того, как платежная библиотека вызвала метод 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 производит отмену счета предавторизации.