Платеж через нашу платежную форму
Этот сценарий описывает отправку платежа на банковскую карту через платежную форму. Это вариант подходит, если вы приняли решение не собирать и не хранить данные банковских карт на своей стороне.
Вы можете получить токенизированные данные карты с помощью виджета платежной формы и безопасно провести оплату.
Данный сценарий не учитывает шаг с холдированием платежа. Как провести платеж с холдированием
-
Отправьте запрос на создание сессии
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); -
Сгенерируйте публичный токен для работы с виджетом. Отправьте запрос на создание токена
token
, передайте в нем идентификатор сессии и тип виджета, который будете вызывать. В ответе придет токен.Если хотите добавить в платежную форму чекбокс Соглашаюсь на автоплатежи, передайте в поле
show_recurrent_checkbox
значениеtrue
. Это нужно, чтобы проводить рекуррентные списания.Пример запроса
- cURL
- PHP
curl -X POST \
http://demo.bank131.ru/api/v1/token \
-H 'Content-Type: application/json' \
-H 'X-PARTNER-PROJECT: your_project_name' \
-H 'X-PARTNER-SIGN: signature' \
-d '{
"acquiring_widget": {
"session_id": "ps_123456"
}
}'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()
->issuePublicTokenBuilder()
->setAcquiringWidget(
'test_ps_id',
'http://success.url',
'http://failed.url',
false
)
->build();
$publicTokenResponse = $client->widget()->issuePublicToken($request);
$publicToken = $publicTokenResponse->getPublicToken(); -
Покажите получателю платежную форму. Для этого нужно подключить нашу JavaScript-библиотеку и добавить виджет платежной формы. Покупатель вводит данные своей карты и нажимает Оплатить, и Банк 131 инициирует платеж без вашего участия.
-
Дождитесь от Банка 131 вебхука
ready_to_confirm
— это значит, что платеж можно провести и Банк ждет вашего подтверждения.В теле вебхука придут все данные для платежа, их нужно проверить.
В ответ следует отдавать HTTP-код 200.
Пример вебхука
- cURL
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": "2018-05-27T02:03:00.000000Z",
"updated_at": "2018-05-27T02:03:00.000000Z",
"acquiring_payments": [
{
"id": "pm_2018",
"status": "pending",
"created_at": "2018-05-27T02:03:00.000000Z",
"customer": {
"reference": "user123",
"contacts": [
{
"email": "user@gmail.com"
}
]
},
"payment_details": {
"type": "card",
"card": {
"last4": "4242",
"brand": "visa"
}
},
"amount_details": {
"amount": 10000,
"currency": "rub"
},
"metadata": "good"
}
]
}
}'Пример обработки вебхука с помощью SDK
- PHP
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
} -
Проверьте данные для платежа и подтвердите, что готовы его провести (
session/confirm
) или отмените (session/cancel
).Если карта пользователя требует пройти 3D Secure, вы получите вебхук
action_required
— отправьте в ответ HTTP-код 200. Клиент будет перенаправлен на 3D Secure автоматически.Пример запроса session/confirm
- 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');Пример запроса session/cancel
- 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'); -
Дождитесь от Банка 131 вебхука
payment_finished
. В теле вебхука придут все данные, с которыми проводился платеж. Результат платежа приходит в полеstatus
объектаacquiring_payments/payment_list
.Если статус
succeeded
, значит, оплата прошла успешно. Если статусfailed
— оплата не прошла из-за ошибки.