Двухстадийные платежи (холдирование средств на банковской карте)
В некоторых случаях требуется блокировать денежные средства на карте плательщика до момента подтверждения сделки со стороны ТСП. В таких случаях необходимо использовать функционал двухэтапной оплаты.
Данный функционал активируется для выбранного сервиса по отдельному согласованию. Согласно правилам платежных систем операция должна быть выставлена к оплате в течение 7-ми дней, поэтому средства могут находиться в статусе "Для утверждения" максимум 7 дней - по истечению этого срока средства автоматически становятся доступны плательщику.
При проведении оплаты денежные средства блокируются на карте клиента, а списание или отмена платежа проводится сотрудником ТСП.
Двухэтапные платежи по рекуррентам в МПС МИР запрещены!
По факту блокировки средств система инициирует нотификацию command=funds_blocked
, описание в разделе Получение дополнительных параметров о транзакции.
Платежи которые требуют подтверждения отражаются в личном кабинете как показано на следующем экране:
При обработке менеджер ТСП может выбрать следующие действия:
- отменить блокировку
- подтвердить списание полной
- подтвердить списание меньшей сумму
API управления зарезервированными средствами
Общая информация о методе
Метод доступен только для service_id
, с активированным режимом "двухстадийная оплата". С помощью данного метода продавец принимает решение о списании CHARGE
или разблокировке средств UNBLOCK
.
Обработка транзакции в состоян ии BLOCKED (HOLD)
Запрос выполняется на URL: https://api-ecom.life-pay.ru/v1/services/{service_id}/charges/{charge_id}/blocked
, где {service_id}
- ИД вашего магазина из личного кабинета, а {charge_id}
возвращается в вебхук-нотфикации после успешной авторизации плательщиком на странице банка-эмитента.
Параметры для списания CHARGE
и разблокировки UNBLOCK
идентичны. URL так же одинаковый. Отличие заключается в типе запроса:
- PATCH-запрос для CHARGE
- DELETE-запрос для UNBLOCK
В заголовке запроса необходимо передать Content-Type: “application/json”. Авторизация осуществляется с помощью JWT Bearer, полученного в ответ на запрос https://api-ecom.life-pay.ru/v1/auth
В ответ возвращается JSON
с результатом обработки запроса:
{
"status": "charged",
"message": "string"
}
Поля, возвращающиеся в случае некорректного запроса:
Параметр | Тип объекта | Описание |
---|---|---|
message | string | текст ошиб ки (опционально) |
status | string | статус сущности |
- Python
- C#
- PHP
import http.client
import json
conn = http.client.HTTPSConnection("api-ecom.life-pay.ru")
headersList = {
"Content-Type": "application/json",
"Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiIsImtpZCI6ImlrYW9paW91eXRBb3V5ckRTVVRZT0FGU2l5U2ZvdHVBZ3lsU0FEIiwiZXhwIjoxNjgwNzk4MjkwLjE5ODI5M30.eyJleHAiOjE2ODA3OTgyOTAuMTk4MjkzLCJpbnZvaWNlX2lkIjpudWxsLCJzZXJ2aWNlX2lkIjo4MTI2OH0.RdlWBzgEYVkDRhlUNZ0F19VynPnddkc37k-UI3PwOwTjhNSuDgGPTDXTTdZwdZLw6XFprRjOj0C-oeS4zpuj0Q"
}
payload = json.dumps({
"amount": 50.00
})
conn.request("PATCH", "/v1/services/81268/charges/799dbc4b-b20c-41cf-b751-5dcc7bb2247e/blocked", payload, headersList)
response = conn.getresponse()
result = response.read()
print(result.decode("utf-8"))
var client = new HttpClient();
var request = new HttpRequestMessage();
request.RequestUri = new Uri("https://api-ecom.life-pay.ru/v1/services/81268/charges/799dbc4b-b20c-41cf-b751-5dcc7bb2247e/blocked");
request.Method = HttpMethod.Patch;
request.Headers.Add("Authorization", "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiIsImtpZCI6ImlrYW9paW91eXRBb3V5ckRTVVRZT0FGU2l5U2ZvdHVBZ3lsU0FEIiwiZXhwIjoxNjgwNzk4MjkwLjE5ODI5M30.eyJleHAiOjE2ODA3OTgyOTAuMTk4MjkzLCJpbnZvaWNlX2lkIjpudWxsLCJzZXJ2aWNlX2lkIjo4MTI2OH0.RdlWBzgEYVkDRhlUNZ0F19VynPnddkc37k-UI3PwOwTjhNSuDgGPTDXTTdZwdZLw6XFprRjOj0C-oeS4zpuj0Q");
var bodyString = "{ \"amount\": 50.00}";
var content = new StringContent(bodyString, Encoding.UTF8, "application/json");
request.Content = content;
var response = await client.SendAsync(request);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
<?php
use Illuminate\Support\Facades\Http;
$response = Http::withBody(
'{
"amount": 50.00
}', 'json'
)
->withHeaders([
'Content-Type'=> 'application/json',
'Authorization'=> 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiIsImtpZCI6ImlrYW9paW91eXRBb3V5ckRTVVRZT0FGU2l5U2ZvdHVBZ3lsU0FEIiwiZXhwIjoxNjgwNzk4MjkwLjE5ODI5M30.eyJleHAiOjE2ODA3OTgyOTAuMTk4MjkzLCJpbnZvaWNlX2lkIjpudWxsLCJzZXJ2aWNlX2lkIjo4MTI2OH0.RdlWBzgEYVkDRhlUNZ0F19VynPnddkc37k-UI3PwOwTjhNSuDgGPTDXTTdZwdZLw6XFprRjOj0C-oeS4zpuj0Q',
])
->patch('https://api-ecom.life-pay.ru/v1/services/81268/charges/799dbc4b-b20c-41cf-b751-5dcc7bb2247e/blocked');
echo $response->body();