Расщепление платежей
Функциональность Расщепление e-commerce платежей дает возможность разделить сумму платежа, поступившего на транзитный счет в рамках интернет-эквайринга на несколько частей. Затем части платежа зачисляются на текущие счета или платежные карты бенефициаров.
Ниже приведено описание функциональности и API запросов мерчанта.
В описании используются следующие термины:
- Мерчант-агрегатор (МА) - Торгово-сервисное предприятие (магазин, мерчант), предоставляющее услугу размещения на собственном сайте (MarketPlace) информации о товарах и возможность осуществления продажи товара через сайт МА.
- Мерчант-партнер (МП) - Мерчант, размещающий на сайте МА информацию о своих товарах на основании договора, заключенного с МА.
- WAY4 - Система для ведения контрактов эквайринга МА и МП, позволяющая обрабатывать e-commerce онлайн-платежи, а также обрабатывающая инструкции по расщеплению e-commerce платежей и отражающая суммы расщепления на счетах контрактов МП.
Описание
Регистрация Мерчанта-партнера
merchantPartner.do, type=add Bank->>Bank: Проверка наличия МП Bank->>Bank: Создание МП с указанием данных мерчанта Bank->>Bank: Проверка наличия клиента МП в разрезе МА Bank->>Bank: Создание данных клиента, контракта и счета МП в разрезе МА.
Присвоение рег. номера МП в разрезе МА Bank->>Bank: Взаимодействие с WAY4 для создания
клиента и обновление данных по МП, контракту и счету Bank-->>MA: Ответ на запрос, regNumber
- Mерчант-агрегатор (далее МА) отправляет запрос на регистрацию мерчанта-партнера (далее МП) merchantPartner.do, type=add с указанием данных о клиенте, контракта и счета в Банк.
- Банк проверяет, что МП отсутствует в справочнике МП.
- Банк создает МП с указанием данных мерчанта.
- Банк проверяет, что отсутствуют данные о клиенте МП в разрезе МА.
- Банк создает данные о клиенте, контракте, и счете МП в разрезе МА.
- Банк взаимодействует с WAY4 для создания клиента и обновляет данные по контракту и счету МП в разрезе МА.
- Банк отправляет МА ответ на запрос регистрации МП с указанием регистрационных номеров МП.
Возможные ошибки
- Если при проверке наличия клиента МП в разрезе МА, сформировавшего запрос,(шаг 4) данные о клиенте найдены, то Банк отправляет МА ответ на запрос регистрации МП с указанием кода ошибки -346100500 -
PARTNER_ALREADY_REGISTERED. - Если не удается получить ответ от WAY4 на запрос создания клиента, контракта и счета (шаг 6) в течение указанного времени ожидания ответа, продолжается повторная отправка запроса. Если по истечении заданного количества попыток не был получен успешный ответ, то Банк удаляет созданные данные и отправляет ответ на запрос регистрации МП МА с указанием кода ошибки -246100500 -
EXTERNAL_COMMUNICATION_ERROR.
Редактирование данных о МП
merchantPartner.do, type=edit Bank->>Bank: Проверка наличия МП Bank->>Bank: Проверка уникальности изменяемых данных Bank->>Bank: Взаимодействие с WAY4 для редактирования
клиента, контракта, ППП, regNumber Bank->>Bank: Обновление данных по МП, контракту, ППП Bank-->>MA: Ответ на запрос, status
- Mерчант-агрегатор (далее МА) отправляет запрос на регистрацию мерчанта-партнера (далее МП) merchantPartner.do, type=edit с указанием идентификатора клиента и изменяемыми данными в Банк.
- Банк проверяет, что МП присутствует в справочнике МП.
- Банк проверяет, что изменяемые данные отличаются от существующих.
- Банк взаимодействует с WAY4 для редактирования клиента, контракта и счета.
- Банк обновляет соответствующие данные о МП, контракте, счете.
- Банк отправляет ответ на запрос регистрации МП МА.
Возможные ошибки
- Если в результате проверки (шаг 2) данные о МП не найдутся, то Банк отправляет ответ на запрос регистрации МП МА с указанием кода ошибки -346100501 -
PARTNER_DOESNT_EXIST. - Если в результате проверки уникальности изменяемых данных (шаг 3) - хотя бы одни из изменяемых данных совпадают существующими, то Банк отправляет ответ на запрос регистрации МП МА с указанием кода ошибки -446100501 -
SAME_DATA.
Проведение оплаты
Ниже описан типовой сценарий проведения оплаты - двухстадийная оплата, т.к. после отправки запроса deposit.do банк получает от WAY4 сумму комиссии, которая учитывается при подаче инструкций на расщепление. Но если у вас есть возможность получать комиссию иным способом, вы можете использовать одностадийную оплату с использованием запросов register.do и paymentorder.do (см. Прямые платежи).
для обработки запроса
и получения суммы комиссии Bank-->>MA: Ответ на запрос deactivate Bank deactivate MA MA->>Bank: Запрос статуса заказа getOrderStatusExtended.do activate MA activate Bank Bank-->>MA: Ответ на запрос, paymentAmountInfo.feeAmount, authRefNum deactivate Bank deactivate MA
- Клиент формирует заказ.
- МА выполняет запрос регистрации заказа с предавторизацией registerPreAuth.do.
- Банк регистрирует заказ
- Банк возвращает
orderId. - Клиент перенаправляется на платежную страницу.
- Клиент отправляет заполненные данные.
- Банк проверяет вовлеченность карты в 3DS.
- Клиент перенаправляется на платежную страницу.
- Клиент выполняет авторизацию на ACS.
- Банк выполняет блокировку денежных средств.
- Клиент перенаправляется на страницу магазина.
- Браузер клиента запрашивает результат.
- МА отправляет запрос статуса заказа getOrderStatusExtended.do.
- Банк возвращает ответ на запрос статуса заказа.
- МА перенаправляет Клиента на финишную страницу.
- МА отправляет запрос завершения оплаты deposit.do.
- Банк взаимодействует с WAY4 для обработки запроса и получения суммы комиссии.
- Банк возвращает ответ на запрос завершения оплаты.
- МА отправляет запрос статуса заказа getOrderStatusExtended.do.
- Банк возвращает ответ на запрос статуса заказа. При этом в поле
paymentAmountInfo.feeAmountвозвращается размер комиссии, а в параметреauthRefNum- уникальный номер операции. Эти параметры нужно будет указать при передаче инструкций на расщепление.
Отмена оплаты
reverse.do Bank->>Bank: Проведение отмены оплаты Bank-->>MA: Ответ на запрос отмены оплаты MA->>Bank: Запрос статуса заказа getOrderStatusExtended.do Bank-->>MA: Ответ на запрос
- МА отправляет запрос отмены оплаты reverse.do в Банк.
- Банк выполняет отмену оплаты.
- Банк возвращает ответ на запрос отмены оплаты.
- МА отправляет запрос статуса заказа getOrderStatusExtended.do.
- Банк возвращает ответ на запрос статуса заказа.
Возврат оплаты
refund.do Bank->>Bank: Проведение возврата Bank-->>MA: Ответ на запрос возврата MA->>Bank: Запрос статуса заказа getOrderStatusExtended.do Bank-->>MA: Ответ на запрос (refunds.referenceNumber)
- МА отправляет запрос возврата refund.do в Банк.
- Банк выполняет возврат.
- Банк возвращает ответ на запрос возврата.
- МА отправляет запрос статуса заказа getOrderStatusExtended.do.
- Банк возвращает ответ на запрос статуса заказа. В поле
refunds.referenceNumberвозвращается уникальный идентификационный номер операции, который необходимо указать при передаче инструкций на расщепление.
Передача инструкций по расщеплению
splitInstruction.do Bank->>Bank: Необходимые проверки Bank->>Bank: Сохранение инструкций по расщеплению Bank->>Bank: Взаимодействие с WAY4,
обработка каждой инструкции,
указанной в запросе Bank-->>MA: Ответ на запрос
- МА отправляет запрос передачи инструкций на расщепление splitInstruction.do в Банк с указанием идентификатора заказа, уникального идентификатора операции (поле
referenceNumber), а также данных по расщеплению. - Банк выполняет необходимые проверки (отсутствие дублей инструкций, корректность данных и т.д.), а также определяет направление инструкций по расщеплению, полученных от МА - инструкции относятся платежу или к возврату платежа (полному или частичному).
- Банк сохраняет инструкции на расщепление в БД.
- Банк взаимодействует с WAY4 для обработки каждой инструкции по расщеплению, указанной в запросе.
- Банк возвращает успешный ответ на запрос регистрации инструкции на расщепление splitInstruction.do.
Возможные ошибки
- Если в результате проверки сохраненных дублей инструкций на расщепление (шаг 2) найдены дубли, то Банк возвращает ответ с указанием кода ошибки
400 Bad Request. - Если Банк получает неуспешный ответ на расширенный запрос получения статуса заказа (шаг 2) "заказ не найден", то Банк возвращает ответ с указанием кода ошибки
400 Bad Request. - Если Банк получает неуспешный ответ на расширенный запрос получения статуса заказа (шаг 2) "RRN не найден",то Банк возвращает ответ с указанием кода ошибки
400 Bad Request. - Если состояние заказа отличается от "4 - По транзакции была проведена операция возврата" (шаг 2), то Банк возвращает ответ с указанием кода ошибки
-346100503 ORDER_IN_WRONG_STATE. - Если инструкции по расщеплению по прямым операциям (тип операции - "1") не найдены (шаг 2), то Банк возвращает ответ с указанием кода ошибки
400 Bad Request. - Если найдены инструкции с отрицательными суммами (шаг 2), то Банк возвращает ответ с указанием кода ошибки
TBD NEGATIVE_SUM. - Если при возврате сумма возврата
refundedAmountне соответсвует указанной во всех инструкциях запроса передачи инструкций на расщепление (шаг 2), то Банк возвращает ответ с указанием кода ошибки400 Bad Request. - Если по истечении заданного количества попыток или времени на создание инструкции по расщеплению (шаг 4) не был получен успешный ответ, то Банк обновляет статус инструкции на расщепление на ERROR (ошибка) и возвращает ответ с указанием кода ошибки
400 Bad Request.
API запросы
Для авторизации обращения к системе Банка в любом запросе со стороны магазина должны быть приведены имя и пароль магазина, полученные при регистрации магазина в системе. Взаимодействия реализуются как HTTP обращения методом POST на определенные URL. Body запроса должен содержать json-объект. Результат обработки запроса возвращается в виде JSON объекта. Например: {"errorCode":"12","errorMessage":"Empty amount"}.
Все текстовые поля должны иметь кодировку Юникод (UTF-8). Если в ответе на запрос errorCode (Код ошибки) = 0, это означает, что запрос был обработан платежным шлюзом без системных ошибок. При этом errorCode не отображает статус заказа.
Регистрация мерчанта-партнера
Запрос merchantPartner.do позволяет мерчанту-агрегатору создавать и редактировать сведения о мерчанте-партнере.
Параметры запроса
| Обязательность при type=add | Обязательность при type=edit | Название | Тип | Описание |
|---|---|---|---|---|
| Обязательно | Обязательно | userName |
String [1..100] | Логин учетной записи API продавца. |
| Обязательно | Обязательно | password |
String [1..30] | Пароль учетной записи API продавца. |
| Обязательно | Обязательно | merchants |
Array | Массив данных по Мерчантам-партнерам. См. описание ниже. |
Параметры блока merchants:
| Обязательность при type=add | Обязательность при type=edit | Название | Тип | Описание |
|---|---|---|---|---|
| Обязательно | Обязательно | type |
String [1..4] | Тип действия с Мерчантом-партнером:
В случае type=edit указываются только те поля, которые должны быть отредактированы. При передачи неизменяемых параметров будет возвращена ошибка. В случае type=edit передавать незаполненные поля запрещено. |
| Необязательно | Обязательно | regNumber |
String [1..11] | Регистрационный номер Мерчант-партнера. Указывается, только если type=edit. |
| Обязательно | Необязательно | unp |
String [1..9] | Учетный номер плательщика (УНП) Юридических лиц и Индивидуальных предпринимателей (9 цифр). Обязательно, если type=add. Формат: первые 2 символа - буквы или цифры 0-9, с 3 по 9 символы - цифры 0-9. |
| Обязательно | Необязательно | shortName |
String [1..255] | URL страницы МП на платформе (или наименование интернет-ресурса для приложений) в формате merchant.com. Обязательно, если type=add. |
| Обязательно | Необязательно | companyName |
String [1..255] |
|
| Обязательно | Необязательно | companyTradeName |
String [1..255] |
|
| Обязательно | Необязательно | order |
Object | Блок сведений о постоянном платежном поручении. Обязательно, если type=add. См. описание ниже. |
Параметры блока order:
| Обязательность при type=add | Обязательность при type=edit | Название | Тип | Описание |
|---|---|---|---|---|
| Обязательно | Необязательно | targetNumber |
String [1..28] | Номер счета. Обязательно, если type=add. Допустимо указание только цифр и символов латиницы. В случае, если type=edit и текущий счет зарегистрирован в Альфа Банк Беларусь, то новый счет также должен быть зарегистрирован в Альфа Банк Беларусь (в targetNumber с 5 по 8 символы указано значение ALFA). |
| Условие | Необязательно | bic |
String [1..8] | Банковский идентификационный код. Обязательно только в случае, если type=add и счет зарегистрирован не в АББ (в targetNumber с 5 по 8 символы значение отличается от ALFA). |
| Условие | Необязательно | currency |
String [3] | Валюта счета. Обязательно только в случае, если type=add и счет зарегистрирован в АББ (в targetNumber с 5 по 8 символы указано значение ALFA). В этом случае указывается одно из следующих значений:
В случае, если счет зарегистрирован не в АББ, то не указывается, либо указывается значение BYN. В случае, если type=edit, то не указывается. В случае изменения валюты у МП, необходимо зарегистрировать нового МП. |
Параметры ответа
| Обязательность | Название | Тип | Описание |
|---|---|---|---|
| Обязательно | status |
String [1..20] | Статус обработки запроса. Доступны следующие значения:
COMPLETE_WITH_ERRORS возвращается, если хотя бы один из Мерчантов-партнеров не был зарегистрирован. |
| Обязательно | merchants |
Array | Массив данных по Мерчантам-партнерам. См. описание ниже. |
Параметры блока merchants:
| Обязательность | Название | Тип | Описание |
|---|---|---|---|
| Обязательно | regNumber |
String [1..11] | Регистрационный номер Мерчант-партнера. |
| Обязательно | unp |
String [1..9] | Учетный номер плательщика (УНП) Юридических лиц и Индивидуальных предпринимателей (9 цифр). Обязательно, если type=add. Формат: первые 2 символа - буквы или цифры 0-9, с 3 по 9 символы - цифры 0-9. |
| Обязательно | status |
String [1..6] | Статус регистрации Мерчанта-партнера. Доступны следующие значения:
|
| Необязательно | error |
String [1..512] | Сообщение об ошибке (если в ответе вернулась ошибка) на языке, переданном в запросе. |
Параметры блока error:
| Обязательность | Название | Тип | Описание |
|---|---|---|---|
| Обязательно | errorCode |
String | Код ошибки. Доступны следующие значения:
|
| Необязательно | errorDesc |
String [1..99] | Описание ошибки. |
Примеры
Пример запроса - регистрация МП
curl --request POST \
--url https://abby.rbsuat.com/split-abb/partner/merchantPartner.do \
--header 'content-type: application/json;charset=UTF-8' \
--data userName=username \
--data password=password \
--data merchants={"type": "add", "unp": "623458985", "shortName": "merchant.ru", "companyName": "Company Name", "companyTradeName": "Company TradeName"}'
--data order={"targetNumber": "723456789", "bic": "PJCBBY2X", "currency": "BYN"}'Пример запроса - изменение МП
curl --request POST \
--url https://abby.rbsuat.com/split-abb/partner/merchantPartner.do \
--header 'content-type: application/json;charset=UTF-8' \
--data userName=username \
--data password=password \
--data merchants={"type": "edit", "regNumber": "SPLIT000087", "companyName": "Companyname"}'Пример успешного ответа
{ "status": "COMPLETE",
"merchants":[{
"regNumber":"SPLIT000087",
"unp":"623458985",
"status":"SUCCESS",
"error":null
}
]
}Пример неуспешного ответа - попытка повторной регистрации МП
{
"status": "COMPLETE_WITH_ERRORS",
"merchants":[{
"regNumber":null,
"unp":"623458985",
"status":"FAIL",
"error":{"errorCode":-346100500,"errorDesc":"Partner already registered"}
}
]
}Передача инструкции по расщеплению
Запрос splitInstruction.do позволяет мерчанту-агрегатору отправлять инструкции на расщепление платежей по мерчант-партнеру.
Параметры запроса
| Обязательность | Название | Тип | Описание |
|---|---|---|---|
| Обязательно | userName |
String [1..100] | Логин учетной записи API продавца. |
| Обязательно | password |
String [1..30] | Пароль учетной записи API продавца. |
| Обязательно | orderId |
String [1..36] | Номер заказа в платежном шлюзе. Уникален в пределах платежного шлюза. |
| Обязательно | referenceNumber |
String [12] | Уникальный идентификационный номер, который присваивается операции по ее завершению. |
| Обязательно | instructions |
Array | Массив данных по инструкциям по расщеплению в рамках указанного заказа. Допускается указание от 1 до 50 инструкций. См. описание ниже. |
Параметры блока instructions:
| Обязательность | Название | Тип | Описание |
|---|---|---|---|
| Необязательно | splitid |
String [1..30] | Идентификатор инструкции в системе МА. Используется для удобства отслеживания статуса инструкции по расщеплению. |
| Обязательно | regNumber |
String [1..11] | Регистрационный номер Мерчант-партнера, полученный в ответе на запрос регистрации МП - merchantPartner.do. |
| Обязательно | amount |
Integer [0..12] | Сумма расщепления в минимальных единицах валюты (например, в копейках), указанной при регистрации заказа. |
| Необязательно | sign |
String [1..20] | Знак суммы расщепления. Доступны следующие значения:
|
Параметры ответа
| Обязательность | Название | Тип | Описание |
|---|---|---|---|
| Обязательно | status |
String [1..20] | Статус обработки запроса. Доступны следующие значения:
COMPLETE_WITH_ERRORS возвращается, если хотя бы один из Мерчантов-партнеров не был зарегистрирован. |
| Обязательно | instructions |
Array | Массив данных по инструкциям по расщеплению в рамках указанного заказа. Допускается указание от 1 до 50 инструкций. См. описание ниже. |
Параметры блока instructions:
| Обязательность | Название | Тип | Описание |
|---|---|---|---|
| Необязательно | splitid |
String [1..30] | Идентификатор инструкции в системе МА. Используется для удобства отслеживания статуса инструкции по расщеплению. |
| Обязательно | regNumber |
String [1..11] | Регистрационный номер Мерчант-партнера, полученный в ответе на запрос регистрации МП - merchantPartner.do. |
| Обязательно | amount |
Integer [0..12] | Сумма расщепления в минимальных единицах валюты (например, в копейках), указанной при регистрации заказа. |
| Необязательно | sign |
String [1..20] | Знак суммы расщепления. Доступны следующие значения:
|
| Обязательно | status |
String [1..6] | Статус передачи инструкции по расщеплению. Доступны следующие значения:
|
| Необязательно | error |
String [1..512] | Сообщение об ошибке (если в ответе вернулась ошибка) на языке, переданном в запросе. |
| Обязательно | errorCode |
String | Код ошибки. Доступны следующие значения:
|
| Необязательно | errorDesc |
String [1..99] | Описание ошибки. |
Примеры
Пример запроса
curl --request POST \
--url https://abby.rbsuat.com/split-abb/split/splitInstruction.do \
--header 'content-type: application/json;charset=UTF-8' \
--data userName=username \
--data password=password \
--data orderId=5e97e3fd-1d20-4b4b-a542-f5995f5e8208 \
--data referenceNumber=123456789012 \
--data instructions={"splitId": "a2345lk3d", "regNumber": "SPLIT000087", "amount": "100", "sign": "+"}'Пример успешного ответа
{
"status": "COMPLETE",
"instructions":[{
"splitId":"a2345lk3d",
"regNumber":"SPLIT000087",
"amount":"100",
"sign":"+",
"status":"SUCCESS",
"error":"null"
}
]
}Пример неуспешного ответа - неуспешная авторизация
{
"errorDesc":"Authentication failed"
}Ограничения
- Набор параметров Клиента и счета, который может быть изменен МА при отправке запроса на регистрацию МП, ограничен. В случае необходимости изменения других параметров обратитесь в Банк.
- Валюта платежа - Белорусский рубль.
- Банк не осуществляет контроль соответствия суммы к расщеплению по каждой инструкции, контроль осуществляется только на соответствие общей сумме инструкций по заказу.