Платеж банковской картой
Этот сценарий описывает прием платежа банковской картой для сервисов, у которых есть техническая возможность собирать и хранить данные карты на своей стороне.
В некоторых случаях для приема платежей необходимо передавать Банку цифровой отпечаток устройства пользователя. Свяжитесь с менеджером Банка, чтобы узнать, требуется ли это вам.
Чтобы автоматически получать цифровой отпечаток устройства пользователя и отправлять его в Банк, добавьте на страницу оплаты скрипт fp.js между тегами <head>
и </head>
, как показано в примере ниже. Если в процессе оплаты пользователь проходит несколько страниц, добавьте скрипт на каждую из них:
<script src="https://widget.bank131.ru/fp.js" async></script>
Пример скрипта
<html lang="ru">
<head>
<meta charset="utf-8" />
<title>Пример подключения скрипта fp.js | Банк 131</title>
<meta
name="description"
content="Примеры интеграции форм и элементов для Интернет-коммерции. Банк 131."
/>
<meta name="viewport" content="width=device-width,initial-scale=1" />
<meta name="format-detection" content="telephone=no" />
<!-- Подключение скрипта. -->
<script src="https://widget-demo.bank131.ru/fp.js" async></script>
</head>
<body>
<main>
<header>
<h1>Пример подключения скрипта fp.js</h1>
</header>
</main>
</body>
</html>
Здесь описан платеж с холдированием: деньги сначала блокируются на карте, а потом списываются с нее. Этот шаг можно пропустить.
Этот платеж проходит с подтверждением: когда банк готов принять платеж, он присылает вам вебхук
ready_to_capture
и ждет ответа (см. шаги 4–5). Можно исключить этот шаг и проводить все платежи по другому сценарию — без подтверждения.
Шаг 1. Создайте платежную сессию
Отправьте запрос на создание сессии session/create
. В ответе придет
идентификатор платежной сессии.
В заголовках запроса следует передать идентификатор вашего проекта и подпись запроса.
Пример создания сессии
- 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 '{
"customer": {
"reference": "user123",
"contacts": [
{
"email": "user@gmail.com"
}
]
},
"amount_details": {
"amount": 10000,
"currency": "rub"
},
"metadata": "order123"
}'
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()
->createPaymentSession()
->setAmount(10000, 'rub')
->setMetadata('order123')
->build();
$response = $client->session()->create($request);
Шаг 2. Начните платеж
Отправьте запрос на проведение платежа с помощью метода
session/start/payment
(этот метод подходит, если сессия уже была создана). В параметре session_id
передайте идентификатор сессии,
созданной на первом шаге. В поле type
объекта payment_method
/payout_details
передайте значение card
.
В объекте bank_card
передайте данные банковской карты пользователя.
Пример старта выплаты
- cURL
- PHP
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: signature' \
-d '{
"session_id": "ps_3230",
"payment_method": {
"type": "card",
"card": {
"number": "4242424242424242",
"expiration_month": "12",
"expiration_year": "22",
"security_code": "123",
"cardholder_name": "John Doe"
}
},
"customer": {
"reference": "user123",
"contacts": [
{
"email": "user@gmail.com"
}
]
},
"metadata": "good"
}'
use Bank131\SDK\API\Request\Builder\RequestBuilderFactory;
use Bank131\SDK\Client;
use Bank131\SDK\Config;
use Bank131\SDK\DTO\Card\BankCard;
$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()
->startPaymentSession('session_id')
->setCard(
new BankCard(
'4242424242424242',
'02',
'22',
'123',
'cardholder name'
)
)
->setCustomer(new Customer('lucky'))
->setMetadata('good')
->build();
$response = $client->session()->startPayment($request);