Платежи с холдированием
Вы можете проводить платежи с холдированием: сначала замораживать сумму платежа на карте покупателя, а потом списывать отдельным запросом. Между заморозкой и списанием есть время, например, чтобы отправить заказ покупателю.
Как это работает
На самом деле все платежи банковскими картами проходят в две стадии. Сначала авторизация — банк проверяет, что нужная сумма есть на карте, и блокирует ее. Затем клиринг — банк списывает деньги.
При обычном платеже картой между авторизацией и клирингом практически нет паузы.
При платеже с холдированием вы решаете, когда провести клиринг. Банк списывает деньги не сразу, а по вашей команде. Можно списать полную сумму или меньше.
Как включить холдирование
Холдирование включается на стороне Банка 131. Все ваши платежи могут проходить или с холдированием, или без него (тогда сумма платежа будет списываться автоматически, сразу после авторизации).
Если хотите проводить платежи с холдированием, напишите вашему менеджеру в Банке 131.
Срок холдирования
Деньги замораживаются на карте на 5 дней. Если до конца этого срока вы не спишете их и не разблокируете, деньги разблокируются автоматически.
Если вам нужно, чтобы деньги после окончания срока холдирования списывались, а не разблокировались, напишите менеджеру в Банке 131.
Сценарий платежа c холдированием
- Параметры карты передаются в открытом виде
- С виджетом платежной формы
Чтобы провести платеж с холдированием, выполните следующие шаги:
-
Создайте платежную сессию отдельно от платежа (
session/create
) или одновременно с ним (session/init/payment
). -
Если вы создавали сессию отдельно от старта платежа, отправьте запрос
session/start/payment
. -
Дождитесь от Банка 131 вебхука
ready_to_confirm
— это значит, что Банк готов провести платеж и ждет вашего подтверждения. -
Подтвердите проведение платежа (
session/confirm
) или отмените его (session/cancel
). -
Если вы получите от Банка 131 вебхук
action_required
, это значит, что для проведения платежа нужны дополнительные действия. Например, пользователю нужно пройти 3D Secure. Перенаправьте пользователя на адрес для 3D Secure. -
Дождитесь Банка 131 вебхука
ready_to_capture
. Это значит, что деньги для оплаты успешно заморожены на банковской карте пользователя. Их можно списать — сразу или через некоторое время. Списать можно полную сумму или меньше — передайте нужную сумму вamount_details
.Пример вебхука
- cURL
- PHP
curl -X POST \
https://partner.ru \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"type": "ready_to_capture",
"session": {
"id": "ps_3230",
"status": "in_progress",
"created_at": "2018-05-27T02:03:00.000000Z",
"updated_at": "2018-05-27T02:03:00.000000Z",
"acquiring_payments": [
{
"id": "pm_2018",
"status": "pending",
"created_at": "2018-05-27T02:03:00.000000Z",
"customer": {
"reference": "user123",
"contacts": [
{
"email": "user@gmail.com"
}
]
},
"payment_details": {
"type": "card",
"card": {
"last4": "4242",
"brand": "visa"
}
},
"amount_details": {
"amount": 10000,
"currency": "rub"
},
"metadata": "good"
}
]
}
}'use Bank131\SDK\Client;
use Bank131\SDK\Config;
use Bank131\SDK\Services\WebHook\Hook\WebHookTypeEnum;
$config = new Config(
'https://demo.bank131.ru',
'your_project_name',
file_get_contents('/path/to/your/private_key.pem'),
file_get_contents('/path/to/bank131/public_key.pem')
);
$client = new Client($config);
$hook = $client->handleWebHook('sign from headers', 'request body');
if ($hook->getType() === WebHookTypeEnum::READY_TO_CAPTURE) {
$session = $hook->getSession();
//do your logic here
} -
Спишите захолдированную сумму, меньшую сумму (
session/capture
) или отмените оплату (session/cancel
). -
Дождитесь от Банка 131 вебхука
payment_finished
с результатом проведения платежа. Статусsucceeded
сообщает вам, что платеж успешно проведен.
Схема платежа с холдированием
Чтобы провести платеж с холдированием с использованием виджета платежной формы, выполните следующие шаги:
-
Выполните шаги 1—5.
Если вы получите вебхук
action_required
, отправьте в ответ код HTTP 200 OK — пользователь будет перенаправлен для прохождения 3D Secure в виджете. -
Дождитесь от Банка 131 вебхука
ready_to_capture
. Это значит, что деньги для оплаты успешно заморожены на банковской карте пользователя. Их можно списать — сразу или через некоторое время. Списать можно полную сумму или меньше — передайте нужную сумму вamount_details
.Пример вебхука
- cURL
- PHP
curl -X POST \
https://partner.ru \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"type": "ready_to_capture",
"session": {
"id": "ps_3230",
"status": "in_progress",
"created_at": "2018-05-27T02:03:00.000000Z",
"updated_at": "2018-05-27T02:03:00.000000Z",
"acquiring_payments": [
{
"id": "pm_2018",
"status": "pending",
"created_at": "2018-05-27T02:03:00.000000Z",
"customer": {
"reference": "user123",
"contacts": [
{
"email": "user@gmail.com"
}
]
},
"payment_details": {
"type": "card",
"card": {
"last4": "4242",
"brand": "visa"
}
},
"amount_details": {
"amount": 10000,
"currency": "rub"
},
"metadata": "good"
}
]
}
}'use Bank131\SDK\Client;
use Bank131\SDK\Config;
use Bank131\SDK\Services\WebHook\Hook\WebHookTypeEnum;
$config = new Config(
'https://demo.bank131.ru',
'your_project_name',
file_get_contents('/path/to/your/private_key.pem'),
file_get_contents('/path/to/bank131/public_key.pem')
);
$client = new Client($config);
$hook = $client->handleWebHook('sign from headers', 'request body');
if ($hook->getType() === WebHookTypeEnum::READY_TO_CAPTURE) {
$session = $hook->getSession();
//do your logic here
} -
Спишите захолдированную сумму, меньшую сумму (
session/capture
) или отмените оплату (session/cancel
). -
Дождитесь от Банка 131 вебхука
payment_finished
с результатом проведения платежа. Статусsucceeded
сообщает вам, что платеж успешно проведен.