По любому вопросу мы в одном клике

Задать вопрос

Общее описание модуля Выплат

Модуль Выплат позволяет Партнерам (юридическим лицам), имеющим небанковское ПО (бухгалтерская система, кассовое решение, иная собственная система), осуществлять передачу Получателям денежных средств. Поддерживаются следующие способы выплат:

Возможность проводить Выплаты подключается по запросу в службу поддержки.

В процессе выплат участвуют следующие стороны:

Общий процесс взаимодействия с использованием только API вызовов (для работы с реквизитами получателя может потребоваться сертификация PCI DSS):

  1. Получатель обращается к Оператору Партнера или самостоятельно в Сервис Партнера за получением Выплаты;
  2. При получении обращения Сервис Партнера осуществляет сбор платежных реквизитов Получателя;
  3. Сервис Партнера регистрирует проведение Выплаты в МВ и подтверждает Выплату;
  4. Производится Выплата и возврат результата проведения Выплаты;
  5. Сервис Партнера может запросить статус Выплаты в любой момент.

Общий процесс взаимодействия с использованием API вызовов и страниц Банка (страница сбора реквизитов получателя, финишная страница):

  1. Получатель обращается к Оператору Партнера или самостоятельно в Сервис Партнера за получением Выплаты;
  2. При получении обращения Сервис Партнера регистрирует проведение выплаты в МВ;
  3. Сервис Партнера получает адрес страницы сбора реквизитов Получателя для ввода платежных реквизитов Получателя для отображения Оператору или Получателю;
  4. Страница сбора реквизитов Получателя осуществляет сбор платежных реквизитов Получателя и подтверждение Выплаты;
  5. Производится Выплата и возврат результата проведения Выплаты;
  6. Сервис Партнера может запросить статус Выплаты в любой момент.

Для выплаты денежных средств с корпоративной карты Партнера необходимо поддержать следующие сценарии выплаты:

Особенности реализации и ограничения

  1. Отмены и возвраты ранее выполненных выплат не поддерживаются;
  2. Поддерживаются выплаты только в валюте с кодом 933 (BYN);

Выплаты в Личном кабинете

Список выплат

Раздел Выплаты в Личном кабинете позволяет просматривать список выплат, а также производить выплаты на карту. Чтобы перейти в раздел, нажмите значок в левой боковой панели. На открывшейся странице представлен список уже сделанных выплат, если таковые имеются.

Отображаются следующие данные:

Также в этом списке можно просматривать информацию о выплате, нажав значок .

Проведение выплаты

Прежде чем начать делать выплаты из Личного кабинета, нужно добавить корпоративную карту.

Чтобы выполнить выплату, нажмите на кнопку Произвести выплату и задайте параметры перевода.

Общие параметры для всех способов выплат:

Доступные способы выплат:

В зависимости от способа выплаты необходимо задать описанные ниже параметры.

Выплата на карту

Для выплаты на карту необходимо указать номер карты клиента, на которую будет отправлен платеж.

Выплата без указания карты получателя

Получатели могут самостоятельно указать номер своей карты на специальной странице. Для регистрации выплаты без карты получателя перейдите на вкладку Без карты получателя и заполните данные:

ПараметрОписание
ФамилияФамилия получателя
ИмяИмя получателя
ОтчествоОтчество получателя
ID клиентаИдентификатор получателя в системе Партнера, который будет использоваться для создания связки получателя и отображения существующих связок на странице выплаты.
Электронная почтаАдрес электронной почты получателя. На этот адрес будет отправлено письмо со ссылкой на страницу, где получатель сможет ввести данные своей карты.
ТелефонНомер телефона получателя

После подтверждения выплаты клиенту отправляется электронное письмо со ссылкой на страницу выплаты. Вы также можете поделиться ссылкой на эту страницу или загрузить QR-код, содержащий эту ссылку, в открывшемся диалоговом окне:

По этой ссылке клиент увидит страницу выплаты, где сможет выбрать одну из сохраненных карт или указать новую:

Выплата на сохраненную карту

Для проведения выплаты на сохраненную карту необходимо выбрать в списке одну из ранее сохраненных карт.

О том, как сохранять и удалять карты в этом списке, см. в разделе Связки получателя.

Подтверждение выплаты

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

Также может потребоваться прохождение 3DS — нужно будет ввести код для подтверждения списания средств с корпоративной карты.

После успешного проведения выплаты отобразится окно с сообщением об успехе операции.

Пакетные выплаты

В Личном кабинете поддерживаются пакетные выплаты. Для проведения выплат этим способом Партнер может загрузить в Личный кабинет файл с информацией о выплатах в формате csv или xlsx (реестр), а затем провести выплаты согласно данным в этих файлах. Шаблоны файлов с указанием необходимых полей доступны в Личном кабинете при проведении выплаты.

У Партнера должно быть разрешение на проведение пакетных (реестровых) выплат.

Для проведения пакетной выплаты:

  1. Перейдите на вкладку Пакетные выплаты на странице Выплаты.

    На этой странице приведен список ранее добавленных файлов, если таковые имеются, и доступна следующая информация о файлах:

    • Имя файла
    • Состояние (например, Загружено для добавленных файлов или Завершено для уже обработанных файлов)
    • Логин продавца — логин Партнера в банке (может отличаться от логина в Личном кабинете).
    • Дата создания — дата добавления файла в Личный кабинет.
  2. Нажмите Произвести выплату. Будет открыта страница для добавления файла.

  3. Добавьте файл с реестром выплат. Для его создания скачайте шаблон в формате CSV или XLSX и добавьте строки с данными. Обратите внимание, что код валюты указывается в формате Alpha-3 ISO 3166-1 (трехбуквенный код). Размер выплаты указывается в минимальных единицах валюты, например, 1000 — это 10 рублей 00 копеек. Пример содержимого файла CSV:

    creditPan,currency,amount,name
    "4111111111111111",RUB,"1000","test 1"
    "4111111111111111",RUB,"234500","test 2"
  4. Файл отобразится в списке на вкладке Пакетные выплаты. Нажмите значок рядом с названием загруженного файла. Будет открыта страница с информацией о пакетной выплате.

  5. Проверьте правильность данных. Доступна следующая информация о пакетной выплате:

    • Статус загрузки файла (например, Загружено или Завершено)
    • Логин продавца — логин Партнера в банке (может отличаться от логина в Личном кабинете).
    • Дата создания — дата добавления файла в Личный кабинет.
    • Всего / Обработано — общее количество записей и количество обработанных записей.
    • Ошибки — количество ошибок при проведении выплат из файла.
    • Сумма — общая сумма всех выплат, записанных в файле.
      Также приводятся данные об отдельных платежах:
    • Название выплаты
    • Состояние — статус отдельной выплаты, например, Не запущено, Завершено или Ошибка.
    • Номер карты — маскированный номер карты, на которую произведена выплата.
    • Сумма отдельной выплаты
    • Номер записи — порядковый номер строки с данными в загруженном файле реестра.
1. Выберите одну из корпоративных карт, с которой хотите произвести выплату.
  1. Нажмите Произвести выплаты.
  2. Выполните подтверждение выплаты.

Сценарии работы с использованием API

Выплата денежных средств только через API

Данный сценарий описывает последовательность выплаты из сервиса партнера с использованием API. Сбор реквизитов Получателя реализуется на стороне Партнера (для работы с реквизитами получателя может потребоваться сертификация PCI DSS).

sequenceDiagram participant O as Оператор participant PS as Сервис Партнера participant PM as Модуль выплат autonumber O->>PS: Инициация выплаты activate O activate PS PS->>PM: Запрос на осуществление выплаты
(performPayout.do) activate PM PM->>PM: Проверка данных запроса,
выполнение регистрационных
и платежных операций PM-->>PS: Ответ с результатом
осуществления выплаты deactivate PM PS-->>O: Статус выплаты deactivate PS deactivate O
  1. Оператор (или Получатель) принимает решение о проведении выплаты и выполняет на стороне Сервиса Партнера необходимые действия.
  2. Сервис Партнера отправляет запрос на осуществление выплаты (performPayout.do) в Модуль Выплат и передает все необходимые параметры выплаты. В зависимости от того, какие параметры будут переданы в блоке target, выплата будет осуществляться по номеру карты, или по идентификатору связки получателя.
  3. Входная проверка данных, выполнение регистрационных и платежных операций.
  4. Модуль Выплат возвращает в Сервис Партнера итоговый статус выплаты.
  5. Сервис Партнера уведомляет Оператора (или Получателя) о статусе выплаты.

Выплата денежных средств через API и страницы выплат Банка

Данный сценарий описывает последовательность выплаты из сервиса партнера с использованием API и страницы выплат Банка. Сбор карточных данных Получателя реализуется с использованием страницы на стороне Банка (для этого не требуется сертификация PCI DSS).

sequenceDiagram participant O as Оператор participant PS as Сервис Партнера participant PM as Модуль выплат autonumber O->>+PS: Инициация выплаты activate O PS->>+PM: Запрос на регистрацию выплаты
(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
  1. Оператор (или Получатель) принимает решение о проведении выплат и выполняет на стороне Сервиса Партнера необходимые действия;
  2. Сервис Партнера отправляет в Модуль Выплат запрос на регистрацию выплаты (registerPayout.do) и передает все необходимые параметры для регистрации;
  3. Модуль Выплат регистрирует выплату;
  4. Модуль Выплат возвращает URL страницы (в ссылке присутствует уникальный идентификатор выплаты);
  5. Сервис Партнера перенаправляет Оператора (или Получателя) на полученный URL страницы;
  6. Оператор (или Получатель) переходит на страницу, заполняет реквизиты Получателя и подтверждает выплату;
  7. Модуль Выплат выполняет выплату;
  8. Модуль Выплат возвращает URL страницы (в ссылке присутствует уникальный идентификатор выплаты);
  9. Оператор (или Получатель) переходит на страницу, и инициирует получение статуса;
  10. Модуль Выплат формирует статус;
  11. Модуль Выплат показывает статус на странице.

Запрос статуса выплаты

Данный сценарий описывает последовательность запроса статуса выплаты с использованием API. Запросить актуальный статус выплаты можно на любом этапе ее проведения.

sequenceDiagram participant O as Оператор/Получатель participant PS as Сервис Партнера participant PM as Модуль выплат autonumber O->>PS: Запрос Статуса выплаты activate O activate PS PS->>PM: Запрос результата выплаты
(getPayoutStatus.do) activate PM PM->>PM: Проверка данных запроса
и формирование ответа PM-->>PS: Ответ с результатом
проведения выплаты deactivate PM PS-->>O: Результат статуса выплаты deactivate PS deactivate O
  1. Оператор (или Получатель) запрашивает статус выплаты в Сервисе Партнера;
  2. Сервис Партнера отправляет в Модуль Выплат запрос статуса выплаты (getPayoutStatus.do);
  3. Модуль Выплат проверяет данные запроса и формирует ответ;
  4. Модуль Выплат возвращает в Сервис Партнера итоговый статус выплат;
  5. Сервис Партнера уведомляет Оператора (или Получателя) о статусе выплаты.

Связки в модуле Выплат

Связки — это сохраненные платежные данные. Связку можно использовать, чтобы не вводить данные карты каждый раз при осуществлении выплаты.

Модуль выплат поддерживает следующие типы связок:

Связки получателя

Создать связку получателя можно одним из следующих способов:

Чтобы создать связку получателя в Личном кабинете:

  1. В меню слева перейдите в раздел Выплаты.

  2. Нажмите Произвести выплату.

  3. Перейдите на вкладку Список карт.

  4. Выберите Добавить карту в списке карт.

  5. В открывшемся окне укажите номер карты и название связки.

Также на вкладке Произвести выплату - Список карт можно удалять ранее сохраненные карты. Для удаления сохраненных карт у Партнера должно быть отдельное разрешение в банке.

Чтобы удалить сохраненную карту, выберите ее в списке и нажмите значок . Будет открыто окно для подтверждения удаления карты. После нажатия на кнопку Удалить связка будет деактивирована.

Добавление корпоративной карты в личном кабинете

В этом разделе описана функциональность привязки корпоративной банковской карты для осуществления выплат. Эта функциональность доступна только при наличии соответствующих прав доступа - уточните у поддержки.

Для Настроек выполните следующие шаги:


Раздел меню Мои карты

Для того, чтобы привязать банковскую карту, нажмите кнопку Добавить карту. После этого откроется окно Добавление карты, где необходимо заполнить все поля:


Добавление карты для выплат в разделе меню Мои Карты

После заполнения всех полей в форме нажмите кнопку Сохранить карту. После чего появляется окно для подтверждения.

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

Для подтверждения с добавляемой карты автоматически спишется (и сразу вернется) минимальная сумма. Добавленная карта отобразится на странице:


Список карт в разделе меню Мои карты

Если щелкнуть по привязанной карте, появляются кнопки:

  1. Сделать карту основной;
  2. Копировать ID связки;
  3. Удалить карту.


Управление картами в разделе меню Мои карты

Для выплат с использованием API вам необходимо скопировать ID связки и использовать ее для указания в параметре source.bindingId HTTPS POST API запроса /payouts/api/v2/performPayout.do при проведении выплаты. Если вы проводите выплаты в Личном кабинете, выберите карту списания при создании выплаты.

API запросы для выплат

Запросы осуществляются с использованием протокола HTTP 1.1 с использованием SSL (HTTPS), на адрес:

TEST: https://abby.rbsuat.com/payouts/api/{api_version}/{api_method}
PROD: @apiurlPayoutsProd@/api/{api_version}/{api_method}

HTTPS POST API запросы должны отвечать следующим требованиям:

HTTPS POST API запросы должны содержать заголовки:

Актуальная версия API для указания в контексте запроса ({api_version}): v2

Требования безопасности

Запрос проверки доступности Модуля Выплат

Для проверки работоспособности Модуля Выплат необходимо использовать HTTPS GET API запрос /payouts/api/v2/echo

Параметры запроса

Параметры не требуются.

Параметры ответа

Ответ предоставляется в формате text/plain. В ответе указывается текущая версия модуля выплат и имя ноды через дефис, в квадратных скобках указано имя инстанса.

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

curl --location 'https://abby.rbsuat.com/payouts/api/v2/echo'

Пример ответа

Payout v2.3 is online in channel Payout_APIserver - svip01[instance:svipUAT]

Регистрация выплаты

Для регистрации выплаты необходимо использовать HTTPS POST API запрос /payouts/api/v2/registerPayout.do. Данный запрос осуществляет регистрацию Выплаты и возвращает ссылку на страницу указания реквизитов Получателя. Сбор реквизитов получателя реализуется на стороне Банка (для работы с реквизитами получателя не требуется сертификация PCI DSS).

Параметры запроса

ОбязательностьПараметрТипОписание
ОбязательноuserNameString [30]Логин Партнера, полученный при подключении
ОбязательноpasswordString [30]Пароль Партнера, полученный при подключении
ОбязательноorderNumberString[32]Уникальный идентификатор выплаты в системе Партнера
ОбязательноamountInteger [12]Сумма выплаты в минимальных единицах валюты
ОбязательноcurrencyStringКод валюты платежа в соответствии с ISO 4217
НеобязательноdescriptionString [598]Описание выплаты в свободной форме
НеобязательноlanguageString [2]Ключ языка по ISO 639-1. Если язык не указан, используется язык по умолчанию
НеобязательноsessionTimeoutSecsIntegerПродолжительность жизни заказа на Выплату в секундах. В случае если параметр не задан, будет использовано значение по умолчанию (1200 секунд)
НеобязательноmerchantLoginStringЛогин дочернего мерчанта, от имени которого необходимо выполнить оплату. Используется совместно с родительско-дочерней схеме мерчантов.
УсловиеclientObjectОбъект для передачи информации о Получателе выплаты
Условиеclient.clientIdString [30]Номер (идентификатор) клиента в системе Партнера. Требуется передавать для использования функционала связок
Необязательноclient.emailString [30]Адрес электронной почты Получателя
Необязательноclient.phoneString [10]Номер телефона Получателя. Номер должен состоять из десяти цифр, например, 9991234567
Необязательноclient.nameString [24]Имя Получателя латиницей
УсловиеsourceObjectОбъект для передачи информации о реквизитах источника средств. Указывается только в следующих случаях:
Условиеsource.bindingIdString [36]Идентификатор связки, по реквизитам которой должно быть списание денежных средств
УсловиеurlsObjectОбъект для передачи информации об используемых URL
Обязательноurls.returnUrlStringАдрес, на который требуется перенаправить Оператора (или Получателя) в случае успешной Выплаты. Адрес должен быть указан полностью, включая протокол
Необязательноurls.failUrlStringАдрес, на который требуется перенаправить Оператора (или Получателя) в случае неуспешной Выплаты. Адрес должен быть указан полностью, включая протокол
НеобязательноjsonParamsObjectОбъект для передачи дополнительной информации по выплате для последующего хранения. Передаются в виде: {"name1":"value1", ... ,"nameN":"valueN"}
НеобязательноjsonParams.$nameStringДополнительный параметр со свободным названием

Параметры ответа

ОбязательностьПараметрТипОписание
ОбязательноerrorCodeStringКод ошибки обработки запроса
УсловиеerrorMessageString [512]Описание ошибки
УсловиеformUrlStringURL статической платежной страницы, на который надо перенаправить браузер клиента. Отсутствует, если регистрация заказа на Выплату не удалась по причине ошибки, указанной в errorCode
УсловиеorderIdStringУникальный идентификатор заказа на Выплату. Отсутствует, если регистрация заказа на Выплату не удалась по причине ошибки, указанной в errorCode
УсловиеorderNumberStringИдентификатор заказа на Выплату в системе Партнера. Копируется из запроса

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

curl --location 'https://abby.rbsuat.com/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).

Параметры запроса

ОбязательностьПараметрТипОписание
ОбязательноuserNameString [30]Логин Партнера, полученный при подключении
ОбязательноpasswordString [30]Пароль Партнера, полученный при подключении
ОбязательноorderNumberString[32]Уникальный идентификатор выплаты в системе Партнера
ОбязательноamountInteger [12]Сумма выплаты в минимальных единицах валюты
ОбязательноcurrencyStringКод валюты платежа в соответствии с ISO 4217
НеобязательноdescriptionString [598]Описание выплаты в свободной форме
НеобязательноlanguageString [2]Ключ языка по ISO 639-1. Если язык не указан, используется язык по умолчанию
НеобязательноmerchantLoginStringЛогин дочернего мерчанта, от имени которого необходимо выполнить оплату. Используется совместно с родительско-дочерней схеме мерчантов.
УсловиеclientObjectОбъект для передачи информации о Получателе выплаты
Условиеclient.clientIdString [30]Номер (идентификатор) клиента в системе Партнера. Требуется передавать для использования функционала связок
Необязательноclient.emailString [30]Адрес электронной почты Получателя
Необязательноclient.phoneString [10]Номер телефона Получателя. Номер должен состоять из десяти цифр, например, 9991234567
Необязательноclient.nameString [24]Имя Получателя латиницей
УсловиеsourceObjectОбъект для передачи информации о реквизитах источника средств. Указывается только в следующих случаях:
Условиеsource.bindingIdString [36]Идентификатор связки, по реквизитам которой должно быть списание денежных средств
УсловиеtargetObjectОбъект для передачи информации о реквизитах получателя средств. По согласованию данный блок может отсутствовать
Условиеtarget.bindingIdStringИдентификатор связки получателя, по реквизитам которой должно быть зачисление денежных средств.
Указывается либо target.pan, либо target.bindingId, либо target.seToken. Подробнее о создании связки см. Создание связки получателя.
Условиеtarget.panStringНомер карты зачисления денежных средств.
Указывается либо target.pan, либо target.bindingId, либо target.seToken.
Условиеtarget.seTokenStringШифрованное значение платежных данных.
Указывается либо target.pan, либо target.bindingId, либо target.seToken. Подробнее о генерации seToken см. Запрос открытой компоненты ключа.
Условиеtarget.phoneStringТелефон получателя выплаты. Передается в формате:
  • CСС - код страны 3 цифры с указанием или без указания лидирующих нулей;
  • IC - код идентификации от 1 до 4 цифр;
  • SN - номер абонента.

Пример для России:
0079261214249 - с лидирующими нулями;
79261214249 - без лидирующих нулей.

Следует передавать либо токен (seToken), либо данные карты (pan), либо идентификатор связки (bindingId).
НеобязательноjsonParamsObjectОбъект для передачи дополнительной информации по выплате для последующего хранения. Передаются в виде: {"paramname1":"paramvalue1", ... ,"paramnameN":"paramvalueN"}
НеобязательноjsonParams.$nameStringДополнительный параметр со свободным названием

Параметры ответа

ОбязательностьПараметрТипОписание
ОбязательноamountInteger [12]Сумма выплаты в минимальных единицах валюты
НеобязательноfeeInteger [12]Сумма комиссии в минимальных единицах валюты
ОбязательноcurrencyStringКод валюты платежа в соответствии с ISO 4217
УсловиеcreationDateIntegerДата и время создания (регистрации) выплаты в формате timestamp
НеобязательноdescriptionString [598]Описание выплаты
ОбязательноerrorCodeStringКод ошибки обработки запроса (0 - нет ошибки)
УсловиеerrorMessageString [512]Описание ошибки
УсловиеorderIdString [36]Уникальный номер заказа в Модуле Выплат
ОбязательноorderNumberString [32]Уникальный идентификатор заказа в системе Партнера
ОбязательноorderStatusStringЗначение этого параметра указывает статус заказа в платежном шлюзе. Отсутствует, если заказ не был найден. Ниже приведен список доступных значений:
  • -1 - заказ зарегистрирован только в модуле Выплат, но не в банке;
  • 0 - заказ зарегистрирован в банке, но не оплачен;
  • 1 - предавторизованная сумма захолдирована на счете Плательщика (для двухстадийных платежей);
  • 2 - проведена полная авторизация суммы заказа;
  • 3 - авторизация отменена;
  • 4 - по транзакции была проведена операция возврата;
  • 5 - инициирована авторизация через ACS банка-эмитента;
  • 6 - авторизация отклонена.
УсловиеorderParamsObjectДополнительные параметры выплаты, переданные при выплате
НеобязательноorderParams.$nameStringДополнительный параметр с любым названием
НеобязательноoperationListArray of objectsОбъект, содержащий информацию о транзакциях, завершенных в заказе
НеобязательноoperationList.amountInteger [12]Сумма операции в минимальных единицах валюты
НеобязательноoperationList.cardholderNameString [26]Имя держателя карты (при наличии)
НеобязательноoperationList.currencyInteger [3]Код валюты платежа ISO 4217
НеобязательноoperationList.operationDateIntegerДата и время совершения операции в формате timestamp
НеобязательноoperationList.operationTypeStringТип транзакции. Доступны следующие значения:
  • P2P_DEBIT – операция списания денежных средств.
  • P2P_CREDIT – операция зачисления денежных средств Получателю.
  • P2P_TRANSFER – операция перевода с карты на карту (списание и зачисление).
  • PURCHASE – E-com операция списания денежных средств.
  • REVERSAL_FOR_PURCHASE – отмена E-com операции списания денежных средств.
НеобязательноoperationList.orderIdStringУникальный идентификатор заказа в Модуле Выплат
НеобязательноoperationList.orderNumberStringУникальный номер заказа в система Партнера
НеобязательноoperationList.refNumString [12]Идентификатор операции, который присваивается операции по ее завершению
НеобязательноoperationList.resultCodeIntegerКод ошибки при выполнении запроса. Возможные значения:
  • 0 - в случае успеха;
  • 1 - в случае ошибки.
НеобязательноoperationList.resultCodeDescriptionString [512]Описание кода ошибки транзакции
УсловиеsourceObjectОбъект для передачи информации о реквизитах источника средств. Указывается только в следующих случаях:
Условиеsource.bindingIdString [36]Идентификатор связки, по реквизитам которой должно быть списание денежных средств
УсловиеtargetObjectОбъект для передачи информации о реквизитах получателя средств
Необязательноtarget.bindingIdString [255]Идентификатор связки получателя, использованной для выплаты
Необязательноtarget.clientIdString [255]Идентификатор клиента использованный для выплаты
Необязательноtarget.maskedPanString [19]Маскированный номер карты зачисления использованной для выплаты
УсловиеacsUrlStringURL для перехода на ACS (в случае если необходимо подтверждение транзакции по 3DS)
УсловиеinfoStringИнформационное сообщение (в случае если необходимо подтверждение транзакции по 3DS)
Условиеis3DSVer2BooleanЕсли true - требуется проверка по 3DS2 (в случае если необходимо подтверждение транзакции по 3DS)
УсловиеmdOrderStringИдентификатор заказа в Модуле выплат (в случае если необходимо подтверждение транзакции по 3DS)
УсловиеpaReqStringЗначение paReq для отправки в ACS (в случае если необходимо подтверждение транзакции по 3DS)
УсловиеtermUrlStringАдрес возврата с ACS (в случае если необходимо подтверждение транзакции по 3DS)
УсловиеshortUrlStringКороткая ссылка для прохождения 3ds на стороне РБС. (передается только для 3ds ver.2)

Пример запроса - источник фондирования корпоративная карта

curl --location 'https://abby.rbsuat.com/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

Параметры запроса

ОбязательностьПараметрТипОписание
ОбязательноuserNameString [30]Логин Партнера, полученный при подключении
ОбязательноpasswordString [30]Пароль Партнера, полученный при подключении
УсловиеorderNumberStringИдентификатор заказа в системе Партнера. В запросе должен присутствовать либо orderId, либо orderNumber
УсловиеorderIdStringУникальный идентификатор заказа на Выплату (в рамках модуля выплат). В запросе должен присутствовать либо orderId, либо orderNumber
НеобязательноlanguageStringЯзык в кодировке ISO 639-1. Если не указан, будет использован язык по умолчанию

Параметры ответа

ОбязательностьПараметрТипОписание
ОбязательноerrorCodeStringКод ошибки обработки запроса (0 - нет ошибки)
УсловиеerrorMessageString [512]Описание ошибки
ОбязательноamountInteger [12]Сумма выплаты в минимальных единицах валюты
НеобязательноfeeInteger [12]Сумма комиссии в минимальных единицах валюты
ОбязательноcurrencyStringКод валюты платежа в соответствии с ISO 4217
ОбязательноorderNumberString [32]Уникальный идентификатор заказа в системе Партнера
УсловиеorderIdString [36]Уникальный номер заказа в Модуля Выплат
НеобязательноdescriptionString [598]Описание заказа
ОбязательноorderStatusStringЗначение этого параметра указывает статус заказа в платежном шлюзе. Отсутствует, если заказ не был найден. Ниже приведен список доступных значений:
  • -1 - заказ зарегистрирован только в модуле Выплат, но не в банке;
  • 0 - заказ зарегистрирован в банке, но не оплачен;
  • 1 - предавторизованная сумма захолдирована на счете Плательщика (для двухстадийных платежей);
  • 2 - проведена полная авторизация суммы заказа;
  • 3 - авторизация отменена;
  • 4 - по транзакции была проведена операция возврата;
  • 5 - инициирована авторизация через ACS банка-эмитента;
  • 6 - авторизация отклонена.
НеобязательноactionCodeIntegerКод ответа, который возвращает платежный шлюз на основе кода от процессинга или своего внутреннего статуса операции. См. список кодов ответа здесь.
На данный момент параметр обязательно возвращается только для выплат со списанием с транзитного счета. Тем не менее, для других типов выплат он также может присутствовать.
НеобязательноactionCodeDescriptionString [1..512]Описание actionCode, возвращаемое платежным шлюзом.
НеобязательноoperationListArray of objectsОбъект, содержащий информацию о транзакциях, завершенных в заказе
НеобязательноoperationList.amountInteger [12]Сумма операции в минимальных единицах валюты
НеобязательноoperationList.cardholderNameString [26]Имя держателя карты (при наличии)
НеобязательноoperationList.currencyInteger [3]Код валюты платежа ISO 4217
НеобязательноoperationList.operationDateIntegerДата и время совершения операции в формате timestamp
НеобязательноoperationList.operationTypeStringТип транзакции. Доступны следующие значения:
  • P2P_DEBIT – операция списания денежных средств.
  • P2P_CREDIT – операция зачисления денежных средств Получателю.
  • P2P_TRANSFER – операция перевода с карты на карту (списание и зачисление).
  • PURCHASE – E-com операция списания денежных средств.
  • REVERSAL_FOR_PURCHASE – отмена E-com операции списания денежных средств.
НеобязательноoperationList.orderNumberStringУникальный номер заказа в шлюзе. Присутствует только если у Партнера настроены выплаты с раздельными операциями на дебит и кредит. Узнать или изменить тип выплат можно по обращению в службу поддержки.
НеобязательноoperationList.orderIdString [1..36]Уникальный идентификатор заказа в шлюзе. Присутствует только если у Партнера настроены выплаты с раздельными операциями на дебит и кредит. Узнать или изменить тип выплат можно по обращению в службу поддержки.
НеобязательноoperationList.panMaskedToString [19]Маскированный номер карты для зачисления средств
НеобязательноoperationList.refNumString [12]Идентификатор операции, который присваивается операции по ее завершению
НеобязательноoperationList.resultCodeIntegerКод ошибки при выполнении запроса. Возможные значения:
  • 0 - в случае успеха;
  • 1 - в случае ошибки.
НеобязательноoperationList.resultCodeDescriptionString [512]Описание кода ошибки транзакции
УсловиеsourceObjectОбъект для передачи информации о реквизитах источника средств. Указывается только в следующих случаях:
Условиеsource.bindingIdString [36]Идентификатор связки, по реквизитам которой должно быть списание денежных средств
УсловиеtargetObjectОбъект для передачи информации о реквизитах получателя средств
Необязательноtarget.bindingIdString [255]Идентификатор связки получателя, использованной для выплаты
Необязательноtarget.clientIdString [255]Идентификатор клиента, использованный для выплаты
Необязательноtarget.maskedPanString [19]Маскированный номер карты зачисления, использованной для выплаты
УсловиеorderParamsObjectДополнительные параметры выплаты, переданные при выплате
НеобязательноorderParams.$nameStringДополнительный параметр с любым названием

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

curl --location 'https://abby.rbsuat.com/payouts/api/v2/getPayoutStatus.do' \
--header 'Content-Type: application/json' \
--data-raw '{
    "username": "payout_api_username",
    "password": "payout_api_password",
    "orderNumber": "payout_1"
}'

Пример ответа

{
    "amount": 214,
    "fee": 2,
    "currency": "398",
    "creationDate": 1764146589800,
    "description": "Test payout",
    "errorCode": "0",
    "errorMessage": "Success",
    "orderId": "0c3a16da-2835-7c75-b867-191207508f12",
    "orderNumber": "1764146589_3620",
    "orderStatus": "2",
    "orderParams": {
        "mdOrder_svip": "1d16836b-e747-4e9f-913c-17b8ce8b5eec",
        "useCustomExternalSystem": "1",
        "param2": "456"
    },
    "actionCode": 0,
    "actionCodeDescription": "Request is processed successfully",
    "operationList": [
        {
            "amount": 214,
            "currency": "398",
            "operationDate": 1764146590137,
            "operationType": "P2P_VERIFY",
            "resultCode": 0,
            "resultCodeDescription": "Request is processed successfully"
        },
        {
            "amount": 214,
            "currency": "398",
            "operationDate": 1764146590846,
            "operationType": "P2P_CREDIT",
            "refNum": "533089444221",
            "resultCode": 0,
            "resultCodeDescription": "Request is processed successfully"
        }
    ],
    "target": {
        "maskedPan": "4402XXXXXXXX2639"
    }
}

Создание связки получателя

Для создания связки получателя средств необходимо использовать API запрос /payouts/api/v2/createTargetBindingId.do. Данный запрос осуществляет создание связки с указанным идентификатором клиента и возвращает её параметры.

Параметры запроса

ОбязательностьПараметрТипОписание
ОбязательноusernameStringЛогин Партнера, полученный при подключении.
ОбязательноpasswordStringПароль Партнера, полученный при подключении.
ОбязательноorderNumberStringУникальный идентификатор заказа в системе Партнера. Впоследствии можно использовать этот идентификатор в запросе getPayoutStatus.do, чтобы запросить результат создания связки.
ОбязательноclientIdStringНомер (идентификатор) клиента в системе Партнера.
ОбязательноpanStringНомер карты для которой будет создана связка.
НеобязательноmonthStringМесяц срока действия карты
НеобязательноyearStringГод срока действия карты
НеобязательноcardholderNameStringИмя держателя карты

Параметры ответа

ОбязательностьПараметрТипОписание
ОбязательноerrorCodeStringКод ошибки (0 - нет ошибки)
УсловиеerrorMessageStringОписание ошибки. Присутствует только в случае, если произошла ошибка.
ОбязательноorderNumberStringИдентификатор заказа в системе Партнера.
ОбязательноorderIdStringУникальный идентификатор заказа на Выплату (в рамках модуля выплат)
НеобязательноbindingIdStringИдентификатор связки. Если при выполнении метода произошла ошибка, и в результате связка не была создана, то параметры связки не будут возвращены в ответе.
НеобязательноclientIdStringИдентификатор клиента
НеобязательноmaskedPanStringМаскированный номер карты
НеобязательноorderTypeStringТип заказа, зависит от метода на который обратился пользователь. Допустимые значения:
  • CreateBindingId - создание связки

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

curl --location 'https://abby.rbsuat.com/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. В результате будет получен второй ответ с параметрами созданной связки.

Параметры запроса

ОбязательностьПараметрТипОписание
ОбязательноusernameStringЛогин Партнера, полученный при подключении.
ОбязательноpasswordStringПароль Партнера, полученный при подключении.
НеобязательноmerchantLoginStringЛогин дочернего мерчанта, от имени которого необходимо создать связку.
ОбязательноpanStringНомер карты, для которой будет создана связка.
ОбязательноmonthStringМесяц срока действия карты.
ОбязательноyearStringГод срока действия карты.
ОбязательноcvvStringCVV код карты.
НеобязательноcardholderNameStringИмя держателя карты.
ОбязательноclientIdStringНомер (идентификатор) клиента в системе Партнера.

Параметры ответа

Первый ответ с параметрами для прохождения 3DS:

ОбязательностьПараметрТипОписание
НеобязательноredirectStringUrl для редиректа, когда все попытки оплаты завершены (успешно или не успешно).
УсловиеacsUrlStringURL для перехода на ACS. Возвращается при успешном ответе, если карта вовлечена в 3DS.
НеобязательноinfoStringИнформационное сообщение.
Обязательноis3DSVer2BooleanЕсли true - требуется проверка по 3DS2.
НеобязательноmdOrderStringИдентификатор заказа в платежном шлюзе.
УсловиеpaReqStringpaReq для отправки в ACS. Возвращается при успешном ответе, если карта вовлечена в 3DS.
УсловиеtermUrlStringАдрес возврата с ACS. Возвращается при успешном ответе, если карта вовлечена в 3DS.
УсловиеshortUrlStringКороткая ссылка для прохождения 3DS. Передается только для 3DS ver.2. Возвращается при успешном ответе, если карта вовлечена в 3DS.
ОбязательноorderNumberStringИдентификатор заказа в системе Партнера.

Второй ответ с данными связки:

ОбязательностьПараметрТипОписание
ОбязательноerrorCodeStringКод ошибки (0 - нет ошибки).
УсловиеerrorMessageStringОписание ошибки. Возвращается в случае ошибки.
ОбязательноorderNumberStringИдентификатор заказа в системе Партнера.
ОбязательноorderIdStringИдентификатор заказа в платежном шлюзе.
ОбязательноbindingIdStringИдентификатор связки.
ОбязательноmerchantLoginStringЛогин дочернего мерчанта, для которого создана связка.
НеобязательноmaskedPanStringМаскированный номер карты.
НеобязательноorderTypeStringТип заказа, зависит от метода на который обратился пользователь. Допустимые значения:
  • createSourceBindingId - создание карточной связки и добавление в "белый список" или "Мои карты".
ОбязательноclientIdStringНомер (идентификатор) клиента в системе Партнера.

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

curl --location 'https://abby.rbsuat.com/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. Параметры отсутствуют.

Параметры ответа

ОбязательностьПараметрТипОписание
ОбязательноkeysArray[object]Список действующих публичных ключей Модуля выплат
Обязательноkeys.keyValueStringСтроковое представление публичного ключа, включая маркеры начала и окончания ключа
Обязательноkeys.keyExpirationNumberСрок действия ключа, дата в секундах по стандарту UNIX time
Необязательноkeys.protocolVersionStringВерсия алгоритма шифрования

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

Откройте в браузере ссылку https://abby.rbsuat.com/payouts/api/v2/keys.do или выполните запрос:

curl 'https://abby.rbsuat.com/payouts/api/v2/keys.do'

Пример ответа

{
    "keys": [
    {
        "keyValue":"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvnLlDQH6gu+6d7DT9EGa65QX7MgokW74S1gYIYTg3C6bf6z69Sg4EtXewCsp7txrCLBAkvns3Xf6tutYfVoFAIiZ45THXt7NNXTZw522AqfOVwDYUENwZgDqwh5LlAQv5H7Xb1gSF2H1vLPo4maZiuKiY64WzkHnDQJ6IzsHAArvXIA6f6QbRTqaI0GHUI7WHDRxNKh0p6z1HFLQxjj0yswR8eYTU2M0Zov7/4bMqB1Bgs4ByCi3AUeG2jtia04ycod2EROkddJcdPF23+G1JH0k2f3Y1XwKDuQI38oVY8HIaS1uriBrLWtCfw7sbtiowE4+cB7GOZsxtB9edKLygQIDAQAB",
        "keyExpiration":1758189688460,
        "protocolVersion":"RSA-2048"
    }]
}

Подпись запросов API

Модуль Выплат поддерживает подпись следующих API-запросов:

Подпись выполняется так же, как для API-запросов в платежный шлюз с тем отличием, что тело API-запросов модуля Выплат передается только в формате JSON. Модуль выплат использует для подписи запросов тот же сертификат, что и платежный шлюз. Если вы еще не сгенерировали и не загрузили сертификат, сделайте это, следуя документации.

Ниже описан порядок реализации подписи API-запросов в модуль Выплат и приведены примеры тела запроса, его хэша и подписи.

Реализация подписи

  1. Рассчитайте хеш 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=

  2. Для вычисленного хеша 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==

  3. Передайте сгенерированный хэш (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"}'

Чтобы запрос был выполнен, должны быть соблюдены следующие требования:

Пример кода генерации подписи на 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 codeerrorCodeerrorMessageОписание
200 OK116Insufficient fundsСумма транзакции превышает доступный остаток средств
200 OK121Limit is depletedПредпринята попытка выполнить транзакцию на сумму, превышающую дневной лимит, заданный банком-эмитентом.
200 OK902Card is restrictedОграничение по карте (Владелец карты пытается выполнить транзакцию, которая для него не разрешена)
400 Bad request98[paramName] is а required parameterПри запросе в модуль выплат не указан обязательный параметр
400 Bad request98[paramName] does not match required pattern [pattern]При запросе в модуль выплат указанный параметр не соответствует заданному регулярному выражению
400 Bad request98Errors while parsing incoming request: [requestMessage] is not set for method [api_method]При разборе входящего сообщения невозможно найти метод указанный в запросе
400 Bad request98Invalid requestПри разборе входящего сообщения обнаружена ошибка
400 Bad request98No order identification provided to find order in databaseНе указан Order ID. При формировании запроса в БД не удалось найти в запросе параметра, по которому можно осуществить поиск
400 Bad request98Order not found in payout proxy. Check orderId or orderNumberПри запросе в модуль выплат указанный номер заказа не найден
400 Bad request98Currency does not match required patternПри запросе в модуль выплат выбрана не корректна валюта
400 Bad request98Card affiliation does not match required patternПри запросе в модуль выплат выбрана карта не разрешенная в данном процессе
400 Bad request98userName and password are mandatory fieldsПри запросе в модуль выплат не указан логин или пароль
400 Bad request98Payout config error: debit method is incorrect for specified payout typeДля данного типа оплаты должен быть определен метод дебетования
400 Bad request98Source is not specified or is incorrect compared to configured debit toolsИсточник в запросе отличается от ожидаемого
400 Bad request98Invalid​ request. client.name is emptyОтсутствует обязательный параметр client.name
400 Bad request98The​ order[orderNumber] is not registered in the gateway and contains errors. Please register a new order.Регистрация заказа завершилась ошибкой на этапе проверки, до регистрации в шлюзе. Проверьте данные и зарегистрируйте новый заказ.
401 Not authorized90User not authenticatedАвторизация пользователя (продавца) в шлюзе завершилась неудачей
404 Not Found--Метод не найден
500 Server error99Order was not processed correctly. Please check order status manuallyВнутренняя ошибка SVIP. Полученный статус заказа вернулся не "успешно". Необходимо вручную запросить статус выплаты.
500 Server error99No merchant settings availableНе удалось найти настройки пользователя (продавца) по логину или авторизационному токену
401 Not authorized90Wrong password for user [user_name]Введен неверный пароль.
500 Server error99There was an error getting gateway parametersОшибка разбора параметров подключений к шлюзам и/или микросервисам
500 Server error99Failed to parse incoming request for [messageType]Ошибка при разборе входящего JSON сообщения указанного типа (например, некорректный JSON)
502 Bad Gateway99Failed to call hessian method: [hessian_method]Ошибка вызова метода шлюза (метод не найден, параметры некорректны и т.п.)
502 Bad Gateway99Error calling rest method [service_name]Ошибка вызова метода rest (метод не найден, параметры некорректны и т.п.)
502 Bad Gateway99Rest response was unsuccessfullОшибка вызова метода rest
502 Bad Gateway993DS authorization was requested but is not supported in API callsОшибка вызова, запрошен 3ds, выплаты не поддерживают работу с 3ds
502 Bad Gateway99Unable to get card data for specified bindingIdПо bindingId не получены данные карты из шлюза
502 Bad Gateway204Cannot find any bin range in db for [bin]Введенный bin карты, не найден в Базе данных
502 Bad Gateway204Unsupported panPan не поддерживается
502 Bad Gateway400Invalid request: bin is empty or is not numericБин карты получателя пустой или не число
502 Bad Gateway98Mrbin can't find this cardMr.bin не может найти данный номер карты в базе, необходимо проверить корректность ввода номера карты
504 Timeout91Timeout when requesting [gateway]Шлюз недоступен
504 Timeout91Timeout when requesting [service_name]Сервис недоступен
Категории:
PayoutsAPI V1
Beta
Категории
Результаты поиска