Перейти к основному содержимому

Возвраты платежей

Успешный платеж может быть возвращен пользователю следующим образом:

  • в рамках операции refund — это наиболее распространенный случай, платеж может быть возвращен полностью или частично;
  • в рамках процедуры chargeback — данная процедура не может быть инициирована партнером, уведомление о ней приходит от Банка 131. В этом случае сумма списывается из возмещения.

Записи об обеих операциях заносятся в реестры.

Как провести возврат

Шаг 1. Отправьте запрос на возврат

Обратите внимание, что отправить запрос можно только на refund.

Чтобы провести возврат, отправьте запрос session/refund. В поле session_id передайте идентификатор платежной сессии из платежа, который нужно вернуть. В поле amount_details.amount укажите сумму возврата. Если не укажете, деньги вернутся полностью — на всю сумму платежа.

Пример запроса
curl -X POST \
https://demo.bank131.ru/api/v1/session/refund \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"session_id": "ps_3230"
}'

Шаг 2. Дождитесь уведомления о результате возврата

После того, как возврат пройдет, Банк 131 пришлет вам вебхук payment_refunded с результатом возврата.

Пример вебхука
curl - X POST\
https: //partner.ru \
-H 'Content-Type: application/json'\ -
H 'X-PARTNER-SIGN: signature' \
d '{
"type": "payment_refunded",
"session": {
"id": "ps_3230",
"status": "accepted",
"created_at": "2018-05-27T02:03:00.000000Z",
"updated_at": "2018-05-27T02:03:00.000000Z",
"acquiring_payments": [
{
"id": "pm_2705",
"status": "succeeded",
"created_at": "2018-05-27T02:03:00.000000Z",
"finished_at": "2018-05-27T02:03:00.000000Z",
"customer": {
"reference": "lucky"
},
"payment_details": {
"type": "card",
"card": {
"brand": "visa",
"last4": "4242"
}
},
"amount_details": {
"amount": 1000,
"currency": "rub"
},
"metadata": "good",
"refunds": [
{
"id": "rf_203",
"status": "accepted",
"created_at": "2018-05-27T02:03:00.000000Z",
"finished_at": "2018-05-27T02:03:00.000000Z",
"amount_details": {
"amount": 1000,
"currency": "rub"
}
}
]
}
]
}
}'
Пример обработки вебхука с помощью SDK
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::PAYMENT_REFUNDED) {
$session = $hook->getSession();
//do your logic here
}