Выплаты на карты
Продукт вывода денег на карты, часто называемый как “массовые выплаты” предоставляет, собой пополнение баланса получателя в международных платежных системах. В терминологии VISA этот метод называется Original Credit Transaction
. Наша платформа позволяет выполнить OCT-транзакцию через платформу кошельков RBKmoney Wallets
.
Данный сервис предоставляется юридическим лицам, подписавшим с нами договор, создавших корпоративное электронное средство платежа, или КЭСП. Таким образом, КЭСП - это полностью идентифицированный кошелек юридического лица, имеющий соответствующие лимиты.
С точки зрения технической интеграции с платформой КЭСП ничем не отличается от пользовательского кошелька, поэтому мы настоятельно рекомендуем ознакомиться со статьей работа с кошельками.
Описание подходов¶
Алгоритм вывода¶
- создать один экземпляр личности;
- создать один кошелек;
- привязывать необходимое количество методов вывода средств;
- по мере необходимости вывода средств вызывать соответствующий метод.
Note
Для тестовой среды вы можете самостоятельно создавать все сущности и запускать процессы идентификации, запускать выплаты. Для перехода в боевой режим вам необходимо создать личность и предоставить ее идентификатор нам для проведения процесса ручной идентификации КЭСП.
Подходы к реализации¶
Поскольку владельцем КЭСП являетесь вы и это единственный кошелек, который участвует в процессе все действия можно производить на вашем бекэнде. Также, отсутствует необходимость в создании прав на управление ресурсами, поскольку действие может быть авторизовано вашим API-ключом.
Note
На момент написания статьи, реализации RBKmoney Wallet Utils для КЭСП не предоставляется. Формы ввода карточных данных для привязки карты, в случае необходимости создания таковых, должны быть реализованы на вашей стороне.
Техническая реализация¶
Создание личности¶
- единоразово создаем себе личность. Для тестовой среды используйте
"provider": "test"
и"class": "person"
. Пример запроса:
curl -X POST \
https://api.rbk.money/wallet/v0/identities \
-H 'Authorization: Bearer {YOUR_API_KEY}' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json; charset=utf-8' \
-H 'X-Request-ID: {REQUEST_ID}' \
-d '{
"name": "Megacorp inc.",
"provider": "test",
"class": "person"
}'
- пример ответа платформы:
{
"class": "person",
"createdAt": "2018-08-06T13:46:42.234281Z",
"id": "{IDENTITY_ID}",
"isBlocked": false,
"level": "anonymous",
"name": "Megacorp inc.",
"provider": "test"
}
- для боевого доступа полученный идентификатор личности нужно будет сообщить в техподдержку для активации боевого режима.
Создание кошелька¶
- единоразово создаем себе кошелек. Пример запроса:
curl -X POST \
https://api.rbk.money/wallet/v0/wallets \
-H 'Authorization: Bearer {YOUR_API_KEY}' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json; charset=utf-8' \
-H 'X-Request-ID: {REQUEST_ID}' \
-d '{
"name": "Megacorp payouts wallet",
"identity": "{IDENTITY_ID}",
"currency": "RUB"
}'
- пример ответа платформы:
{
"createdAt": "2018-08-06T13:48:09.076234Z",
"currency": "RUB",
"id": "{WALLET_ID}",
"identity": "{IDENTITY_ID}",
"isBlocked": false,
"name": "Megacorp payouts wallet"
}
Привязка карт¶
Токенизация карты¶
- передаем карточные данные в метод токенизации и получаем карточный токен:
curl -X POST \
https://api.rbk.money/payres/v0/bank-cards \
-H 'Authorization: Bearer {YOUR_API_KEY}' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json; charset=utf-8' \
-H 'X-Request-ID: {REQUEST_ID}' \
-d '{
"type": "BankCard",
"cardNumber": "4242424242424242",
"expDate": "12/21",
"cardHolder": "KEYN FAWKES"
}'
- пример ответа платформы:
{
"authData": "5ZAuwcI6zqZUJDtqOq1P4Y",
"bin": "424242",
"lastDigits": "4242",
"paymentSystem": "visa",
"token": "eyJiaW4iOiI0MjQyNDIiLCJsYXN0RGlnaXRzIjoiNDI0MiIsInBheW1lbnRTeXN0ZW0iOiJ2aXNhIiwidG9rZW4iOiI2UVN5SzBPYndhdjUxNVF4U0N4WDV4In0"
}
Привязка карты к личности¶
- привязываем полученный карточный токен к личности:
curl -X POST \
https://api.rbk.money/wallet/v0/destinations \
-H 'Authorization: Bearer {YOUR_API_KEY}' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json; charset=utf-8' \
-H 'X-Request-ID: {REQUEST_ID}' \
-d '{
"name": "Customer #1234567890",
"identity": "{IDENTITY_ID}",
"currency": "RUB",
"resource": {
"type": "BankCardDestinationResource",
"token": "eyJiaW4iOiI0MTUwMzkiLCJsYXN0RGlnaXRzIjoiMDkwMCIsInBheW1lbnRTeXN0ZW0iOiJ2aXNhIiwidG9rZW4iOiI1TXlURjVha0VRWmVEMVZLS2JpNVluIn0"
},
"metadata": {
"display_name": "Drivers Card #4242"
}
}'
- пример ответа платформы:
{
"createdAt": "2018-08-06T13:55:28.824975Z",
"currency": "RUB",
"id": "{DESTINATION_ID}",
"identity": "{IDENTITY_ID}",
"isBlocked": false,
"metadata": {
"display_name": "Card #4242"
},
"name": "Customer #1234567890",
"resource": {
"bin": "415039",
"lastDigits": "0900",
"paymentSystem": "visa",
"token": "5MyTF5akEQZeD1VKKbi5Yn",
"type": "BankCardDestinationResource"
},
"status": "Unauthorized"
}
Проверка статуса привязки¶
- по идентификатору привязки, возвращенному из предыдущего запроса, проверяем статус привязки опросом событий, либо подписываемся на соответствующий вебхук. Пример с опросом событий:
curl -X GET \
https://api.rbk.money/wallet/v0/destinations/{DESTINATION_ID} \
-H 'Authorization: Bearer {YOUR_API_KEY}' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json; charset=utf-8' \
-H 'X-Request-ID: {REQUEST_ID}'
- пример ответа платформы:
{
"createdAt": "2018-08-06T13:55:28.824975Z",
"currency": "RUB",
"id": "{DESTINATION_ID}",
"identity": "{IDENTITY_ID}",
"isBlocked": false,
"metadata": {
"display_name": "Card #4242"
},
"name": "Customer #1234567890",
"resource": {
"bin": "415039",
"lastDigits": "0900",
"paymentSystem": "visa",
"token": "5MyTF5akEQZeD1VKKbi5Yn",
"type": "BankCardDestinationResource"
},
"status": "Authorized"
}
- после перехода привязки в статус “авторизована”,
"status": "Authorized"
, процесс привязки завершен. В будущем для создания выводов достаточно будет передать идентификатор кошелька с которого осуществляется вывод и идентификатор привязки.
Выплата на карту¶
Запускаем процесс выплаты на карту. Пример запроса:
curl -X POST \
https://api.rbk.money/wallet/v0/withdrawals \
-H 'Authorization: Bearer {YOUR_API_KEY}' \
-H 'Cache-Control: no-cache' \
-H 'Content-Type: application/json; charset=utf-8' \
-H 'X-Request-ID: {REQUEST_ID}' \
-d '{
"wallet": "{WALLET_ID}",
"destination": "{DESTINATION_ID}",
"body": {
"amount": 10000,
"currency": "RUB"
}
}'
- пример ответа платформы:
{
"body": {
"amount": 10000,
"currency": "RUB"
},
"createdAt": "2018-08-06T14:03:16.137075Z",
"destination": "{DESTINATION_ID}",
"id": "{WITHDRAWAL_ID}",
"status": "Pending",
"wallet": "{WALLET_ID}"
}
- по идентификатору выплаты, возвращенному из предыдущего запроса, проверяем статус привязки опросом событий, либо подписываемся на вебхук. Пример с опросом событий:
curl -X GET \
https://api.rbk.money/wallet/v0/withdrawals/{WITHDRAWAL_ID} \
-H 'Authorization: Bearer {YOUR_API_KEY}'
После перехода выплаты в состояние Succeeded
выплату можно считать успешно завершенной.
Массовые выплаты¶
Для массовых выплат вызываем методы выплат на карту в массовом объеме.