Рекуррентные платежи
При оплате заказа физическим лицом есть возможность применить рекуррентные платежи. Это позволит сохранить токен банковской карты пользователя, для последующего списания с неё средств без участия клиента, например, для списания средств по подписке.
Почему для организаций регулярность устроена иначе
Списание по сохранённой карте работает, и дело не в поддержке. Владелец карты — всегда физическое лицо: даже корпоративная карта оформлена на сотрудника. Значит расход ложится на человека, и потом ему отчитываться перед бухгалтерией — сохранить чек, обосновать трату, приложить её к отчёту. Для регулярных корпоративных расходов это неудобно, и чем больше сотрудников, тем неудобнее.
Поэтому организациям и ИП адресована подписка — шаблон платежа: правила, по которым покупателю уходит счёт. Правило задаёт период, конкретный день или условие — например, снижение баланса до порога. Дальше есть два пути:
- заказы создаёт ваша система — по своему расписанию вызывает создание заказа, и счёт уходит покупателю как обычно;
- заказ-подписка — создаётся один раз с параметрами периода и условий, клиент подписывается на неё, и счета приходят ему в нужное время без новых вызовов с вашей стороны.
Счёт по подписке доходит покупателю привычным каналом: письмом, ссылкой или Запросом о платеже в приложение банка.
Примечание
Параметры заказа-подписки настраиваются при подключении: публичного описания полей в контракте пока нет, поэтому состав правил уточняйте у технической поддержки. Как только описание появится, оно встанет на эту страницу.
Привязка карты
Схема получения токена карты
- Магазин создает в системе Инвойсбокс заказ через метод API с указанием параметров
savePaymentDataиclientId. - Система возвращает ссылку на платёжную страницу для оплаты заказа.
- Магазин перенаправляет покупателя по полученной ссылке.
- Покупатель заполняет необходимые для оплаты сведения подтверждает оплату.
- Система Инвойсбокс перенаправляет покупателя обратно на сайт Магазина.
- Система Инвойсбокс оповещает Магазин об успешной оплате заказа с указанием токена.
- Магазин сохраняет и привязывает полученный токен к пользователю.
- Магазин передаёт в систему Инвойсбокс информацию об отгрузке через метод API для разблокировки средств.
Создание заказа
Карта привязывается к покупателю в момент оплаты: создайте заказ с такими параметрами —
savePaymentData,clientId,paymentMethodCodepaymentMethodAutosubmitв invoiceSetting
Если заказ нужен только для привязки карты, включите режим холдирования средств — подтип заказа
subtype = hold, — чтобы затем разблокировать их.
Для оплаты товаров и услуг, эту опцию так же можно использовать, если этого требуют бизнес-процессы.
Пример:
{
....
"subtype": "hold",
"invoiceSetting": {
"savePaymentData": true,
"clientId": "client-12345",
"paymentMethodCode":"acquiring",
"paymentMethodAutosubmit": true
}
}
Далее, клиента следует перенаправить на страницу оплаты по ссылке, полученной в параметре paymentUrl в
ответе на запрос создания заказа.
После успешного холдирования (блокировки) средств, магазину будет направлено уведомление об оплате,
в котром будет находится информация о платеже в объекте PaymentInfo, в том числе параметр
paymentToken, который необходимо сохранить и привязать к плательщику (пользователю) для последующего проведения платежей.
Пример:
{
....
"paymentInfo": {
"paymentToken": "token-abc123",
"cardholderName": "CARDHOLDER NAME",
"expiration": "13/26",
"maskedPan": "220071**6742",
"paymentSystem": "MIR"
}
}
Если заказ был инициирован только для привязки карты, то необходимо разблокировать средства, путём
создания отгрузки с пустым набором basketItems и флагом final = true.
Важно
Для заказов, используемых только для привязки карты, рекомендуется использовать небольшие суммы заказа, например, до 1 рубля.
Подтверждение оплаты заказов с использованием токена
Теперь можно использовать сохранённый токен для подтверждения оплаты в последующих заказах. Для этого создаем заказ и получаем его идентификатор, а затем вызываем метод подтверждения платежа с указанием платёжного токена:
- метод:
POST - ресурс:
/v3/billing/api/payment/confirm - тело запроса - объект ConfirmRequest
- тело ответа - объект OrderResponse
ConfirmRequest
| Свойство | Тип | Описание | Пример |
|---|---|---|---|
| orderId * | string | Идентификатор заказа | 0193690f-a122-d2cd-ac46-9da9e848723c |
| type * | string, enum | Тип подтверждения оплаты | paymentToken |
| paymentToken * | string | Платёжный токен карты клиента | cc11a4881764e0e02573f83c99811ed9 |
В случае успешной оплаты status заказа станет completed, а для подтипа hold — hold. Статуса paid в контракте нет: оплаченным считается только completed (полный перечень — на странице работы с заказом).
Ошибки
При использовании метода могут возникнуть следующие ошибки:
Пример ошибки при попытке списания средств ошибочным токеном
{
"error": {
"message": "Ошибка списания средств",
"code": "invalid_argument",
"fields": []
}
}
Пример ошибки при попытке списания средств по уже оплаченному заказу
{
"error": {
"message": "Заказ уже оплачен",
"code": "already_paid",
"fields": []
}
}
Удаление привязанной карты
- метод:
POST - ресурс:
/v3/processing/api/payment-token/delete - тело запроса - объект DeletePaymentTokenRequest
DeletePaymentTokenRequest
| Свойство | Тип | Описание | Пример |
|---|---|---|---|
| clientId * | string | Идентификатор клиента | client-12345 |
| paymentToken * | string | Платёжный токен карты клиента | cc11a4881764e0e02573f83c99811ed9 |
Пример ответа в случае успешного удаления
{
"data": {},
"extendedData": []
}
Пример ошибки удаления токена
{
"error": {
"message": "Неверное состояние связки",
"code": "invalid_argument",
"fields": []
}
}
Пример ошибки, когда токен не найден
{
"error": {
"message": "Error",
"code": "not_found",
"fields": []
}
}