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

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

Расщепление платежей

Функциональность Расщепление e-commerce платежей дает возможность разделить сумму платежа, поступившего на транзитный счет в рамках интернет-эквайринга на несколько частей. Затем части платежа зачисляются на текущие счета или платежные карты бенефициаров. Ниже приведено описание функциональности и API запросов мерчанта.

Описание

Регистрация Мерчанта-партнера

  1. Mерчант-агрегатор (далее МА) отправляет запрос на регистрацию мерчанта-партнера (далее МП) с указанием данных о клиенте, контракта и счета в Банк.
  2. Банк осуществляет проверки.
  3. Банк создает данные о Клиенте, счете и контракте МП с присвоением ему регистрационного номера.
  4. Банк отправляет ответ на запрос регистрации МП МА с указанием регистрационных номеров МП.
  5. Банк осуществляет проверку наличия клиента МП в разрезе МА, сформировавшего запрос. Если данные присутствуют, то Банк отправляет ответ на запрос регистрации МП МА с указанием кода ошибки -346100500 - PARTNER_ALREADY_REGISTERED.
  6. Если не удается получить ответ на запрос создания клиента, контракта, постоянного платежного поручения (далее ППП) в течение указанного времени ожидания ответа, продолжается повторная отправка запроса. Если по истечении заданного количества попыток не был получен успешный ответ, то Банк удаляет созданные данные и отправляет ответ на запрос регистрации МП МА с указанием кода ошибки -246100500 - EXTERNAL_COMMUNICATION_ERROR.

Редактирование данных о МП

  1. Mерчант-агрегатор (далее МА) отправляет запрос на регистрацию мерчанта-партнера (далее МП) с указанием идентификатора клиента и изменяемыми данными в Прокси Банк.
  2. Банк осуществляет проверки.
  3. Банк осуществляет обработку запроса.
  4. Банк возвращает ответ на запрос редактирования клиента, контракта, ППП.
  5. Банк обновляет соответствующие данные о МП, контракте, счете.
  6. Банк отправляет ответ на запрос регистрации МП МА.

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

  1. МП формирует заказ.
  2. МА выполняет запрос регистрации заказа с предавторизацией registerPreAuth.do.
  3. Банк регистрирует заказ и возвращает orderId.
  4. МП перенаправляется на платежную страницу и отправляет заполненные данные.
  5. Банк выполняет проверки и осуществляет оплату.
  6. МП перенаправляется в магазин, на финишную страницу.
  7. МА производит запрос deposit.do и getOrderStatusExtended.do.
  8. Банк возвращает МА paymentAmount/feeAmount, authRefNum.

Передача инструкций по расщеплению

  1. МА отправляет запрос передачи инструкций на расщепление splitInstruction.do в Банк с указанием идентификатора заказа, RRN операции (поле referenceNumber), а также данных по расщеплению.
  2. Банк выполняет необходимые проверки (отсутствие дублей инструкций, корректность данных и т.д.). В данном случае под дублями подразумеваются только инструкции в статусе PENDING (создана) и SUCCESS (обработана).
  3. Банк отправляет расширенный запрос получения статуса заказа getOrderStatusExtension.do - получает успешный ответ.
  4. По RRN заказа Банк определяет направление инструкций по расщеплению, полученных от МА, - инструкции относятся к возврату платежа (полному или частичному).
  5. Банк проверяет состояние заказа - состояние заказа "4 - По транзакции была проведена операция возврата".
  6. Банк проверяет наличие инструкций по расщеплению по прямым операциям (тип операции - "purchase") по тем МП, которые были переданы в запросе передачи инструкций на расщепление от МА, - инструкции найдены.
  7. Банк проверяет наличие инструкций по расщеплению с отрицательной суммой к расщеплению (sign="-") - инструкций с отрицательными суммами не найдено.
  8. Банк проверяет соответствие суммы возврата (refundedAmount), указанной в ответе на расширенный запрос получения статуса заказа, общей сумме расщепления, указанной во всех инструкциях запроса передачи инструкций на расщепление от МА, - сумма соответствует.
  9. Банк сохраняет инструкции на расщепление в БД, указывая следующие данные:

    Поле Описание
    splitId Идентификатор инструкции в системе МА. Указывается по данным запроса передачи инструкции на расщепление от МА
    regNumber Регистрационный номер МП. Указывается по данным запроса передачи инструкции на расщепление от МА
    status Статус инструкции на расщепление - PENDING (создана)
    amount Сумма расщепления. Указывается по данным запроса передачи инструкции на расщепление от МА
    type Тип расщепления - refund (возвраты)
    id Уникальный идентификатор инструкции
  10. Банк обновляет статус инструкции на расщепление на SUCCESS (обработана).

  11. Банк возвращает успешный ответ на запрос регистрации инструкции на расщепление splitInstruction.do.

Альтернативный сценарий

Если Банк определяет направление инструкций как относящиеся к прямому платежу, то Банк проверяет состояние заказа - состояние заказа "2 - Проведена полная авторизация суммы заказа". Затем шаги 7-11 выглядят так:

7а. Банк проверяет соответствие указанной в ответе на расширенный запрос получения статуса заказа суммы списания (depositedAmount) за вычетом размера комиссии, полученного в ответе на авторизационный запрос общей сумме расщепления с учетом знака расщепления, указанной во всех инструкциях запроса передачи инструкций на расщепление от МА, - сумма соответствует.

8а. Банк сохраняет инструкции на расщепление в БД, указывая следующие данные:

Поле Описание
splitid Идентификатор инструкции в системе МА. Указывается по данным запроса передачи инструкции на расщепление от МА
regNumber Регистрационный номер МП. Указывается по данным запроса передачи инструкции на расщепление от МА
amount Сумма расщепления. Указывается по данным запроса передачи инструкции на расщепление от МА
type Тип расщепления - refund (возвраты)
status Статус инструкции на расщепление - PENDING (создана)

9а. Банк обновляет статус инструкции на расщепление на SUCCESS (обработана).

10а. Банк возвращает успешный ответ на запрос регистрации инструкции на расщепление splitInstruction.do.

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..200] Пароль учетной записи API продавца.
Обязательно Обязательно

merchants Array Массив данных по Мерчантам-партнерам.
Обязательно Обязательно

type String [1..4] Тип действия с Мерчантом-партнером:
  • add - добавление мерчант-партнера;
  • edit - редактирование сведений о мерчанте-партнере/постоянном платежном получении.

В случае type=edit указываются только те поля, которые должны быть отредактированы. При передачи неизменяемых параметров будет возвращена ошибка. В случае type=edit передавать незаполненные поля запрещено.
Необязательно Обязательно

regNumber String [1..11] Регистрационный номер Мерчант-партнера. Указывается, только если type=edit.
Обязательно Необязательно

unp String [1..11] Учетный номер плательщика (УНП) Юридических лиц и Индивидуальных предпринимателей (9 цифр). Обязательно, если type=add. Формат: первые 2 символа - буквы или цифры 0-9, с 3 по 9 символы - цифры 0-9.
Обязательно Необязательно

shortName String [1..255] URL страницы МП на платформе (или наименование интернет-ресурса для приложений) в формате /<мерчант.бай>/<мерчант.бел>. Обязательно, если type=add.
Обязательно Необязательно

companyName String [1..255]
  • Для физических лиц (ФЛ) указывается Фамилия Имя Отчество;
  • Для индивидуальных предпринимателей (ИП) - ИП Фамилия Имя Отчество;
  • Для юридических лиц (ЮЛ) - полное наименование ЮЛ с указанием формы собственности.
Допустимо указание только символов кириллицы. Обязательно, если type=add.
Обязательно Необязательно

companyTradeName String [1..255]
  • Для физических лиц (ФЛ) указывается Фамилия Имя Отчество;
  • Для индивидуальных предпринимателей (ИП) - торговое наименование (или ИП фамилия имя отчество );
  • Для юридических лиц (ЮЛ) - торговое название предприятия.
Допустимо указание только символов кириллицы. Обязательно, если type=add.
Обязательно Необязательно

order Object Блок сведений о постоянном платежном поручении. Обязательно, если type=add.
Обязательно Необязательно

targetNumber String [1..28] Номер счета. Обязательно, если type=add. Допустимо указание только цифр и символов латиницы. В случае, если type=edit и текущий счет зарегистрирован в Альфа Банк Беларусь, то новый счет также должен быть зарегистрирован в Альфа Банк Беларусь (в targetNumber с 5 по 8 символы указано значение ALFA).
Необязательно Необязательно

bic String [1..8] Банковский идентификационный код. Обязательно только в случае, если type=add и счет зарегистрирован не в АББ (в targetNumber с 5 по 8 символы значение отличается от ALFA).
Необязательно Необязательно

currency Integer [3] Валюта счета. Обязательно только в случае, если type=add и счет зарегистрирован в АББ (в targetNumber с 5 по 8 символы указано значение ALFA). В этом случае указывается одно из следующих значений:
  • BYN - белорусский рубль;
  • RUR - рубль РФ;
  • USD - доллар США;
  • EUR - евро.

В случае, если счет зарегистрирован не в АББ, то не указывается, либо указывается значение BYN. В случае, если type=edit, то не указывается. В случае изменения валюты у МП, необходимо зарегистрировать нового МП.

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

Обязательность Название Тип Описание
Обязательно

status String [1..20] Статус обработки запроса. Доступны следующие значения:
  • COMPLETE - запрос обработан успешно;
  • COMPLETE_WITH_ERRRORS - запрос обработан с ошибками.
Статус COMPLETE_WITH_ERRRORS возвращается, если хотя бы один из Мерчантов-партнеров не был зарегистрирован.
Обязательно

merchants Array Массив данных по Мерчантам-партнерам.
Обязательно

regNumber String [1..11] Регистрационный номер Мерчант-партнера. Указывается, только если type=edit.
Обязательно

unp String [1..11] Учетный номер плательщика (УНП) Юридических лиц и Индивидуальных предпринимателей (9 цифр). Обязательно, если type=add. Формат: первые 2 символа - буквы или цифры 0-9, с 3 по 9 символы - цифры 0-9.
Обязательно

status String [1..6] Статус регистрации Мерчанта-партнера. Доступны следующие значения:
  • SUCCESS - регистрация пройдена успешно;
  • FAIL - регистрация не выполнена.
Необязательно

error String Сообщение об ошибке (если в ответе вернулась ошибка) на языке, переданном в запросе.
Обязательно

errorCode Integer [1..3] Код ошибки. Доступны следующие значения:
  • -146100500 - GENERAL ERROR;
  • -246100500 - EXTERNAL_COMMUNICATION_ERROR;
  • -346100500 - PARTNER_ALREADY_REGISTERED;
  • -346100501 - PARTNER_DOESNT_EXIST;
  • -446100501 - SAME_DATA.
Полный перечень ошибок необходимо уточнять у Банка.
Необязательно

errorDesc String [1..99] Описание ошибки.

Примеры

Пример запроса - регистрация МП

POST /split-abb/partner/merchantPartner.do
headers:
User-Agent: [Apache-HttpClient/4.5.13 (Java/11.0.13)]
Connection: [keep-alive]
Host: [localhost:8088]
Accept-Encoding: [gzip,deflate]
Content-Length: [411]
Content-Type: [application/json;charset=UTF-8]
body:
{
  "userName": "**username**",
  "password": "**password**",
  "merchants": [
    {
      "type": "add",
      "unp": "623458985",
      "shortName": "merchant.ru",
      "companyName": "Рога и копыта",
      "companyTradeName": "Рога и копыта TradeName",
      "order": {
        "targetNumber": "723456789",
        "bic": "PJCBBY2X",
        "currency": "BYN"
      }
    }
  ]
}

Пример запроса - изменение МП

POST /split-abb/partner/merchantPartner.do
headers:
User-Agent: [Apache-HttpClient/4.5.13 (Java/11.0.13)]
Connection: [keep-alive]
Host: [localhost:8088]
Accept-Encoding: [gzip,deflate]
Content-Length: [411]
Content-Type: [application/json;charset=UTF-8]
body:
{
  "userName": "**username**",
  "password": "**password**",
  "merchants": [
    {
      "type": "edit",
      "regNumber": "SPLIT000087",
      "companyName": "Рога, копыта и хвост"
    }
  ]
}

Пример успешного ответа

status: 200
headers:
Date: [Tue, 29 Mar 2022 09:08:06 GMT]
Content-Type: [application/json]
body:
{"status": "COMPLETE", "merchants":[{"regNumber":"SPLIT000087","unp":"623458985","status":"SUCCESS","error":null}]}

Пример неуспешного ответа - попытка повторной регистрации МП

status: 200
headers:
Date: [Tue, 29 Mar 2022 09:20:42 GMT]
Content-Type: [application/json]
body:
{"status": "COMPLETE_WITH_ERRORS", "merchants":[{"regNumber":null,"unp":"623458985","status":"FAIL","error":{"errorCode":-346100500,"errorDesc":"Partner already registered"}}]}

Пример неуспешного ответа - неуспешная авторизация

HTTP/1.1 401 Unauthorized
Date: Tue, 29 Mar 2022 09:19:46 GMT
Content-Type: text/plain;charset=utf-8
Content-Length: 21
Authentication failed

Пример неуспешного ответа - неуспешная валидация

HTTP/1.1 400 Bad Request
Date: Tue, 29 Mar 2022 09:22:52 GMT
Content-Type: text/plain;charset=utf-8
Content-Length: 80
Validation failed for param [$.merchants[0].unp] with message: must be not blank

Передача инструкции по расщеплению

Запрос splitInstruction.do позволяет мерчанту-агрегатору отправлять инструкции на расщепление платежей по мерчант-партнеру.

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

Обязательность Название Тип Описание
Обязательно

userName String [1..100] Логин учетной записи API продавца.
Обязательно

password String [1..200] Пароль учетной записи API продавца.
Обязательно

orderId String [1..36] Номер заказа в платежном шлюзе. Уникален в пределах платежного шлюза.
Обязательно

referenceNumber String [12] Уникальный идентификационный номер, который присваивается операции по ее завершению.
Обязательно

instructions Array Массив данных по инструкциям по расщеплению в рамках указанного заказа. Допускается указание от 1 до 50 инструкций.
Необязательно

splitid String [1..30] Идентификатор инструкции в системе МА. Используется для удобства отслеживания статуса инструкции по расщеплению.
Обязательно

regNumber String [1..11] Регистрационный номер Мерчант-партнера, полученный в ответе на запрос регистрации МП - merchantPartner.do.
Обязательно

amount Integer [0..12] Сумма расщепления в минимальных единицах валюты, указанной при регистрации заказа.
Необязательно

sign String [1..20] Знак суммы расщепления. Доступны следующие значения:
  • + - положительная сумма;
  • - - отрицательная сумма.
Отрицательная сумма используется для возмещения расходов комиссии для мерчанта-агрегатора. В случае, если знак не указан, то по умолчанию считается значение sign="+".

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

Обязательность Название Тип Описание
Обязательно

status String [1..20] Статус обработки запроса. Доступны следующие значения:
  • COMPLETE - запрос обработан успешно;
  • COMPLETE_WITH_ERRRORS - запрос обработан с ошибками.
Статус COMPLETE_WITH_ERRRORS возвращается, если хотя бы один из Мерчантов-партнеров не был зарегистрирован.
Обязательно

instructions Array Массив данных по инструкциям по расщеплению в рамках указанного заказа. Допускается указание от 1 до 50 инструкций.
Необязательно

splitid String [1..30] Идентификатор инструкции в системе МА. Используется для удобства отслеживания статуса инструкции по расщеплению.
Обязательно

regNumber String [1..11] Регистрационный номер Мерчант-партнера, полученный в ответе на запрос регистрации МП - merchantPartner.do.
Обязательно

amount Integer [0..12] Сумма расщепления в минимальных единицах валюты, указанной при регистрации заказа.
Необязательно

sign String [1..20] Знак суммы расщепления. Доступны следующие значения:
  • + - положительная сумма;
  • - - отрицательная сумма.
Отрицательная сумма используется для возмещения расходов комиссии для мерчанта-агрегатора. В случае, если знак не указан, то по умолчанию считается значение sign="+".
Обязательно

status String [1..6] Статус передачи инструкции по расщеплению. Доступны следующие значения:
  • SUCCESS - инструкция по расщеплению передана успешно;
  • FAIL - инструкция по расщеплению не передана.
Необязательно

error String Сообщение об ошибке (если в ответе вернулась ошибка) на языке, переданном в запросе.
Обязательно

errorCode Integer [1..3] Код ошибки. Доступны следующие значения:
  • GENERAL_ERROR(-146100500, "General error");
  • EXTERNAL_COMMUNICATION_ERROR(-246100500, "External service communication error");
  • PARTNER_NOT_FOUND(-346100501, "Partner is not found");
  • ORDER_IN_WRONG_STATE(-346100503, "Order is in wrong state for splitting");
  • CURRENCY_MISMATCH(-346100504, "Order currency is not equals partner currency");
  • NEGATIVE_SUM(TBD, " For refund operation is not possible to use negative sum").
Полный перечень ошибок необходимо уточнять у Банка.
Необязательно

errorDesc String [1..99] Описание ошибки.

Примеры

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

POST /split-abb/split/splitInstruction.do
headers:
User-Agent: [Apache-HttpClient/4.5.13 (Java/11.0.13)]
Connection: [keep-alive]
Host: [localhost:8088]
Accept-Encoding: [gzip,deflate]
Content-Length: [411]
Content-Type: [application/json;charset=UTF-8]
body:
{
  "userName": "**username**",
  "password": "**password**",
  "orderId": "5e97e3fd-1d20-4b4b-a542-f5995f5e8208",
  "referenceNumber": "123456789012",  
  "instructions": [
    {
      "splitId": "a2345lk3d",
      "regNumber": "SPLIT000087",
      "amount": "100",
      "sign": "+"
    }
  ]
}

Пример успешного ответа

status: 200
headers:
Date: [Tue, 29 Mar 2022 09:08:06 GMT]
Content-Type: [application/json]
body:
{"status": "COMPLETE", "instructions":[{"splitId":"a2345lk3d","regNumber":"SPLIT000087","amount":"100","sign":"+","status":"SUCCESS","error":null}]}

Пример неуспешного ответа - неуспешная авторизация

HTTP/1.1 401 Unauthorized
Date: Tue, 29 Mar 2022 09:19:46 GMT
Content-Type: text/plain;charset=utf-8
Content-Length: 21
Authentication failed

Пример неуспешного ответа - неуспешная валидация

HTTP/1.1 400 Bad Request
Date: Tue, 29 Mar 2022 09:22:52 GMT
Content-Type: text/plain;charset=utf-8
Content-Length: 80
Validation failed for param [$.merchants[0].unp] with message: must be not blank
Категории:
eCommerce API V1
Категории
Результаты поиска