Правила оформления запросов
Для обмена данными API Банка использует формат JSON. Обмен происходит с помощью HTTP-запросов/ответов методами POST и GET.
Версия API
В настоящее время Банк 131 поддерживает две версии API для некоторых методов. В зависимости от версии используются разные названия для одних и тех же объектов.
Использование неправильных названий может привести к ошибкам выполнения операций.
API v1 | API v2 |
---|---|
payment_method | payout_details |
payments | payout_list |
acquiring_payments | payment_list |
Методы, поддерживаемые в API v2
session/create
session/init/payout
session/init/payout/fiscalization
session/start/payout
session/start/payout/fiscalization
session/init/payment
session/init/payment/sync
session/start/payment
session/confirm
session/capture
session/cancel
session/refund
fps/customer_verification
session/status
session/init/payout/nominal
session/multi/create/nominal
session/multi/init/payment/nominal
session/multi/start/payment/nominal
session/init/payout/rko
session/multi/create/rko
session/multi/start/payment/rko
Адрес для отправки запросов
Как сформировать
<адрес сервера> + /api/v{номер версии API} + <адрес для отправки запросов нужного метода>
Адрес сервера
- Для тестирования операций —
https://demo.bank131.ru
- Для операций с реальными данными —
https://proxy.bank131.ru
Например:
API v1: https://demo.bank131.ru/api/v1/session/init/payout
API v2: https://demo.bank131.ru/api/v2/session/init/payout
API-аутентификация
Каждый раз, когда вы отправляете запрос, вы должны предоставить идентификатор вашего проекта и подпись запроса, чтобы Банк мог вас идентифицировать и убедиться, что запрос пришел именно от вас.
Название | Обязательность | Тип | Описание |
---|---|---|---|
X-PARTNER-PROJECT | + | string | Идентификатор проекта. Выдается менеджером Банка 131 |
X-PARTNER-SIGN | + | string | Подпись запроса |
X-PARTNER-SUBMERCHANT | - (обязательно для финансовых организаций, являющихся нерезидентами РФ) | string | Идентификатор плательщика (юридического лица) |
Пример запроса с API-аутентификацией
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 '{
// тело запроса
}'
Подпись запроса
Подпись нужна, чтобы убедиться, что запрос пришел именно от вас, а не от кого-то другого, и не был изменен по пути. Для проверки подписи нужны два ключа: публичный (передается Банку в Акте признания ключа проверки электронной подписи) и секретный (хранится у вас). Банк использует публичный ключ для проверки запросов. Секретный — нужен для подписания ваших запросов, его нельзя никому показывать.
Вам нужно создать эти два ключа, используя алгоритм RSA.
Формирование подписи тела запроса
Подписать нужно весь запрос целиком, в том виде, в котором он отправляется в Банк (то есть весь текст в формате JSON). Для создания подписи потребуется ваш секретный ключ. Подпись создается с помощью метода шифрования SHA-256. После создания подпись нужно преобразовать в формат Base64, чтобы ее можно было передать вместе с запросом.
Проверка входящих запросов от Банка 131
Все исходящие запросы Банк 131 подписывает с помощью своего секретного ключа. Чтобы убедиться, что запрос действительно пришел от Банка, вы должны проверить эту подпись. Для этого у вас есть публичный ключ Банка. Вы используйте этот ключ и алгоритм SHA-256, чтобы проверить подпись. Подпись передается в формате Base64.
Сохраните публичный ключ Банка 131:
Примеры генерации и проверки подписи
- OpenSSL
- PHP
# Генерация приватного ключа
$ openssl genrsa -out private.pem 2048
# Генерация публичного ключа из приватного
$ openssl rsa -in private.pem -pubout > public.pem
# Формирование содержимого файла myfile.txt
$ echo test > myfile.txt
# Генерация подписи
$ openssl dgst -sha256 -sign private.pem -out sha256.sign myfile.txt
# Готовая подпись для передачи
$ base64 sha256.sign
# Проверка подписи
$ openssl dgst -sha256 -verify public.pem -signature sha256.sign myfile.txt
Verified OK
$data = "test";
//Получение указателя на приватный и публичный ключи
$privateKey = openssl_pkey_get_private("file://private.pem");
$publicKey = openssl_pkey_get_public("file://public.pem");
//Генерация подписи по данным с использованием приватного ключа
openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256);
openssl_free_key($privateKey);
//Для передачи подпись кодируем в формат Base64
$base64Signature = base64_encode($signature);
//При получении подписи декодируем ее обратно из Base64
$decodedSignature = base64_decode($base64Signature);
//Проверяем полученную подпись с использованием публичного ключа (1 - успех)
$isValid = openssl_verify($data, $decodedSignature, $publicKey, OPENSSL_ALGO_SHA256);
Ключ идемпотентности
Ключ идемпотентности — это уникальный код, который вы создаете для каждой операции, чтобы избежать повторного выполнения одной и той же операции. Например, вы отправили запрос на оплату, но из-за медленного интернета, не уверены, что он прошел. Если вы отправите запрос еще раз, может случиться так, что деньги спишутся два раза. Чтобы этого избежать, используйте ключ идемпотентности.
Вы сами создаете ключ и отправляете его вместе с запросом. Банк запоминает этот ключ и, если получит запрос с таким же ключом в течение 24 часов, поймет, что это повторный запрос, и не выполнит операцию снова.
Идентификатор ключа идемпотентности указывается в заголовке запроса.
Название | Обязательность | Тип | Описание |
---|---|---|---|
X-PARTNER-IDEMPOTENCY-KEY | - | string | Ключ идемпотентности. Формат: от 4 до 64 знаков |
Пример запроса с ключом идемпотентности
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' \
-H 'X-PARTNER-IDEMPOTENCY-KEY: testkey' \
-d '{
// тело запроса
}'
Список методов с поддержкой ключа идемпотентности
Возможные ошибки
При использовании ключа могут возникать ошибки. Ниже список типовых ошибок:
idempotency_key_params_mismatch
— ключ уже был использован ранее для другой сессии;idempotency_key_already_exists
— предыдущий запрос с таким же ключом еще не обработан;idempotency_key_not_supported
— метод не поддерживает использование ключа идемпотентности.
Библиотеки
Для интеграции по API Банка 131 вы можете использовать библиотеку PHP SDK.