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

Выплата на банковскую карту с PCI DSS

Этот сценарий описывает отправку выплаты на банковскую карту, если вы можете получать и хранить данные банковских карт на своей стороне (у вас есть сертификат PCI DSS).

В этом случае у вас есть два варианта:

  • создать платежную сессию и отправить выплату одним запросом;
  • сначала создать платежную сессию, а потом отправить выплату.

Здесь описан только один вариант — с отдельным созданием сессии.

Выплата на карту с отдельным созданием сессии

Шаг 1. Создайте платежную сессию

Отправьте запрос на создание сессии session/create. В ответе придет идентификатор платежной сессии. Подробнее о платежной сессии

В заголовках запроса следует передать идентификатор вашего проекта и подпись запроса. Подробнее о формате запросов

Пример запроса на создание сессии

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: 721af394d5a7aefd0e91f5390abc4d7e20fb2b5784b091fef621f3c61b7abb4b' \
-d '{
"amount_details": {
"amount": 10000,
"currency": "rub"
},
"metadata": "order123"
}'

Шаг 2. Начните выплату

Отправьте запрос на проведение выплаты с помощью метода session/start/payout (этот метод подходит, если сессия уже была создана). В параметре session_id передайте идентификатор сессии, созданной на первом шаге. В параметре PaymentMethod.type передайте значение card. В объекте BankCard передайте данные банковской карты получателя.

Если вы отправляете деньги на карту российского банка, вам понадобится:

  • номер карты;
  • имя получателя;
  • и сумма в копейках (если платите 100 рублей, в поле amount_details.amount нужно передать 10000).

Посмотреть параметры для выплаты на российские карты

Если отправляете деньги на карту иностранного банка, вам понадобится:

  • номер карты;
  • имя получателя;
  • сумма в минорных единицах — в центах, копейках или других, зависит от валюты (если платите 100 евро, в поле amount_details.amount нужно передать 10000);
  • код валюты;
  • данные отправителя: имя, название компании, адрес, страна, город;
  • имя получателя.

Пример запроса

curl -X POST \
https://demo.bank131.ru/api/v1/session/start \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: e05794ee22f47ee5f674e63303ea227e6113f42359f332945304f1e958542fff' \
-d '{
"session_id": "3230",
"payment_method": {
"type": "card",
"card": {
"type": "bank_card",
"bank_card": {
"number": "4242424242424242"
}
}
},
"participant_details": {
"recipient": {
"full_name": "Ivanov Ivan"
}
},
"metadata": "good"
}'

Шаг 3. Дождитесь уведомления о готовности сделать выплату

Банк 131 отправит вам обязательный вебхук ready_to_confirm (на адрес для вебхуков, который вы заранее передали менеджеру Банка). Это значит, что выплату можно провести и Банк ждет вашего подтверждения (или отмены). В теле вебхука придут все данные для выплаты.

В ответ следует отдавать HTTP-код 200.

Пример вебхука ready_to_confirm

curl -X POST \
https://partner.ru \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-SIGN: a4f1698616d6ad7b8b73a9d72d281eeb443b64dee3f38df430eeed6aa29e1dc' \
-d '{
"type": "ready_to_confirm",
"session": {
"id": "3230",
"status": "in_progress",
"created_at": "2018-05-27T02:03:00.000000Z",
"updated_at": "2018-05-27T02:03:00.000000Z",
"next_action": "confirm",
"payments": [
{
"id": "2018",
"status": "pending",
"created_at": "2018-05-27T02:03:00.000000Z",
"customer": {
"reference": "user123",
"contacts": [
{
"email": "user@gmail.com"
}
]
},
"payment_method": {
"type": "card",
"card": {
"last4": "4242",
"brand": "visa"
}
},
"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. Подтвердите или отмените выплату

Проверьте данные для выплаты и подтвердите, что готовы её провести (с помощью запроса confirm_request) или отмените (отправьте запрос cancel_request).

Пример запроса confirm_request

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: 6eaf1e9cfa15f011e02c0a126187fe327a71e9d79be5e3fdb3f69dc5dfcd9872' \
-d '{
"session_id": "3230"
}'

Пример запроса cancel_request

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: 6eaf1e9cfa15f011e02c0a126187fe327a71e9d79be5e3fdb3f69dc5dfcd9872' \
-d '{
"session_id": "3230"
}'

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

Банк 131 отправит вам обязательный вебхук payment_finished. В теле вебхука придут все данные, с которыми проводилась выплата. Результат выплаты приходит в поле payment.status.

Если статус succeeded, значит, выплата прошла успешно. Если статуc 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
}