Выплаты по номеру карты
Чтобы делать выплаты по номеру карты, нужно выполнять требования стандарта PCI DSS для этого способа.
Шаг 1. Создайте платежную сессию
Отправьте запрос на создание платежной сессии session/create. В ответе вы получите идентификатор сессии. Этот идентификатор используется во всех последующих методах.
Вы можете создать сессию и выплату одновременно (
session/init/payout). В этом случае сразу передайте параметры выплаты с открытыми данными и пропустите следующий шаг. Не рекомендуем использовать этот способ.
Пример создания платежной сессии
- cURL
- PHP
curl -X POST \
https://demo.bank131.ru/api/v1/session/create \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"metadata": "good"
}'
use Bank131\SDK\API\Request\Builder\RequestBuilderFactory;
use Bank131\SDK\Client;
use Bank131\SDK\Config;
$config = new Config(
'https://demo.bank131.ru',
'your_project_name',
file_get_contents('/path/to/your/private_key.pem')
);
$client = new Client($config);
$request = RequestBuilderFactory::create()
->createPayoutSession()
->setMetadata('good')
->build();
$response = $client->session()->create($request);
Шаг 2. Отправьте выплату
Выполните запрос session/start/payout, передав идентификатор сессии и параметры выплаты с открытыми данными.
Пример выплаты по номеру карты
- cURL
- PHP
curl -X POST \
https://demo.bank131.ru/api/v1/session/start/payout \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"session_id": "ps_3230",
"payment_method": {
"type": "card",
"card": {
"type": "bank_card",
"bank_card": {
"number": "2200********4940"
}
}
},
"participant_details": {
"recipient": {
"full_name": "Иванов Иван Иванович"
}
},
"amount_details": {
"amount": 10000,
"currency": "rub"
},
"metadata": "good"
}'
use Bank131\SDK\API\Request\Builder\RequestBuilderFactory;
use Bank131\SDK\Client;
use Bank131\SDK\Config;
use Bank131\SDK\DTO\Card\BankCard;
use Bank131\SDK\DTO\Participant;
$config = new Config(
'https://demo.bank131.ru',
'your_project_name',
file_get_contents('/path/to/your/private_key.pem')
);
$client = new Client($config);
$participant = new Participant();
$participant->setFullName('Иванов Иван Иванович');
$request = RequestBuilderFactory::create()
->startPayoutSession('3230')
->setCard(new BankCard('2200********4940'))
->setRecipient($participant)
->setAmount(10000, 'rub')
->setMetadata('good')
->build();
$response = $client->session()->startPayout($request);
Шаг 3. Дождитесь вебхука о готовности выплаты
Банк 131 отправит вам вебхук ready_to_confirm о готовности провести выплату и ожидании вашего подтверждения или отмены.
Пример вебхука о готовности выплаты
curl -X POST \
https://partner.ru \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"type": "ready_to_confirm",
"session": {
"id": "ps_3230",
"status": "in_progress",
"created_at": "2025-05-27T02:03:00.012389Z",
"updated_at": "2025-05-27T02:03:00.023504Z",
"next_action": "confirm",
"payments": [{
"id": "po_2025",
"status": "pending",
"created_at": "2025-05-27T02:03:00.102036Z",
"payment_method": {
"type": "card",
"card": {
"last4": "4940",
"brand": "mir",
"bin": "220024",
"country_iso3": "RUS"
}
},
"participant_details": {
"recipient": {
"full_name": "Иванов Иван Иванович"
}
},
"amount_details": {
"amount": 10000,
"currency": "rub"
},
"metadata": "good"
}]
}
}'
Пример обработки вебхука с помощью 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::READY_TO_CONFIRM) {
$session = $hook->getSession();
//do your logic here
}
Шаг 4. Подтвердите или отмените выплату
Проверьте данные и подтвердите (session/confirm) или отмените (session/cancel) выплату.
Пример с подтверждением выплаты
- cURL
- PHP
curl -X POST \
https://demo.bank131.ru/api/v1/session/confirm \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"session_id": "ps_3230"
}'
use Bank131\SDK\Client;
use Bank131\SDK\Config;
$config = new Config(
'https://demo.bank131.ru',
'your_project_name',
file_get_contents('/path/to/your/private_key.pem')
);
$client = new Client($config);
$response = $client->session()->confirm('session_id');
Пример с отменой выплаты
- cURL
- PHP
curl -X POST \
https://demo.bank131.ru/api/v1/session/cancel \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"session_id": "ps_3230"
}'
use Bank131\SDK\Client;
use Bank131\SDK\Config;
$config = new Config(
'https://demo.bank131.ru',
'your_project_name',
file_get_contents('/path/to/your/private_key.pem')
);
$client = new Client($config);
$response = $client->session()->cancel('session_id');
Шаг 5. Дождитесь вебхука о результате выплаты
Банк 131 отправит вам вебхук payment_finished. Информация о результате выплаты содержится в параметре status массива payments/payout_list.
Статус succeeded означает, что выплата прошла успешно. Если статус failed — выплата не прошла из-за ошибки.
Какие бывают статусы выплаты >
Пример обработки вебхука с помощью 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_FINISHED) {
$session = $hook->getSession();
//do your logic here
}