Введение
Модуль Выплат позволяет Партнерам (юридическим лицам), имеющим небанковское ПО (бухгалтерская система, кассовое решение, иная собственная система), осуществлять передачу Получателям денежных средств. Поддерживаются следующие способы выплат:
- По номеру карты
- На сохраненную карту (связку получателя)
- По номеру телефона через Систему Быстрых Платежей (СБП). Выплаты на СБП возможны только с транзитного счета.
Возможность проводить Выплаты подключается по запросу в службу поддержки.
В процессе выплат участвуют следующие стороны:
- Получатель - физическое лицо, получающее выплату
- Плательщик - юридическое лицо (Партнер), осуществляющее перевод
- Сервис Партнера - приложение Партнера, занимающееся учетом и инициацией выплат в пользу физических лиц
- Модуль Выплат (далее МВ) - автоматизированная система Банка, предоставляющая Партнеру возможность осуществлять выплаты на банковские карты
Общий процесс взаимодействия с использованием только API вызовов (для работы с реквизитами получателя может потребоваться сертификация PCI DSS):
- Получатель обращается к Оператору Партнера или самостоятельно в Сервис Партнера за получением Выплаты;
- При получении обращения Сервис Партнера осуществляет сбор платежных реквизитов Получателя;
- Сервис Партнера регистрирует проведение Выплаты в МВ и подтверждает Выплату;
- Производится Выплата и возврат результата проведения Выплаты;
- Сервис Партнера может запросить статус Выплаты в любой момент.
Общий процесс взаимодействия с использованием API вызовов и страниц Банка (страница сбора реквизитов получателя, финишная страница):
- Получатель обращается к Оператору Партнера или самостоятельно в Сервис Партнера за получением Выплаты;
- При получении обращения Сервис Партнера регистрирует проведение выплаты в МВ;
- Сервис Партнера получает адрес страницы сбора реквизитов Получателя для ввода платежных реквизитов Получателя для отображения Оператору или Получателю;
- Страница сбора реквизитов Получателя осуществляет сбор платежных реквизитов Получателя и подтверждение Выплаты;
- Производится Выплата и возврат результата проведения Выплаты;
- Сервис Партнера может запросить статус Выплаты в любой момент.
Для выплаты денежных средств с транзитного счета Партнера необходимо поддержать следующие сценарии выплаты:
- сценарий запроса баланса через API
- сценарий выплаты с транзитного счета через API с передачей только объекта
target - сценарий выплаты с транзитного счета через API и платежную страницу
- сценарий запроса статуса выплаты
Для выплаты денежных средств с корпоративной карты Партнера необходимо поддержать следующие сценарии выплаты:
- сценарий создания связки корпоративной карты
- сценарий выплаты с корпоративной карты через API с передачей объектов
sourceиtarget - сценарий выплаты с корпоративной карты через API и платежную страницу
- сценарий запроса статуса выплаты
Особенности реализации и ограничения
- Отмены и возвраты ранее выполненных выплат не поддерживаются;
- Поддерживаются выплаты только в валюте с кодом 398 (KZT);
- Выплаты осуществляются только на карты банков Казахстана.
Сценарии работы с использованием API
Запрос баланса выплат через API
Данный сценарий описывает последовательность действий по запросу баланса выплат с использованием API.
(getAmount.do) activate PM PM->>PM: Проверка данных запроса,
сбор данных по балансу PM-->>PS: Ответ с данными
о балансе deactivate PM PS-->>O: Отображение баланса deactivate PS deactivate O
- Оператор принимает решение о запросе баланса по выплатам и выполняет на стороне Сервиса Партнера необходимые действия;
- Сервис Партнера отправляет запрос баланса (
getAmount.do) в Модуль Выплат; - Входная проверка данных, формирование информации о балансе выплат;
- Модуль Выплат возвращает в Сервис Партнера данные о балансе;
- Сервис Партнера отображает Оператору информацию о балансе.
Выплата денежных средств только через API
Данный сценарий описывает последовательность выплаты из сервиса партнера с использованием API. Сбор реквизитов Получателя реализуется на стороне Партнера (для работы с реквизитами получателя может потребоваться сертификация PCI DSS).
(performPayout.do) activate PM PM->>PM: Проверка данных запроса,
выполнение регистрационных
и платежных операций PM-->>PS: Ответ с результатом
осуществления выплаты deactivate PM PS-->>O: Статус выплаты deactivate PS deactivate O
- Оператор (или Получатель) принимает решение о проведении выплаты и выполняет на стороне Сервиса Партнера необходимые действия.
- Сервис Партнера отправляет запрос на осуществление выплаты (
performPayout.do) в Модуль Выплат и передает все необходимые параметры выплаты. В зависимости от того, какие параметры будут переданы в блокеtarget, выплата будет осуществляться по номеру карты, или по идентификатору связки получателя, или по номеру телефона через СБП. - Входная проверка данных, выполнение регистрационных и платежных операций.
- Модуль Выплат возвращает в Сервис Партнера итоговый статус выплаты.
- Сервис Партнера уведомляет Оператора (или Получателя) о статусе выплаты.
Выплата денежных средств через API и страницы выплат Банка
Данный сценарий описывает последовательность выплаты из сервиса партнера с использованием API и страницы выплат Банка. Сбор карточных данных Получателя реализуется с использованием страницы на стороне Банка (для этого не требуется сертификация PCI DSS).
(registerPayout.do) PM->PM: Регистрация выплаты PM-->>-PS: URL страницы для указания
реквизитов Получателя PS-->>-O: URL страницы для указания
реквизитов Получателя O->>+PM: Открытие страницы
Заполнение реквизитов Получателя
Подтвержение выплаты PM->PM: Выполнение выплаты PM-->>-O: Редирект на финишную страницу O->>+PM: Загрузка финишной страницы,
запрос результата выплаты activate PM PM->>PM: Формирование статуса PM-->>O: Результат осуществлении выплаты deactivate PM deactivate O
- Оператор (или Получатель) принимает решение о проведении выплат и выполняет на стороне Сервиса Партнера необходимые действия;
- Сервис Партнера отправляет в Модуль Выплат запрос на регистрацию выплаты (
registerPayout.do) и передает все необходимые параметры для регистрации; - Модуль Выплат регистрирует выплату;
- Модуль Выплат возвращает URL страницы (в ссылке присутствует уникальный идентификатор выплаты);
- Сервис Партнера перенаправляет Оператора (или Получателя) на полученный URL страницы;
- Оператор (или Получатель) переходит на страницу, заполняет реквизиты Получателя и подтверждает выплату;
- Модуль Выплат выполняет выплату;
- Модуль Выплат возвращает URL страницы (в ссылке присутствует уникальный идентификатор выплаты);
- Оператор (или Получатель) переходит на страницу, и инициирует получение статуса;
- Модуль Выплат формирует статус;
- Модуль Выплат показывает статус на странице.
Запрос статуса выплаты
Данный сценарий описывает последовательность запроса статуса выплаты с использованием API. Запросить актуальный статус выплаты можно на любом этапе ее проведения.
(getPayoutStatus.do) activate PM PM->>PM: Проверка данных запроса
и формирование ответа PM-->>PS: Ответ с результатом
проведения выплаты deactivate PM PS-->>O: Результат статуса выплаты deactivate PS deactivate O
- Оператор (или Получатель) запрашивает статус выплаты в Сервисе Партнера;
- Сервис Партнера отправляет в Модуль Выплат запрос статуса выплаты (
getPayoutStatus.do); - Модуль Выплат проверяет данные запроса и формирует ответ;
- Модуль Выплат возвращает в Сервис Партнера итоговый статус выплат;
- Сервис Партнера уведомляет Оператора (или Получателя) о статусе выплаты.
Связки в модуле Выплат
Связки — это сохраненные платежные данные. Связку можно использовать, чтобы не вводить данные карты каждый раз при осуществлении выплаты.
Модуль выплат поддерживает следующие типы связок:
- Связка получателя средств (связка зачисления, target).
- Связка плательщика (связка списания, source).
- Сохраненная корпоративная карта (связка списания, source).
Связки получателя
Создать связку получателя можно одним из следующих способов:
- С помощью метода API createTargetBindingId.do. На своей странице выплат Партнер может реализовать сохранение номера карты получателя. Если получатель подтвердит сохранение карты, Партнер вызовет метод создания связки. Возвращенный в результате идентификатор
bindingIdможно будет передавать в блокеtargetметода performPayout.do при последующих выплатах.
Связки плательщика
Партнер может предоставлять своим партнерам (дочерним мерчантам) возможность выступать в роли Плательщика. В таком случае дочерние мерчанты производят выплаты со своих счетов. Для этого Партнер создает для дочернего мерчанта связку плательщика методом createSourceBindingId.do. Возвращенный в результате выполнения метода идентификатор bindingId можно будет передавать в блоке source метода performPayout.do при осуществлении выплат.
Добавление корпоративной карты в личном кабинете
В этом разделе описана функциональность привязки корпоративной банковской карты для осуществления выплат. Эта функциональность доступна только при наличии соответствующих прав доступа - уточните у поддержки.
Для Настроек выполните следующие шаги:
- Выполните вход в личный кабинет.
- В левой панели перейдите в раздел Настройки.
- Выбрать подраздел Мои карты.

Для того, чтобы привязать банковскую карту, нажмите кнопку Добавить карту. После этого откроется окно Добавление карты, где необходимо заполнить все поля:
- «Номер карты» - введите цифровое значение номера вашей карты
- «Месяц» - из выпадающего списка выберите месяц окончания срока действия карты
- «Год» - из выпадающего списка выберите год окончания срока действия карты
- «CVC» - укажите код банковской карты - три цифры, указанные на оборотной стороне карты

После заполнения всех полей в форме нажмите кнопку Сохранить карту. После чего появляется окно для подтверждения.
В поле «Пароль» необходимо ввести пароль, высланный в СМС на ваш мобильный номер, к которому привязана карта. После ввода пароля нажмите на кнопку Подтвердить.
Для подтверждения с добавляемой карты автоматически спишется (и сразу вернется) минимальная сумма. Добавленная карта отобразится на странице:

Если щелкнуть по привязанной карте, появляются кнопки:
- Сделать карту основной;
- Копировать ID связки;
- Удалить карту.

Для выплат с использованием API вам необходимо скопировать ID связки и использовать ее для указания в параметре source.bindingId HTTPS POST API запроса /payouts/api/v2/performPayout.do при проведении выплаты.
Настройка КНП в Личном кабинете
Чтобы настроить значение КНП, Вы должны обладать соответствующей пермиссией. Для настройки необходимо выполнить следующие действия.
- Выполните вход в личный кабинет.
- В левой панели перейдите в раздел Настройки.
- Выбрать подраздел Значение КНП.

- В поле Значение КНП введите соответствующее цифровое значение КНП или воспользуйтесь справочником КНП кодов, нажав на одноименную кнопку.

- Введите цифровое значение КНП или слово для поиска, выберите необходимое значение и нажмите кнопку Применить.

API запросы для выплат
Запросы осуществляются с использованием протокола HTTP 1.1 с использованием SSL (HTTPS), на адрес:
TEST: https://3dsec.berekebank.kz/payouts/api/{api_version}/{api_method}
PROD: https://securepayments.berekebank.kz/payouts/api/{api_version}/{api_method}
HTTPS POST API запросы должны отвечать следующим требованиям:
- Авторизация запросов осуществляется с использованием пары логин - пароль с передачей в теле запроса.
- Тело запроса передается в формате
application/json.
- Тело ответа возвращается в формате
application/json.
HTTPS POST API запросы должны содержать заголовки:
- Content-Type: application/json; charset=UTF-8
- Accept: application/json; version=2.0
Актуальная версия API для указания в контексте запроса ({api_version}): v2
Требования безопасности
- Все сетевые взаимодействия производятся только по HTTPS.
- Приложение должно проверять корректность SSL-сертификата сервера. Если SSL-сертификат не прошел проверку, необходимо немедленно прекратить сессию, чтобы не допустить утечку данных авторизации.
Запрос проверки доступности Модуля Выплат
Для проверки работоспособности Модуля Выплат необходимо использовать HTTPS GET API запрос /payouts/api/v2/echo
Параметры запроса
Параметры не требуются.
Параметры ответа
Ответ предоставляется в формате text/plain.
В ответе указывается текущая версия модуля выплат и имя ноды через дефис, в квадратных скобках указано имя инстанса.
Пример запроса
curl --location 'https://3dsec.berekebank.kz/payouts/api/v2/echo'Пример ответа
Payout v2.3 is online in channel Payout_APIserver - svip01[instance:svipUAT]Запрос баланса
Для запроса остатка баланса для выплат необходимо использовать HTTPS POST API запрос /payouts/api/v2/getAmount.do.
Данный запрос возвращает данные об остатке баланса при условии успешной обработки запроса.
Параметры запроса
| Обязательность | Параметр | Тип | Описание |
|---|---|---|---|
| Обязательно | userName |
String [30] | Логин Партнера, полученный при подключении |
| Обязательно | password |
String [30] | Пароль Партнера, полученный при подключении |
| Условие | source |
Object | Объект для передачи информации о реквизитах источника средств. Указывается только в следующих случаях:
|
| Условие | source.bindingId |
String [36] | Идентификатор связки, по реквизитам которой должно быть списание денежных средств |
Параметры ответа
| Обязательность | Параметр | Тип | Описание |
|---|---|---|---|
| Обязательно | errorCode |
String | Код ошибки обработки запроса |
| Условие | errorMessage |
String [512] | Описание ошибки |
| Условие | balanceDescriptionList |
Object | Объект для передачи информации об остатке |
| Условие | balanceDescriptionList.balanceSign |
String | Тип доступного остатка. Возможные значения:
|
| Условие | balanceDescriptionList.balanceAmount |
Integer | Сумма доступного остатка денежных средств в минимальных единицах валюты |
| Условие | balanceDescriptionList.balanceCurrency |
String | Код валюты доступного остатка (ISO 4217) |
| Необязательно | balanceDescriptionList.balanceDescription |
String | Описание доступного остатка |
Пример запроса
curl --location 'https://3dsec.berekebank.kz/payouts/api/v2/getAmount.do' \
--header 'Content-Type: application/json' \
--data-raw '{
"userName": "payout_api_username",
"password": "payout_api_password",
"source": {
"bindingId": "4908a3c3-6c7c-75d3-9707-66ab06c12040"
}
}'Пример ответа
{
"errorCode": "0",
"balanceDescriptionList": {
"balanceAmount": 49925200,
"balanceCurrency": "398",
"balanceSign": "C"
}
}Регистрация выплаты
Для регистрации выплаты необходимо использовать HTTPS POST API запрос /payouts/api/v2/registerPayout.do.
Данный запрос осуществляет регистрацию Выплаты и возвращает ссылку на страницу указания реквизитов Получателя.
Сбор реквизитов получателя реализуется на стороне Банка (для работы с реквизитами получателя не требуется сертификация PCI DSS).
Параметры запроса
| Обязательность | Параметр | Тип | Описание |
|---|---|---|---|
| Обязательно | userName |
String [30] | Логин Партнера, полученный при подключении |
| Обязательно | password |
String [30] | Пароль Партнера, полученный при подключении |
| Обязательно | orderNumber |
String[32] | Уникальный идентификатор выплаты в системе Партнера |
| Обязательно | amount |
Integer [12] | Сумма выплаты в минимальных единицах валюты |
| Обязательно | currency |
String | Код валюты платежа в соответствии с ISO 4217 |
| Необязательно | description |
String [598] | Описание выплаты в свободной форме |
| Необязательно | language |
String [2] | Ключ языка по ISO 639-1. Если язык не указан, используется язык по умолчанию |
| Необязательно | sessionTimeoutSecs |
Integer | Продолжительность жизни заказа на Выплату в секундах. В случае если параметр не задан, будет использовано значение по умолчанию (1200 секунд) |
| Необязательно | merchantLogin |
String | Логин дочернего мерчанта, от имени которого необходимо выполнить оплату. Используется совместно с родительско-дочерней схеме мерчантов. |
| Условие | client |
Object | Объект для передачи информации о Получателе выплаты |
| Условие | client.clientId |
String [30] | Номер (идентификатор) клиента в системе Партнера. Требуется передавать для использования функционала связок |
| Необязательно | client.email |
String [30] | Адрес электронной почты Получателя |
| Необязательно | client.phone |
String [10] | Номер телефона Получателя. Номер должен состоять из десяти цифр, например, 9991234567
|
| Обязательно | client.name |
String [24] | Имя Получателя латиницей |
| Условие | source |
Object | Объект для передачи информации о реквизитах источника средств. Указывается только в следующих случаях:
|
| Условие | source.bindingId |
String [36] | Идентификатор связки, по реквизитам которой должно быть списание денежных средств |
| Условие | urls |
Object | Объект для передачи информации об используемых URL |
| Обязательно | urls.returnUrl |
String | Адрес, на который требуется перенаправить Оператора (или Получателя) в случае успешной Выплаты. Адрес должен быть указан полностью, включая протокол |
| Необязательно | urls.failUrl |
String | Адрес, на который требуется перенаправить Оператора (или Получателя) в случае неуспешной Выплаты. Адрес должен быть указан полностью, включая протокол |
| Необязательно | jsonParams |
Object | Объект для передачи дополнительной информации по выплате для последующего хранения. Передаются в виде: {"name1":"value1", ... ,"nameN":"valueN"} |
| Необязательно | jsonParams.$name |
String | Дополнительный параметр со свободным названием |
Параметры ответа
| Обязательность | Параметр | Тип | Описание |
|---|---|---|---|
| Обязательно | errorCode |
String | Код ошибки обработки запроса |
| Условие | errorMessage |
String [512] | Описание ошибки |
| Условие | formUrl |
String | URL статической платежной страницы, на который надо перенаправить браузер клиента. Отсутствует, если регистрация заказа на Выплату не удалась по причине ошибки, указанной в errorCode |
| Условие | orderId |
String | Уникальный идентификатор заказа на Выплату. Отсутствует, если регистрация заказа на Выплату не удалась по причине ошибки, указанной в errorCode |
| Условие | orderNumber |
String | Идентификатор заказа на Выплату в системе Партнера. Копируется из запроса |
Пример запроса
curl --location 'https://3dsec.berekebank.kz/payouts/api/v2/registerPayout.do' \
--header 'Content-Type: application/json' \
--data-raw '{
"userName": "payout_api_username",
"password": "payout_api_password",
"orderNumber": "1645458818047",
"amount": 1234,
"currency": "398",
"description": "Decent payout",
"language": "EN",
"sessionTimeoutSecs": 300,
"client": {
"name": "John Doe",
"clientId": "12345abc-d67e-8901-23fg-h45i67jk8901",
"email": "payee@mail.com",
"phone": "9991234567"
},
"urls": {
"returnUrl": "https://partnerdomain.com/&result=ok",
"failUrl": "https://partnerdomain.com/&result=ok",
},
"jsonParams": {
"paramname1": "paramvalue1",
"paramname2": "paramvalue2"
}
}'Пример ответа
{
"errorCode": "0",
"orderNumber": "1645458818047",
"orderId": "da42b8d9-328b-45e6-aa35-235e348268bf",
"formUrl": "https://payoutdomain.com/payment/merchants/svip_payout_ab/payment_ru.html?mdOrder=da42b8d9-328b-45e6-aa35-235e348268bf"
}Проведение выплаты
Для проведения выплаты необходимо использовать HTTPS POST API запрос /payouts/api/v2/performPayout.do.
Данный запрос осуществляет связанную отработку Выплаты и возвращает статус.
Сбор реквизитов Получателя реализуется на стороне Партнера (для работы с реквизитами получателя требуется сертификация PCI DSS).
Параметры запроса
| Обязательность | Параметр | Тип | Описание |
|---|---|---|---|
| Обязательно | userName |
String [30] | Логин Партнера, полученный при подключении |
| Обязательно | password |
String [30] | Пароль Партнера, полученный при подключении |
| Обязательно | orderNumber |
String[32] | Уникальный идентификатор выплаты в системе Партнера |
| Обязательно | amount |
Integer [12] | Сумма выплаты в минимальных единицах валюты |
| Обязательно | currency |
String | Код валюты платежа в соответствии с ISO 4217 |
| Необязательно | description |
String [598] | Описание выплаты в свободной форме |
| Необязательно | language |
String [2] | Ключ языка по ISO 639-1. Если язык не указан, используется язык по умолчанию |
| Необязательно | merchantLogin |
String | Логин дочернего мерчанта, от имени которого необходимо выполнить оплату. Используется совместно с родительско-дочерней схеме мерчантов. |
| Условие | client |
Object | Объект для передачи информации о Получателе выплаты |
| Условие | client.clientId |
String [30] | Номер (идентификатор) клиента в системе Партнера. Требуется передавать для использования функционала связок |
| Необязательно | client.email |
String [30] | Адрес электронной почты Получателя |
| Необязательно | client.phone |
String [10] | Номер телефона Получателя. Номер должен состоять из десяти цифр, например, 9991234567
|
| Обязательно | client.name |
String [24] | Имя Получателя латиницей |
| Условие | source |
Object | Объект для передачи информации о реквизитах источника средств. Указывается только в следующих случаях:
|
| Условие | source.bindingId |
String [36] | Идентификатор связки, по реквизитам которой должно быть списание денежных средств |
| Условие | target |
Object | Объект для передачи информации о реквизитах получателя средств. По согласованию данный блок может отсутствовать |
| Условие | target.bindingId |
String | Идентификатор связки получателя, по реквизитам которой должно быть зачисление денежных средств. Указывается либо target.pan, либо target.bindingId, либо target.seToken, либо данные для проведения платежа по СБП (phone, bankId, lastName, firstName, middleName). Подробнее о создании связки см. Создание связки получателя. |
| Условие | target.pan |
String | Номер карты зачисления денежных средств. Указывается либо target.pan, либо target.bindingId, либо target.seToken, либо данные для проведения платежа по СБП (target.phone, target.bankId, target.lastName, target.firstName, target.middleName). |
| Условие | target.seToken |
String | Шифрованное значение платежных данных. Указывается либо target.pan, либо target.bindingId, либо target.seToken, либо данные для проведения платежа по СБП (target.phone, target.bankId, target.lastName, target.firstName, target.middleName). Подробнее о генерации seToken см. Запрос открытой компоненты ключа. |
| Условие | target.phone |
String | Телефон получателя выплаты. Передается в формате:
Пример для России: 0079261214249 - с лидирующими нулями; 79261214249 - без лидирующих нулей. Следует передавать либо токен ( seToken), либо данные карты (pan), либо идентификатор связки (bindingId), либо данные для проведения платежа по СБП (target.phone, target.bankId, target.lastName, target.firstName, target.middleName). |
| Условие | target.bankId |
String | Номер банка в системе СБП. Указывается для выплаты на СБП. Выплаты на СБП возможны только с транзитного счета. |
| Условие | target.lastName |
String | Фамилия получателя. Кириллица. Указывается для выплаты на СБП. |
| Условие | target.firstName |
String | Имя получателя. Кириллица. Указывается для выплаты на СБП. |
| Условие | target.middleName |
String | Отчество получателя. Кириллица. Указывается, если есть у Физического лица. Указывается для выплаты на СБП. |
| Необязательно | jsonParams |
Object | Объект для передачи дополнительной информации по выплате для последующего хранения. Передаются в виде: {"paramname1":"paramvalue1", ... ,"paramnameN":"paramvalueN"} |
| Необязательно | jsonParams.$name |
String | Дополнительный параметр со свободным названием |
Параметры ответа
| Обязательность | Параметр | Тип | Описание |
|---|---|---|---|
| Обязательно | amount |
Integer [12] | Сумма выплаты в минимальных единицах валюты |
| Необязательно | fee |
Integer [12] | Сумма комиссии в минимальных единицах валюты |
| Обязательно | currency |
String | Код валюты платежа в соответствии с ISO 4217 |
| Условие | creationDate |
Integer | Дата и время создания (регистрации) выплаты в формате timestamp |
| Необязательно | description |
String [598] | Описание выплаты |
| Обязательно | errorCode |
String | Код ошибки обработки запроса (0 - нет ошибки) |
| Условие | errorMessage |
String [512] | Описание ошибки |
| Условие | orderId |
String [36] | Уникальный номер заказа в Модуле Выплат |
| Обязательно | orderNumber |
String [32] | Уникальный идентификатор заказа в системе Партнера |
| Обязательно | orderStatus |
String | Значение этого параметра указывает статус заказа в платежном шлюзе. Отсутствует, если заказ не был найден. Ниже приведен список доступных значений:
|
| Условие | orderParams |
Object | Дополнительные параметры выплаты, переданные при выплате |
| Необязательно | orderParams.$name |
String | Дополнительный параметр с любым названием |
| Необязательно | operationList |
Array of objects | Объект, содержащий информацию о транзакциях, завершенных в заказе |
| Необязательно | operationList.amount |
Integer [12] | Сумма операции в минимальных единицах валюты |
| Необязательно | operationList.cardholderName |
String [26] | Имя держателя карты (при наличии) |
| Необязательно | operationList.currency |
Integer [3] | Код валюты платежа ISO 4217 |
| Необязательно | operationList.operationDate |
Integer | Дата и время совершения операции в формате timestamp |
| Необязательно | operationList.operationType |
String | Тип транзакции. Доступны следующие значения:
|
| Необязательно | operationList.orderId |
String | Уникальный идентификатор заказа в Модуле Выплат |
| Необязательно | operationList.orderNumber |
String | Уникальный номер заказа в система Партнера |
| Необязательно | operationList.refNum |
String [12] | Идентификатор операции, который присваивается операции по ее завершению |
| Необязательно | operationList.resultCode |
Integer | Код ошибки при выполнении запроса. Возможные значения:
|
| Необязательно | operationList.resultCodeDescription |
String [512] | Описание кода ошибки транзакции |
| Условие | source |
Object | Объект для передачи информации о реквизитах источника средств. Указывается только в следующих случаях:
|
| Условие | source.bindingId |
String [36] | Идентификатор связки, по реквизитам которой должно быть списание денежных средств |
| Условие | target |
Object | Объект для передачи информации о реквизитах получателя средств |
| Необязательно | target.bindingId |
String [255] | Идентификатор связки получателя, использованной для выплаты |
| Необязательно | target.clientId |
String [255] | Идентификатор клиента использованный для выплаты |
| Необязательно | target.maskedPan |
String [19] | Маскированный номер карты зачисления использованной для выплаты |
| Необязательно | target.maskedPhone |
String | Маскированный номер телефона получателя (для выплат на СБП) |
| Условие | acsUrl |
String | URL для перехода на ACS (в случае если необходимо подтверждение транзакции по 3DS) |
| Условие | info |
String | Информационное сообщение (в случае если необходимо подтверждение транзакции по 3DS) |
| Условие | is3DSVer2 |
Boolean | Если true - требуется проверка по 3DS2 (в случае если необходимо подтверждение транзакции по 3DS) |
| Условие | mdOrder |
String | Идентификатор заказа в Модуле выплат (в случае если необходимо подтверждение транзакции по 3DS) |
| Условие | paReq |
String | Значение paReq для отправки в ACS (в случае если необходимо подтверждение транзакции по 3DS) |
| Условие | termUrl |
String | Адрес возврата с ACS (в случае если необходимо подтверждение транзакции по 3DS) |
| Условие | shortUrl |
String | Короткая ссылка для прохождения 3ds на стороне РБС. (передается только для 3ds ver.2) |
Пример запроса - источник фондирования транзитный счет
curl --location 'https://3dsec.berekebank.kz/payouts/api/v2/performPayout.do' \
--header 'Content-Type: application/json' \
--data-raw '{
"username": "payout_api_username",
"password": "payout_api_password",
"orderNumber": "payout_1",
"amount": 1234,
"currency": "398",
"client": {
"name": "John Doe",
"clientId": "12345abc-d67e-8901-23fg-h45i67jk8901",
"email": "payee@mail.com",
"phone": "9991234567"
},
"target": {
"pan": "4111111111111111"
},
"jsonParams": {
"paramname1": "paramvalue1",
"paramname2": "paramvalue2"
}
}'Пример запроса - источник фондирования корпоративная карта
curl --location 'https://3dsec.berekebank.kz/payouts/api/v2/performPayout.do' \
--header 'Content-Type: application/json' \
--data-raw '{
"username": "payout_api_username",
"password": "payout_api_password",
"orderNumber": "payout_1",
"amount": 1234,
"currency": "398",
"client": {
"name": "John Doe",
"clientId": "12345abc-d67e-8901-23fg-h45i67jk8901",
"email": "payee@mail.com",
"phone": "9991234567"
},
"source": {
"bindingId": "e7141803-e78a-79ef-9a10-db3b06c12040"
},
"target": {
"pan": "4111111111111111"
},
"jsonParams": {
"paramname1": "paramvalue1",
"paramname2": "paramvalue2"
}
}'Пример ответа
{
"errorCode": "0",
"errorMessage": "Успешно",
"amount": 1234,
"fee": 0,
"currency": "398",
"orderNumber": "1645458818059_12",
"description": "Decent payout",
"orderStatus": "2",
"operationList": [
{
"operationDate": 1665414462047,
"operationType": "P2P_CREDIT",
"amount": 1234,
"currency": "398",
"resultCode": 0,
"resultCodeDescription": "Перевод исполнен",
"refNum": "948498232196",
"pan": "411111XXXXXX1111",
"cardholderName": "CARDHOLDER NAME"
}
],
"source": {
"bindingId": "83309cde-a56d-7409-88dd-c02e00ab3428"
},
"target": {
"bindingId": "83309cde-a56d-7409-88dd-c02e00ab3428",
"clientId": "12345abc-d67e-8901-23fg-h45i67jk8901",
"maskedPan": "411111XXXXXX1111"
},
"orderParams": {
"paramname1": "paramvalue1",
"paramname2": "paramvalue2"
}
}Запрос статуса выплаты
Для получения статуса выплаты необходимо использовать HTTPS POST API запрос /payouts/api/v2/getPayoutStatus.do
Параметры запроса
| Обязательность | Параметр | Тип | Описание |
|---|---|---|---|
| Обязательно | userName |
String [30] | Логин Партнера, полученный при подключении |
| Обязательно | password |
String [30] | Пароль Партнера, полученный при подключении |
| Условие | orderNumber |
String | Идентификатор заказа в системе Партнера. В запросе должен присутствовать либо orderId, либо orderNumber
|
| Условие | orderId |
String | Уникальный идентификатор заказа на Выплату (в рамках модуля выплат). В запросе должен присутствовать либо orderId, либо orderNumber
|
| Необязательно | language |
String | Язык в кодировке ISO 639-1. Если не указан, будет использован язык по умолчанию |
Параметры ответа
| Обязательность | Параметр | Тип | Описание |
|---|---|---|---|
| Обязательно | errorCode |
String | Код ошибки обработки запроса (0 - нет ошибки) |
| Условие | errorMessage |
String [512] | Описание ошибки |
| Обязательно | amount |
Integer [12] | Сумма выплаты в минимальных единицах валюты |
| Необязательно | fee |
Integer [12] | Сумма комиссии в минимальных единицах валюты |
| Обязательно | currency |
String | Код валюты платежа в соответствии с ISO 4217 |
| Обязательно | orderNumber |
String [32] | Уникальный идентификатор заказа в системе Партнера |
| Условие | orderId |
String [36] | Уникальный номер заказа в Модуля Выплат |
| Необязательно | description |
String [598] | Описание заказа |
| Обязательно | orderStatus |
String | Значение этого параметра указывает статус заказа в платежном шлюзе. Отсутствует, если заказ не был найден. Ниже приведен список доступных значений:
|
| Необязательно | operationList |
Array of objects | Объект, содержащий информацию о транзакциях, завершенных в заказе |
| Необязательно | operationList.amount |
Integer [12] | Сумма операции в минимальных единицах валюты |
| Необязательно | operationList.cardholderName |
String [26] | Имя держателя карты (при наличии) |
| Необязательно | operationList.currency |
Integer [3] | Код валюты платежа ISO 4217 |
| Необязательно | operationList.operationDate |
Integer | Дата и время совершения операции в формате timestamp |
| Необязательно | operationList.operationType |
String | Тип транзакции. Доступны следующие значения:
|
| Необязательно | operationList.orderNumber |
String | Уникальный номер заказа в шлюзе. Присутствует только если у Партнера настроены выплаты с раздельными операциями на дебит и кредит. Узнать или изменить тип выплат можно по обращению в службу поддержки. |
| Необязательно | operationList.orderId |
String [1..36] | Уникальный идентификатор заказа в шлюзе. Присутствует только если у Партнера настроены выплаты с раздельными операциями на дебит и кредит. Узнать или изменить тип выплат можно по обращению в службу поддержки. |
| Необязательно | operationList.panMaskedTo |
String [19] | Маскированный номер карты для зачисления средств |
| Необязательно | operationList.refNum |
String [12] | Идентификатор операции, который присваивается операции по ее завершению |
| Необязательно | operationList.resultCode |
Integer | Код ошибки при выполнении запроса. Возможные значения:
|
| Необязательно | operationList.resultCodeDescription |
String [512] | Описание кода ошибки транзакции |
| Условие | source |
Object | Объект для передачи информации о реквизитах источника средств. Указывается только в следующих случаях:
|
| Условие | source.bindingId |
String [36] | Идентификатор связки, по реквизитам которой должно быть списание денежных средств |
| Условие | target |
Object | Объект для передачи информации о реквизитах получателя средств |
| Необязательно | target.bindingId |
String [255] | Идентификатор связки получателя, использованной для выплаты |
| Необязательно | target.clientId |
String [255] | Идентификатор клиента, использованный для выплаты |
| Необязательно | target.maskedPan |
String [19] | Маскированный номер карты зачисления, использованной для выплаты |
| Необязательно | target.maskedPhone |
String | Маскированный номер телефона получателя (для выплат на СБП) |
| Условие | orderParams |
Object | Дополнительные параметры выплаты, переданные при выплате |
| Необязательно | orderParams.$name |
String | Дополнительный параметр с любым названием |
Пример запроса
curl --location 'https://3dsec.berekebank.kz/payouts/api/v2/getPayoutStatus.do' \
--header 'Content-Type: application/json' \
--data-raw '{
"username": "payout_api_username",
"password": "payout_api_password",
"orderNumber": "payout_1"
}'Пример ответа
{
"errorCode": "0",
"errorMessage": "Успешно",
"amount": 1234,
"fee": 0,
"currency": "398",
"orderNumber": "1645458818059_12",
"description": "Decent payout",
"orderStatus": "2",
"operationList": [
{
"datetime": "1665414462047",
"operationType": "P2P_CREDIT",
"amount": 1234,
"currency": "643",
"resultCode": 0,
"resultCodeDescription": "Перевод исполнен",
"refNum": "948498232196",
"pan": "411111XXXXXX1111",
"cardholderName": "CARDHOLDER NAME"
}
],
"target": {
"bindingId": "83309cde-a56d-7409-88dd-c02e00ab3428",
"clientId": "12345abc-d67e-8901-23fg-h45i67jk8901",
"maskedPan": "411111XXXXXX1111"
},
"orderParams": {
"name1": "value1",
"name2": "value2"
}
}Создание связки получателя
Для создания связки получателя средств необходимо использовать API запрос /payouts/api/v2/createTargetBindingId.do. Данный запрос осуществляет создание связки с указанным идентификатором клиента и возвращает её параметры.
Параметры запроса
| Обязательность | Параметр | Тип | Описание |
|---|---|---|---|
| Обязательно | username |
String | Логин Партнера, полученный при подключении. |
| Обязательно | password |
String | Пароль Партнера, полученный при подключении. |
| Обязательно | orderNumber |
String | Уникальный идентификатор заказа в системе Партнера. Впоследствии можно использовать этот идентификатор в запросе getPayoutStatus.do, чтобы запросить результат создания связки. |
| Обязательно | clientId |
String | Номер (идентификатор) клиента в системе Партнера. |
| Обязательно | pan |
String | Номер карты для которой будет создана связка. |
| Необязательно | month |
String | Месяц срока действия карты |
| Необязательно | year |
String | Год срока действия карты |
| Необязательно | cardholderName |
String | Имя держателя карты |
Параметры ответа
| Обязательность | Параметр | Тип | Описание |
|---|---|---|---|
| Обязательно | errorCode |
String | Код ошибки (0 - нет ошибки) |
| Условие | errorMessage |
String | Описание ошибки. Присутствует только в случае, если произошла ошибка. |
| Обязательно | orderNumber |
String | Идентификатор заказа в системе Партнера. |
| Обязательно | orderId |
String | Уникальный идентификатор заказа на Выплату (в рамках модуля выплат) |
| Необязательно | bindingId |
String | Идентификатор связки. Если при выполнении метода произошла ошибка, и в результате связка не была создана, то параметры связки не будут возвращены в ответе. |
| Необязательно | clientId |
String | Идентификатор клиента |
| Необязательно | maskedPan |
String | Маскированный номер карты |
| Необязательно | orderType |
String | Тип заказа, зависит от метода на который обратился пользователь. Допустимые значения:
|
Пример запроса
curl --location 'https://3dsec.berekebank.kz/payouts/api/v2/createTargetBindingId.do' \
--header 'Content-Type: application/json' \
--data-raw '{
"pan": "4111111111111111",
"orderNumber": "1728285261_2111",
"clientId": "TestClientID",
"userName": "payout-api",
"password": "payout-api"
}'Пример ответа
{
"errorCode": "0",
"errorMessage": "SUCCESS",
"bindingId": "bff03edd-66ee-7f1d-ac01-936e088ae411",
"clientId": "TestClientID",
"maskedPan": "4111XXXXXXXX1111",
"orderNumber": "1728285261_2111"
}Создание связки плательщика
Для создания связки источника средств необходимо использовать API запрос /payouts/api/v2/createSourceBindingId.do. Данный запрос осуществляет создание связки с указанным идентификатором клиента и возвращает её.
После получения первого ответа необходимо будет пройти 3DS — см. Редирект на ACS. В результате будет получен второй ответ с параметрами созданной связки.
Параметры запроса
| Обязательность | Параметр | Тип | Описание |
|---|---|---|---|
| Обязательно | username |
String | Логин Партнера, полученный при подключении. |
| Обязательно | password |
String | Пароль Партнера, полученный при подключении. |
| Необязательно | merchantLogin |
String | Логин дочернего мерчанта, от имени которого необходимо создать связку. |
| Обязательно | pan |
String | Номер карты, для которой будет создана связка. |
| Обязательно | month |
String | Месяц срока действия карты. |
| Обязательно | year |
String | Год срока действия карты. |
| Обязательно | cvv |
String | CVV код карты. |
| Необязательно | cardholderName |
String | Имя держателя карты. |
| Обязательно | clientId |
String | Номер (идентификатор) клиента в системе Партнера. |
Параметры ответа
Первый ответ с параметрами для прохождения 3DS:
| Обязательность | Параметр | Тип | Описание |
|---|---|---|---|
| Необязательно | redirect |
String | Url для редиректа, когда все попытки оплаты завершены (успешно или не успешно). |
| Условие | acsUrl |
String | URL для перехода на ACS. Возвращается при успешном ответе, если карта вовлечена в 3DS. |
| Необязательно | info |
String | Информационное сообщение. |
| Обязательно | is3DSVer2 |
Boolean | Если true - требуется проверка по 3DS2. |
| Необязательно | mdOrder |
String | Идентификатор заказа в платежном шлюзе. |
| Условие | paReq |
String | paReq для отправки в ACS. Возвращается при успешном ответе, если карта вовлечена в 3DS. |
| Условие | termUrl |
String | Адрес возврата с ACS. Возвращается при успешном ответе, если карта вовлечена в 3DS. |
| Условие | shortUrl |
String | Короткая ссылка для прохождения 3DS. Передается только для 3DS ver.2. Возвращается при успешном ответе, если карта вовлечена в 3DS. |
| Обязательно | orderNumber |
String | Идентификатор заказа в системе Партнера. |
Второй ответ с данными связки:
| Обязательность | Параметр | Тип | Описание |
|---|---|---|---|
| Обязательно | errorCode |
String | Код ошибки (0 - нет ошибки). |
| Условие | errorMessage |
String | Описание ошибки. Возвращается в случае ошибки. |
| Обязательно | orderNumber |
String | Идентификатор заказа в системе Партнера. |
| Обязательно | orderId |
String | Идентификатор заказа в платежном шлюзе. |
| Обязательно | bindingId |
String | Идентификатор связки. |
| Обязательно | merchantLogin |
String | Логин дочернего мерчанта, для которого создана связка. |
| Необязательно | maskedPan |
String | Маскированный номер карты. |
| Необязательно | orderType |
String | Тип заказа, зависит от метода на который обратился пользователь. Допустимые значения:
|
| Обязательно | clientId |
String | Номер (идентификатор) клиента в системе Партнера. |
Пример запроса
curl --location 'https://3dsec.berekebank.kz/payouts/api/v2/createSourceBindingId.do' \
--header 'Content-Type: application/json' \
--data-raw '{
"pan": "4111111111111111",
"clientId": "ClientId",
"orderNumber": "1234567890",
"cvc": "123",
"year": "2034",
"month": "12",
"cardholderName": "Test Name",
"userName": "test_user",
"password": "test_user_password"
}Пример ответа
Пример ответа с данными 3DS:
{
"acsUrl": "https://tst.rbstest.ru/payment/rest/getwhitepageurl.do?mdOrder=7bfa0573-b798-4a3e-9380-da1438f23f47&threeDsServerTransId=019eccbe-2b19-49d0-86aa-b6124b27e81a",
"errorCode": "0",
"info": "Ваш платёж обработан, происходит переадресация...",
"is3DSVer2": false,
"mdOrder": "7bfa0573-b798-4a3e-9380-da1438f23f47",
"paReq": "White page paReq",
"shortUrl": "https://tst.rbstest.ru/payment/acsRedirect.do?orderId=7bfa0573-b798-4a3e-9380-da1438f23f47",
"termUrl": "https://tst.rbstest.ru/payouts/api/v2/finish3DSv2.do"
"orderNumber": "1234567890",
}Пример итогового ответа:
{
"errorCode": "0",
"errorMessage": "Успешно",
"bindingId": "08bc10f3-67b3-705b-a8af-bf0407752e00",
"clientId": "ClientId",
"maskedPan": "4111XXXXXXXX1111",
"merchantLogin": "testUser",
"orderId": "7bfa0573-b798-4a3e-9380-da1438f23f47",
"orderType": "createSourceBindingId",
"orderNumber": "1234567890"
}Запрос открытой компоненты ключа
Запрос /payouts/api/v2/keys.do возвращает публичный ключ модуля Выплат.
Для получения seToken, который можно передать в методе performPayout.do, необходимо зашифровать этим ключом строку timestamp/uuid/pan///////orderNumber с использованием алгоритма шифрования RSA "RSA/None/PKCS1Padding" с длиной ключа 2048.
Параметры запроса
Запрос направляется в модуль Выплат методом GET. Параметры отсутствуют.
Параметры ответа
| Обязательность | Параметр | Тип | Описание |
|---|---|---|---|
| Обязательно | keys |
Array[object] | Список действующих публичных ключей Модуля выплат |
| Обязательно | keys.keyValue |
String | Строковое представление публичного ключа, включая маркеры начала и окончания ключа |
| Обязательно | keys.keyExpiration |
Number | Срок действия ключа, дата в секундах по стандарту UNIX time |
| Необязательно | keys.protocolVersion |
String | Версия алгоритма шифрования |
Пример запроса
Откройте в браузере ссылку https://3dsec.berekebank.kz/payouts/api/v2/keys.do или выполните запрос:
curl 'https://3dsec.berekebank.kz/payouts/api/v2/keys.do'Пример ответа
{
"keys": [
{
"keyValue":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvnLlDQH6gu+6d7DT9EGa65QX7MgokW74S1gYIYTg3C6bf6z69Sg4EtXewCsp7txrCLBAkvns3Xf6tutYfVoFAIiZ45THXt7NNXTZw522AqfOVwDYUENwZgDqwh5LlAQv5H7Xb1gSF2H1vLPo4maZiuKiY64WzkHnDQJ6IzsHAArvXIA6f6QbRTqaI0GHUI7WHDRxNKh0p6z1HFLQxjj0yswR8eYTU2M0Zov7/4bMqB1Bgs4ByCi3AUeG2jtia04ycod2EROkddJcdPF23+G1JH0k2f3Y1XwKDuQI38oVY8HIaS1uriBrLWtCfw7sbtiowE4+cB7GOZsxtB9edKLygQIDAQAB",
"keyExpiration":1758189688460,
"protocolVersion":"RSA-2048"
}]
}Получение отчета по выплатам
Запрос getReportPayout.do позволяет получить выписку по выплатам Мерчанта.
Параметры запроса
| Обязательность | Параметр | Тип | Описание |
|---|---|---|---|
| Обязательно | userName |
String | Логин мерчанта, полученный при подключении. |
| Обязательно | password |
String | Пароль мерчанта, полученный при подключении. |
| Обязательно | startDate |
String | Начальная дата выписки. Формат: YYYY-MM-DD. |
| Обязательно | endDate |
String | Конечная дата выписки. Формат YYYY-MM-DD. Максимальная разница между начальной и конечной датой выписки - 31 день. |
| Обязательно | reportName |
String | Наименование необходимого отчета для мерчанта. Возможные значения:
|
Параметры ответа
| Обязательность | Параметр | Тип | Описание |
|---|---|---|---|
| Обязательно | errorCode |
Number | Код статуса обработки операции в модуле Выплат. Код 0 означает, что операция выполнена успешно. |
| Обязательно | errorMessage |
String | Описание результата обработки. |
| Обязательно | startDate |
String | Начальная дата выписки. Значение такое же, как в запросе. |
| Обязательно | endDate |
String | Конечная дата выписки. Значение такое же, как в запросе. |
| Обязательно | reportName |
String | Наименование необходимого отчета для мерчанта. Значение такое же, как в запросе. |
| Необязательно | terminalId |
String | Идентификатор устройства. Пример: 4225764450179702. |
| Необязательно | accountNumber |
String | Номер счета обеспечения. Пример: KZ42914992240KZ001DC. |
| Необязательно | balanceInput |
String | Баланс счета на начало периода. Разделитель - ".". Формат: 2 цифры после точки. |
| Необязательно | balanceOutput |
String | Баланс счета на конец периода. Разделитель - ".". Формат: 2 цифры после точки. |
| Необязательно | turnoverDB |
String | Обороты по дебету за указанный период. Разделитель - ".". Формат: 2 цифры после точки. |
| Необязательно | turnoverCR |
String | Обороты по кредиту. Разделитель - ".". Формат: 2 цифры после точки. |
| Необязательно | transactions |
Array[object] | Массив транзакций. |
| Обязательно | transactions.paymentOrderNumber |
String | Номер документа. Пример: 25905147. |
| Обязательно | transactions.operationDate |
String | Дата операции. Формат: YYYY-MM-DD. Пример: 2024-09-06. |
| Обязательно | transactions.payerBank |
String | Банк плательщика. Поле может быть пустым. |
| Обязательно | transactions.payerName |
String | Наименование плательщика. Поле может быть пустым, если отправитель — сама организация (перевод внутри банка со своего счета), в назначении платежа будет указана информация. |
| Обязательно | transactions.debitAmount |
String | Сумма по дебету. Разделитель - ".". Формат: 2 цифры после точки. Пример: 140266492.47. |
| Обязательно | transactions.creditAmount |
String | Сумма по кредиту. Разделитель - ".". Формат: 2 цифры после точки. Пример: 115056640.23. |
| Обязательно | transactions.paymentPurpose |
String | Назначение платежа или описание платежа. Пример: "Обеспечение по договору №129-xx/70. Платежи за финансовые услуги, за исключением платежей с кодами назначения платежа 842 и 843" |
Пример запроса
curl --location 'https://3dsec.berekebank.kz/payouts/api/v2/getReportPayout.do' \
--header 'Content-Type: application/json' \
--data '{
"startDate": "2025-02-03",
"endDate": "2025-02-06",
"reportName": "SSPV_AcctStatement",
"userName": "test_user",
"password": "test_user_password"
}'Пример ответа
{
"errorCode": "0",
"errorMessage": "Успешно",
"reportName": "SSPV_AcctStatement",
"startDate": "2025-02-09",
"endDate": "2025-04-09",
"terminalId": "4225764450179702",
"accountNumber": "KZ50914992240KZ001D8",
"balanceInput": "50000000.00",
"balanceOutput": "50000000.00",
"turnoverDB": "2000000.00",
"turnoverCR": "3000000.00",
"transactions": [
{
"paymentOrderNumber": "25905147",
"operationDate": "2025-02-04",
"payerBank": "BankName",
"payerName": "ТОО MerchantCompany",
"debitAmount": "200.00",
"creditAmount": "0.00",
"paymentPurpose": "Test"
}
]
}Подпись запросов API
Модуль Выплат поддерживает подпись следующих API-запросов:
Подпись выполняется так же, как для API-запросов в платежный шлюз с тем отличием, что тело API-запросов модуля Выплат передается только в формате JSON. Модуль выплат использует для подписи запросов тот же сертификат, что и платежный шлюз. Если вы еще не сгенерировали и не загрузили сертификат, сделайте это, следуя документации.
Ниже описан порядок реализации подписи API-запросов в модуль Выплат и приведены примеры тела запроса, его хэша и подписи.
Реализация подписи
-
Рассчитайте хеш SHA256 тела запроса следующим образом:
- Используйте тело запроса в виде строки без пробелов и переносов строк, например:
{"amount":953,"currency":"643","source":{"bindingId":"6e8eb975-e1ba-7072-9f7a-5b7848ca5a88"},"target":{"pan":"4111111111111111"},"client":{"name":"client_name"},"orderNumber":"1744367939_0689","description":"test","userName":"test_user","password":"test_user_password"} - Вычислите хэш SHA256 из этой строки в необработанных байтах (raw bytes).
-
Преобразуйте необработанные байты в кодировку base64. Результат для строки из примера выше:
Hash Base64: hpMyyXfesrC9Z5lcRP5NiC81InQx9HRIDUHZKJg709A=
- Используйте тело запроса в виде строки без пробелов и переносов строк, например:
-
Для вычисленного хеша SHA256 (в кодировке base64) сгенерируйте подпись с помощью алгоритма RSA, используя закрытый ключ.
В примере используется следующий ключ с паролем "123456":
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFJDBWBgkqhkiG9w0BBQ0wSTAxBgkqhkiG9w0BBQwwJAQQl1SCKeYxJARFpK4+ vpuKWAICCAAwDAYIKoZIhvcNAgkFADAUBggqhkiG9w0DBwQIKpe1cwjenNkEggTI RMyPX7K5zOVqxxWepI3SA3craSsdbxuWCc+Aa2Zgr4ZsVRgFBb+kbv1ydjD86N9y YkZAkI5J45BVPscu9TQpCN41GkprwnWCs1NFiF1ba4yYcnPUOJW1kuyh1T2B692s A+SxWY+BZX9ffZ48LAvFwAhvIdVJaDEdtMfDpuUZXExA5aEu5Pn004ObmDHB/S3n F12c7D/gPG7hNu1Bs+0XHHVvKLzk5NFwqghFa3nms5yRQ/MeF4oElnv91KK+oxMR ceoOOq0dXAJ7Go1LsIrY9k2lhaKpQHkgIxZjHh4dPBdyY8OIppVvwx1q1WE8qtbi OK4t0MiMNBJCXcRebbYuBQhG5h0ppqGHmX+HpJ5bFEo5K+fHmu91nQbhM/uAaTio M8qABkPfl7Q3bG63r54PwQag2bMRgf4HNY9kZRvQgKoqp3/cTh25I1Fy86lGKKQH KZOOIQHtAGU0xlNRO9FK154M8Pa99qJ74R96gQE08+hBWHNKf3CLnU4jsJlLnqwz IKLGZ4plZgUD8VegG1HLINi1ahnkTvlSJFZy5ygZKn3kRmtBmhL+Ns4kr6+Bu/ra EMJsVwqQCenA0IuzL/0Boq+hMY9+tsD5JpMB3x7EJxzr7/3rk+4LMWpNpxTyY1M3 Dx/KNS7+zWT1pnFwHLTz4Vqt3npEEDJFTZuPUB2J9A/mXveE6Tr+pkLVFW3Pz4xm IuRoz4I1Ag494kUivV6XqW9eVIPmJP1X4zi/BXwM9JTFQNMDsbEyP2Wp+0yKs7J6 s7Rzd71/Y5xlO1iL++oW8QdhcoX46Pr0vqgu8aItl8irFtEItrp9qGd/SS8+HvAO POC8fzwzaK/qPP1ywSidv8wys7f1V9bE/9Me9rReqR8iA5VWG2ZqJG/4peszI9i9 IQ4NsidwhtjcqMv/sYvNpSlyckMZQrZy1oTU2IDPFakV/uhxC7nhkFW7wMrS5CMs Mxzrj7zbt19MVpfvjW+DrHDHgPz+qteki86p7dEwgbe8Sirg5D57HM3XLFki9yPu eLa1TUJXknPFgcnKWRVEJaNMefQPbt6yE0lEjsSobRXlqfueHqMycPqU3KJmwkaw 2xTCtNQmrulba5BOgNX68yiUNxPLeajg7I2SRN8DO7ZNCqbsmd3v9+hh63oYuMGK Un/QQlYLpz1+ZLo7pLwBfWpaPIMm5Zdzof2W+uQB6KHKV3r0c5vYh4RVG5gufrjn zRRdp1CmdllUqepsruvhSqPo79sNYwyavbI3/8J9BCIg2kUnYEPuXmubtw7/4/+c wMtW9xrsw52rBuB288H6kcDSOKp7hCFvNShSK+hFz5uOh8DFi+8DFLMxstDS1+Or wBPXMSytHAQ0WlF1TvQvgY0L6ZPcsWp0WF3BBbMuvFx3qF6TI/k4YFbCvfi+5Ei+ 99cefeMYEkudCGvQbWqy9W4HDsNNMPHVNZ8BCDm8+dD0QPLXPx7dKGErk8W7VSjm 51WAqtwruLNolrrQL2AgKCp1Q5SQwas1Q9h7QOBTmDlU5ewbgogKMkUmTSzwZzYU S7nOt9PODRH5xOfYbgVdgJPfqDqK3hLKwl0zGRbs4vUFnlOe9uMK7mvDtQrmxndX o02fBHS9SFyMj6wfXjV+cH3INGpvsenO
-----END ENCRYPTED PRIVATE KEY-----Полученная подпись:
gEU2NarCF478VyMYG7/wqjHDP4Ok08zCaRshUocko872j3AHi91G6S/xyRYK4gYykK+F2mXb7vZJdb3WzvL+If7MlPnDl7oC7hDFp8iR75ZfqT2k4znnqOQfuNa0mBTkUG3d+4YXtyTdY0f9rZCnWU+ANWQGXmTWxHhFf1vmsYQAD3q4aMEuoksXnhi32e14N/GUx26+8MiFvLVjb7Rgynwriv5xFlQ1HjFDQXokAbIwWZ0HrulGZvBkxQs0HIKxZJPegpJt2UODcqfhvBwmTYeXdTaqNUqvcVG041XjH3aEx3AJUwLZLEnCJpPWwcXxJ++EL3L7lEz2kRtoBOKYMQ== Передайте сгенерированный хэш (
X-Hash) и значение подписи (X-Signature) в заголовке запроса. Запрос будет выглядеть так:
curl 'https://sb02.tst.rbstest.ru/payouts/api/v2/performPayout.do' \
-H 'X-hash: hpMyyXfesrC9Z5lcRP5NiC81InQx9HRIDUHZKJg709A=' \
-H 'X-signature: gEU2NarCF478VyMYG7/wqjHDP4Ok08zCaRshUocko872j3AHi91G6S/xyRYK4gYykK+F2mXb7vZJdb3WzvL+If7MlPnDl7oC7hDFp8iR75ZfqT2k4znnqOQfuNa0mBTkUG3d+4YXtyTdY0f9rZCnWU+ANWQGXmTWxHhFf1vmsYQAD3q4aMEuoksXnhi32e14N/GUx26+8MiFvLVjb7Rgynwriv5xFlQ1HjFDQXokAbIwWZ0HrulGZvBkxQs0HIKxZJPegpJt2UODcqfhvBwmTYeXdTaqNUqvcVG041XjH3aEx3AJUwLZLEnCJpPWwcXxJ++EL3L7lEz2kRtoBOKYMQ== -H 'Content-Type: application/json' \
-d '{"amount":953,"currency":"643","source":{"bindingId":"6e8eb975-e1ba-7072-9f7a-5b7848ca5a88"},"target":{"pan":"4111111111111111"},"client":{"name":"client_name"},"orderNumber":"1744367939_0689","description":"test","userName":"test_user","password":"test_user_password"}'Чтобы запрос был выполнен, должны быть соблюдены следующие требования:
- Все параметры запроса включены в тело запроса (не в URL).
-
Поскольку параметры запроса передаются в формате JSON, должен использоваться следующий заголовок:
--header 'content-type: application/json' Запрос содержит правильный логин и пароль пользователя API.
Заголовок
X-Hashсодержит хэш SHA256 тела запроса (рассчитывается на Шаге 1).Заголовок
X-Signatureсодержит подпись для хэша SHA256, рассчитанную с помощью алгоритма RSA с использованием закрытого ключа (генерируется на Шаге 2).
Пример кода генерации подписи на Python
import base64
import hashlib
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.backends import default_backend
data = """{"amount":953,"currency":"643","source":{"bindingId":"6e8eb975-e1ba-7072-9f7a-5b7848ca5a88"},"target":{"pan":"4111111111111111"},"client":{"name":"client_name"},"orderNumber":"1744367939_0689","description":"test","userName":"test_user","password":"test_user_password"}"""
priv_key_pem = """
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFJDBWBgkqhkiG9w0BBQ0wSTAxBgkqhkiG9w0BBQwwJAQQl1SCKeYxJARFpK4+
vpuKWAICCAAwDAYIKoZIhvcNAgkFADAUBggqhkiG9w0DBwQIKpe1cwjenNkEggTI
RMyPX7K5zOVqxxWepI3SA3craSsdbxuWCc+Aa2Zgr4ZsVRgFBb+kbv1ydjD86N9y
YkZAkI5J45BVPscu9TQpCN41GkprwnWCs1NFiF1ba4yYcnPUOJW1kuyh1T2B692s
A+SxWY+BZX9ffZ48LAvFwAhvIdVJaDEdtMfDpuUZXExA5aEu5Pn004ObmDHB/S3n
F12c7D/gPG7hNu1Bs+0XHHVvKLzk5NFwqghFa3nms5yRQ/MeF4oElnv91KK+oxMR
ceoOOq0dXAJ7Go1LsIrY9k2lhaKpQHkgIxZjHh4dPBdyY8OIppVvwx1q1WE8qtbi
OK4t0MiMNBJCXcRebbYuBQhG5h0ppqGHmX+HpJ5bFEo5K+fHmu91nQbhM/uAaTio
M8qABkPfl7Q3bG63r54PwQag2bMRgf4HNY9kZRvQgKoqp3/cTh25I1Fy86lGKKQH
KZOOIQHtAGU0xlNRO9FK154M8Pa99qJ74R96gQE08+hBWHNKf3CLnU4jsJlLnqwz
IKLGZ4plZgUD8VegG1HLINi1ahnkTvlSJFZy5ygZKn3kRmtBmhL+Ns4kr6+Bu/ra
EMJsVwqQCenA0IuzL/0Boq+hMY9+tsD5JpMB3x7EJxzr7/3rk+4LMWpNpxTyY1M3
Dx/KNS7+zWT1pnFwHLTz4Vqt3npEEDJFTZuPUB2J9A/mXveE6Tr+pkLVFW3Pz4xm
IuRoz4I1Ag494kUivV6XqW9eVIPmJP1X4zi/BXwM9JTFQNMDsbEyP2Wp+0yKs7J6
s7Rzd71/Y5xlO1iL++oW8QdhcoX46Pr0vqgu8aItl8irFtEItrp9qGd/SS8+HvAO
POC8fzwzaK/qPP1ywSidv8wys7f1V9bE/9Me9rReqR8iA5VWG2ZqJG/4peszI9i9
IQ4NsidwhtjcqMv/sYvNpSlyckMZQrZy1oTU2IDPFakV/uhxC7nhkFW7wMrS5CMs
Mxzrj7zbt19MVpfvjW+DrHDHgPz+qteki86p7dEwgbe8Sirg5D57HM3XLFki9yPu
eLa1TUJXknPFgcnKWRVEJaNMefQPbt6yE0lEjsSobRXlqfueHqMycPqU3KJmwkaw
2xTCtNQmrulba5BOgNX68yiUNxPLeajg7I2SRN8DO7ZNCqbsmd3v9+hh63oYuMGK
Un/QQlYLpz1+ZLo7pLwBfWpaPIMm5Zdzof2W+uQB6KHKV3r0c5vYh4RVG5gufrjn
zRRdp1CmdllUqepsruvhSqPo79sNYwyavbI3/8J9BCIg2kUnYEPuXmubtw7/4/+c
wMtW9xrsw52rBuB288H6kcDSOKp7hCFvNShSK+hFz5uOh8DFi+8DFLMxstDS1+Or
wBPXMSytHAQ0WlF1TvQvgY0L6ZPcsWp0WF3BBbMuvFx3qF6TI/k4YFbCvfi+5Ei+
99cefeMYEkudCGvQbWqy9W4HDsNNMPHVNZ8BCDm8+dD0QPLXPx7dKGErk8W7VSjm
51WAqtwruLNolrrQL2AgKCp1Q5SQwas1Q9h7QOBTmDlU5ewbgogKMkUmTSzwZzYU
S7nOt9PODRH5xOfYbgVdgJPfqDqK3hLKwl0zGRbs4vUFnlOe9uMK7mvDtQrmxndX
o02fBHS9SFyMj6wfXjV+cH3INGpvsenO
-----END ENCRYPTED PRIVATE KEY-----
"""
# HASH в base64
hash_bytes = hashlib.sha256(data.encode('utf-8')).digest()
hash_base64 = base64.b64encode(hash_bytes).decode('utf-8')
print("Hash base64: ", hash_base64)
# Подпись
private_key = serialization.load_pem_private_key(
priv_key_pem.encode('utf-8'),
password=b'123456', # Пароль для расшифровки ключа
backend=default_backend()
)
signature = private_key.sign(
hash_base64.encode("utf-8"),
padding.PKCS1v15(),
hashes.SHA256()
)
signature_base64 = base64.b64encode(signature).decode('utf-8')
print("Signature: ", signature_base64)Ключ для примера Python должен быть в PEM-формате с элементами BEGIN и END.
Описание ошибок
| HTTP code | errorCode | errorMessage | Описание |
|---|---|---|---|
| 200 OK | 116 | Insufficient funds | Сумма транзакции превышает доступный остаток средств |
| 200 OK | 121 | Limit is depleted | Предпринята попытка выполнить транзакцию на сумму, превышающую дневной лимит, заданный банком-эмитентом. |
| 200 OK | 902 | Card is restricted | Ограничение по карте (Владелец карты пытается выполнить транзакцию, которая для него не разрешена) |
| 400 Bad request | 98 | [paramName] is а required parameter | При запросе в модуль выплат не указан обязательный параметр |
| 400 Bad request | 98 | [paramName] does not match required pattern [pattern] | При запросе в модуль выплат указанный параметр не соответствует заданному регулярному выражению |
| 400 Bad request | 98 | Errors while parsing incoming request: [requestMessage] is not set for method [api_method] | При разборе входящего сообщения невозможно найти метод указанный в запросе |
| 400 Bad request | 98 | Invalid request | При разборе входящего сообщения обнаружена ошибка |
| 400 Bad request | 98 | No order identification provided to find order in database | Не указан Order ID. При формировании запроса в БД не удалось найти в запросе параметра, по которому можно осуществить поиск |
| 400 Bad request | 98 | Order not found in payout proxy. Check orderId or orderNumber | При запросе в модуль выплат указанный номер заказа не найден |
| 400 Bad request | 98 | Currency does not match required pattern | При запросе в модуль выплат выбрана не корректна валюта |
| 400 Bad request | 98 | Сard affiliation does not match required pattern | При запросе в модуль выплат выбрана карта не разрешенная в данном процессе |
| 400 Bad request | 98 | userName and password are mandatory fields | При запросе в модуль выплат не указан логин или пароль |
| 400 Bad request | 98 | Payout config error: debit method is incorrect for specified payout type | Для данного типа оплаты должен быть определен метод дебетования |
| 400 Bad request | 98 | Source is not specified or is incorrect compared to configured debit tools | Источник в запросе отличается от ожидаемого |
| 400 Bad request | 98 | Invalid request. client.name is empty | Отсутствует обязательный параметр client.name |
| 400 Bad request | 98 | The order[orderNumber] is not registered in the gateway and contains errors. Please register a new order. | Регистрация заказа завершилась ошибкой на этапе проверки, до регистрации в шлюзе. Проверьте данные и зарегистрируйте новый заказ. |
| 401 Not authorized | 90 | User not authenticated | Авторизация пользователя (продавца) в шлюзе завершилась неудачей |
| 404 Not Found | - | - | Метод не найден |
| 500 Server error | 99 | Order was not processed correctly. Please check order status manually | Внутренняя ошибка SVIP. Полученный статус заказа вернулся не "успешно". Необходимо вручную запросить статус выплаты. |
| 500 Server error | 99 | No merchant settings available | Не удалось найти настройки пользователя (продавца) по логину или авторизационному токену |
| 401 Not authorized | 90 | Wrong password for user [user_name] | Введен неверный пароль. |
| 500 Server error | 99 | There was an error getting gateway parameters | Ошибка разбора параметров подключений к шлюзам и/или микросервисам |
| 500 Server error | 99 | Failed to parse incoming request for [messageType] | Ошибка при разборе входящего JSON сообщения указанного типа (например, некорректный JSON) |
| 502 Bad Gateway | 99 | Failed to call hessian method: [hessian_method] | Ошибка вызова метода шлюза (метод не найден, параметры некорректны и т.п.) |
| 502 Bad Gateway | 99 | Error calling rest method [service_name] | Ошибка вызова метода rest (метод не найден, параметры некорректны и т.п.) |
| 502 Bad Gateway | 99 | Rest response was unsuccessfull | Ошибка вызова метода rest |
| 502 Bad Gateway | 99 | 3DS authorization was requested but is not supported in API calls | Ошибка вызова, запрошен 3ds, выплаты не поддерживают работу с 3ds |
| 502 Bad Gateway | 99 | Unable to get card data for specified bindingId | По bindingId не получены данные карты из шлюза |
| 502 Bad Gateway | 204 | Cannot find any bin range in db for [bin] | Введенный bin карты, не найден в Базе данных |
| 502 Bad Gateway | 204 | Unsupported pan | Pan не поддерживается |
| 502 Bad Gateway | 400 | Invalid request: bin is empty or is not numeric | Бин карты получателя пустой или не число |
| 502 Bad Gateway | 98 | Mrbin can't find this card | Mr.bin не может найти данный номер карты в базе, необходимо проверить корректность ввода номера карты |
| 504 Timeout | 91 | Timeout when requesting [gateway] | Шлюз недоступен |
| 504 Timeout | 91 | Timeout when requesting [service_name] | Сервис недоступен |