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

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

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

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

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

к сведению

Отменить возврат нельзя. Убедитесь, что это действительно необходимо.

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

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

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

Чтобы провести возврат, отправьте запрос 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"
}
}],
"transaction_info": {
"fp_message_id": "A50581324524670W0000040011450701"
}
}]
}
}'
Пример обработки вебхука с помощью 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
}