Mir Pay
Введение
Платежная система Мир предоставляет возможность принимать платежи из приложений мерчанта или мобильных версий сайтов с использованием сервиса Mir Pay.
В следующих разделах описывается интеграция метода оплаты Mir Pay In-Application.
Чтобы принимать платежи через Mir Pay, у вас должна быть включена эта функция.
Схемы интеграции
Платежная страница на стороне Платежного шлюза
- Клиент формирует заказ на сайте мерчанта.
- Продавец направляет в платежный шлюз запрос регистрации заказа.
a. При одностадийном платеже - register.do;
b. При двухстадийном платеже - registerPreAuth.do - Платежный шлюз регистрирует заказ и отправляет мерчанту ответ, содержащий параметр
formUrl(платежный URL-адрес, на который мерчант должен перенаправить клиента) и параметрorderId(уникальный номер заказа в системе платежного шлюза). - Интернет-магазин перенаправляет клиента на URL, полученный в параметре
formUrl. - Браузер клиента открывает полученный URL.
- Платежная страница запрашивает список возможных способов оплаты у платежного шлюза.
- Платежный шлюз формирует Universal link.
- Платежный шлюз в ответе возвращает опцию мерчанта Mir Pay и Universal link.
- Клиент получает платежную форму с отрисованной кнопкой оплаты MirPay.
- Клиент выбирает способ оплаты Mir Pay на платежной странице.
- Платежная страница запускает Universal link на устройстве клиента.
- Mir Pay проверяет подпись продавца и его участие в программе.
- Mir Pay отображает список карт клиенту.
- Клиент выбирает карту для оплаты в приложении Mir Pay.
- Mir Pay передает браузеру клиента redirect на URL платежной страницы.
- Mir Pay формирует данные платежа и отправляет зашифрованные данные платежа в платежный шлюз.
- Платежный шлюз расшифровывает данные платежа.
- Платежный шлюз осуществляет оплату.
- Браузер клиента обращается к платежной странице для получения результата оплаты.
- Платежная страница запрашивает у платежного шлюза результат оплаты.
- Платежный шлюз возвращает результат оплаты на платежную страницу.
- Платежная страница отображает результат оплаты клиенту.
Платежная страница/приложение на стороне мерчанта
Необходимые условия
Для того, чтобы иметь возможность принимать платежи Mir Pay через платежный шлюз, у вас должен быть выпущенный для вас сертификат. Для получения данного сертификата обратитесь в службу технической поддержки.
Вместе с конечным сертификатом вы должны получить от службы технической поддержки следующее:
- Документ «Стандарт платежной системы «Мир». Описание реализации Mir Pay Android In-Application операций для ТСП».
- Библиотека MirPaySDK.aar для встраивания в мобильное приложение продавца.
- Описание API в виде yaml-файла;
- URL-адрес файла конечного сертификата ТСП на общедоступном Web-ресурсе Агрегатора (https://<хост участника>/jwks/-jwks.json), если данное ТСП поддерживает технологию In-Application Web-based операций.
- Клиент выбирает способ оплаты Mir Pay на платежной странице мерчанта.
- Продавец запускает скрипт подготовки операции In-Application через MirPaySDK в приложении Mir Pay / Продавец запускает скрипт подготовки операции In-Application через Deeplink или Universal Link в приложении Mir Pay.
- Mir Pay проверяет подпись продавца и его участие в программе.
- Mir Pay отображает список карт клиенту.
- Клиент выбирает карту для оплаты в приложении Mir Pay.
- Mir Pay формирует данные платежа и отправляет зашифрованные данные платежа продавцу.
- Продавец запрашивает платеж, отправляя API-запрос /mir/payment.do в платежный шлюз.
- Платежный шлюз расшифровывает данные платежа.
- Платежный шлюз осуществляет оплату.
- Платежный шлюз возвращает результат оплаты мерчанту.
- Мерчант отображает результат оплаты клиенту.
Расшифровка платежных данных на стороне продавца
- Клиент выбирает способ оплаты Mir Pay на платежной странице.
- Продавец запускает скрипт подготовки операции In-Application через MirPaySDK в приложении Mir Pay / Продавец запускает скрипт подготовки операции In-Application через Deeplink или Universal Link в приложении Mir Pay.
- Mir Pay проверяет подпись продавца и его участие в программе.
- Mir Pay отображает список карт клиенту.
- Клиент выбирает карту для оплаты в приложении Mir Pay.
- Mir Pay формирует данные платежа и отправляет зашифрованные данные платежа в мерчанту.
- Продавец расшифровывает данные платежа.
- Продавец создает запрос на проведение платежа /mir/paymentDirect.do, содержащий расшифрованные платежные данные, и отправляет его платежному шлюзу.
- Платежный шлюз осуществляет оплату.
- Платежный шлюз возвращает результат оплаты мерчанту.
- Мерчант отображает результат оплаты клиенту.
API-запросы Mir Pay
Регистрация заказа Mir Pay Pay
Для регистрации и оплаты заказа используется запрос https://mkb.rbsuat.com/payment/mir/payment.do. Запрос доступен, если мерчант имеет соответствующее разрешение.
При выполнении запроса необходимо использовать заголовок:
Content-Type: application/json
Параметры запроса
| Обязательность | Название | Тип | Описание |
|---|---|---|---|
| Условие | merchant |
String [1..255] | Логин продавца в системе платежного шлюза. Обязательно, если авторизация осуществляется через merchant. |
| Условие | username |
String [1..30] | Логин учетной записи API продавца. Обязательно, если авторизация осуществляется через username и password. |
| Условие | password |
String [1..30] | Пароль учетной записи API продавца. Обязательно, если авторизация осуществляется через username и password. |
| Обязательно | orderNumber |
String [1..36] | Номер заказа (ID) в системе мерчанта; должен быть уникальным для каждого заказа. |
| Необязательно | description |
String [1..598] | Описание заказа в любом формате. Чтобы включить отправку этого поля в процессинговую систему, обратитесь в службу технической поддержки. В этом поле недопустимо передавать персональные данные или платежные данные (номера карт т.п.). Данное требование связано с тем, что описание заказа нигде не маскируется. |
| Необязательно | language |
String [2] | Ключ языка по ISO 639-1. Если язык не указан, используется язык по умолчанию, указанный в настройках магазина. Поддерживаемые языки: ru, en. |
| Необязательно | additionalParameters |
Object | Дополнительные параметры заказа, которые хранятся в личном кабинете продавца для последующего просмотра. Каждая новая пара имени параметра и его значения должна быть разделена запятой. Ниже приведен пример использования.{ "firstParamName": "firstParamValue", "secondParamName": "secondParamValue"}
|
| Необязательно | preAuth |
Boolean | Параметр, определяющий необходимость предварительной авторизации (блокирования средств на счете клиента до их списания). Доступны следующие значения:
|
| Обязательно | ip |
String [1..39] | IP адрес плательщика. IPv6 поддерживается во всех запросах (до 39 символов). |
| Необязательно | clientId |
String [0..255] | Номер клиента (ID) в системе мерчанта — до 255 символов. Используется для реализации функциональности связок. Может возвращаться в ответе, если мерчанту разрешено создавать связки. Указание этого параметра при обработке платежей по связке обязательно. В противном случае платеж будет невозможен. |
| Обязательно | paymentToken |
String [1..8192] | Строка в формате JWE Compact Serialization с данными операции In-Application. |
Параметры ответа
| Обязательность | Название | Тип | Описание |
|---|---|---|---|
| Обязательно | success |
Boolean | Основной параметр, который указывает на то, что запрос прошел успешно. Доступны следующие значения:
Обратите внимание, что значение true означает, что запрос был обработан, а не что заказ был оплачен.Более подробная информация о том, как узнать, был ли платеж успешным или нет, доступна здесь. |
| Условие | data |
Object | Этот параметр возвращается только в случае успешной обработки платежа. См. описание ниже. |
| Условие | error |
Object | Этот параметр возвращается только в случае ошибки платежа. См. описание ниже. |
Блок data содержит следующие элементы.
| Обязательность | Название | Тип | Описание |
|---|---|---|---|
| Обязательно | orderId |
String [1..36] | Номер заказа в платежном шлюзе. Уникален в пределах платежного шлюза. |
Блок error содержит следующие элементы.
| Обязательность | Название | Тип | Описание |
|---|---|---|---|
| Обязательно | code |
String [1..3] | Код как информационный параметр, сообщающий об ошибке. |
| Обязательно | description |
String [1..598] | Подробное техническое объяснение ошибки - содержимое этого параметра не предназначено для отображения пользователю. |
| Обязательно | message |
String [1..512] | Информационный параметр, являющийся описанием ошибки для отображения пользователю. Параметр может варьироваться, поэтому не следует явным образом ссылаться на его значения в коде. |
Примеры
Пример запроса
curl --request POST \
--url https://mkb.rbsuat.com/payment/mir/payment.do \
--header 'Content-Type: application/json' \
--data-raw '{
"username": "test_user",
"password": "test_user_password",
"orderNumber": "243ec139-4b5a-7859-b409-bbcb4806bc81",
"description": "Order description",
"language": "RU",
"additionalParameters": {},
"preAuth" : false,
"ip": "x.x.x.x",
"paymentToken": "eyJhbGciOiJSU0...9HDxLg"
}'Ответ в случае успешной оплаты
{
"success": true,
"data": {
"orderId": "243ec139-4b5a-7859-b409-bbcb4806bc81"
}
}Ответ в случае неудачной оплаты
{
"error": {
"code": 1,
"description": "Processing Error",
"message": "Insufficient amount on card"
},
"success": false
}Mir Pay Direct
Запрос, используемый для осуществления прямого платежа через Mir Pay - https://mkb.rbsuat.com/payment/mir/paymentDirect.do. Запрос доступен, если мерчант имеет соответствующее разрешение.
Этот запрос можно использовать для интеграций, предполагающих расшифровку платежных данных на стороне продавца.
При выполнении запроса необходимо использовать заголовок:
Content-Type: application/json
Параметры запроса
| Обязательность | Название | Тип | Описание |
|---|---|---|---|
| Условие | merchant |
String [1..255] | Логин продавца в системе платежного шлюза. Обязательно, если авторизация осуществляется через merchant. |
| Условие | username |
String [1..30] | Логин учетной записи API продавца. Обязательно, если авторизация осуществляется через username и password. |
| Условие | password |
String [1..30] | Пароль учетной записи API продавца. Обязательно, если авторизация осуществляется через username и password. |
| Обязательно | orderNumber |
String [1..36] | Номер заказа (ID) в системе мерчанта; должен быть уникальным для каждого заказа. |
| Необязательно | description |
String [1..598] | Описание заказа в любом формате. Чтобы включить отправку этого поля в процессинговую систему, обратитесь в службу технической поддержки. В этом поле недопустимо передавать персональные данные или платежные данные (номера карт т.п.). Данное требование связано с тем, что описание заказа нигде не маскируется. |
| Необязательно | language |
String [2] | Ключ языка по ISO 639-1. Если язык не указан, используется язык по умолчанию, указанный в настройках магазина. Поддерживаемые языки: ru, en. |
| Необязательно | additionalParameters |
Object | Дополнительные параметры заказа, которые хранятся в личном кабинете продавца для последующего просмотра. Каждая новая пара имени параметра и его значения должна быть разделена запятой. Ниже приведен пример использования.{ "firstParamName": "firstParamValue", "secondParamName": "secondParamValue"}
|
| Необязательно | preAuth |
Boolean | Параметр, определяющий необходимость предварительной авторизации (блокирования средств на счете клиента до их списания). Доступны следующие значения:
|
| Обязательно | ip |
String [1..39] | IP адрес плательщика. IPv6 поддерживается во всех запросах (до 39 символов). |
| Обязательно | paymentToken |
String [1..8192] | Токен, полученный от MirPay. Значение должно быть закодировано в Base64. |
Параметры ответа
| Обязательность | Название | Тип | Описание |
|---|---|---|---|
| Обязательно | success |
Boolean | Основной параметр, который указывает на то, что запрос прошел успешно. Доступны следующие значения:
Обратите внимание, что значение true означает, что запрос был обработан, а не что заказ был оплачен.Более подробная информация о том, как узнать, был ли платеж успешным или нет, доступна здесь. |
| Условие | data |
Object | Этот параметр возвращается только в случае успешной обработки платежа. См. описание ниже. |
| Условие | error |
Object | Этот параметр возвращается только в случае ошибки платежа. См. описание ниже. |
Блок data содержит следующие элементы.
| Обязательность | Название | Тип | Описание |
|---|---|---|---|
| Обязательно | orderId |
String [1..36] | Номер заказа в платежном шлюзе. Уникален в пределах платежного шлюза. |
Блок error содержит следующие элементы.
| Обязательность | Название | Тип | Описание |
|---|---|---|---|
| Обязательно | code |
String [1..3] | Код как информационный параметр, сообщающий об ошибке. |
| Обязательно | description |
String [1..598] | Подробное техническое объяснение ошибки - содержимое этого параметра не предназначено для отображения пользователю. |
| Обязательно | message |
String [1..512] | Информационный параметр, являющийся описанием ошибки для отображения пользователю. Параметр может варьироваться, поэтому не следует явным образом ссылаться на его значения в коде. |
Примеры
Пример запроса
curl --request POST \
--url https://mkb.rbsuat.com/payment/mir/paymentDirect.do \
--header 'Content-Type: application/json' \
--data-raw '{
"username": "test_user",
"password": "test_user_password",
"orderNumber": "243ec139-4b5a-7859-b409-bbcb4806bc81",
"description": "Order description",
"language": "RU",
"additionalParameters": {},
"preAuth" : false,
"ip": "x.x.x.x",
"paymentToken": "eyJ0YW4iOiIyMj...wifQ=="
}'Ответ в случае успешной оплаты
{
"success": true,
"data": {
"orderId": "243ec139-4b5a-7859-b409-bbcb4806bc81"
}
}Ответ в случае неудачной оплаты
{
"error": {
"code": 1,
"description": "Processing Error",
"message": "Insufficient amount on card"
},
"success": false
}