Разделение платежа
Разделение платежа (split payment) - это способ проведения оплаты в маркетплейсе, при котором одна транзакция направляется в адрес двух и более юридических лиц (магазинов в системе UnonaPay).
Условия использования разделения платежа
Ограничения использования разделения платежа
- Работает только с токенами карт.
- Маркетплейс должен быть зарегистрирован в системе UnonaPay как отдельный магазин.
- Магазины маркетплейса должны быть зарегистрированы в системе UnonaPay и иметь Shop ID магазина.
- Валюта транзакции в адрес магазинов маркетплейса определяется валютой транзакции списания средств с клиента. Возможность установки отдельной валюты для платежей в адрес магазинов маркетплейса отсутствует (конвертер валют не работает с разделением платежей).
Распределение сумм платежей через операцию разделения платежа
- Сумма, которая будет списана с карты клиента, указывается в параметре
amount
в запросе разделения платежа. - Сумма, которая будет выплачена каждому магазину, указывается в секции
split
в запросе разделения платежа. - Сумма, которая будет выплачена маркетплейсу (комиссия маркетплейса), рассчитывается как разница между суммой
amount
, указанной в запросе разделения платежа, и суммами платежей каждому магазину из секцииsplit
.
Запрос разделения платежа
Для проведения платежа с разделением суммы отправьте POST
запрос на https://api.unonapay.com/splits/payment
с такими же параметрами как у запросов авторизации или оплаты и дополнительной секцией split
:
Параметр | Тип | Описание |
---|---|---|
amount * обязательный |
integer | Сумма, которая будет списана с карты пользователя в минимальных денежных единицах (например, $32.45 это 3245) |
additional_data | object | Секция дополнительной информации о платеже. |
split | object | Секция, содержащая информацию о магазинах, принимающих участие в разделении платежа. |
{shop ID} * обязательный |
integer | Сумма в минимальных денежных единицах, которая должна быть выплачена магазину (например, $32.45 это 3245). Сумма платежей в адрес магазинов не должна превышать или быть равной сумме, указанной в параметре amount .Ключ параметра должен содержать Shop ID того магазина, который принимает участие в разделении платежа. |
Авторизация запроса разделенного платежа выполняется при помощи заголовков с учетными данными главного магазина (маркетплейса). Авторизация для магазинов маркетплейса выполняется автоматически по их shop ID
, которые указываются в запросе на разделение платежа в секции split
.
Пример запроса
{
"request": {
"amount": 100,
"currency": "USD",
"description": "Test transaction",
"tracking_id": "tracking_id_000",
"billing_address": {
"first_name": "John",
"last_name": "Doe",
"country": "US",
"city": "Denver",
"state": "CO",
"zip": "96002",
"address": "1st Street"
},
"credit_card": {
"token": "credit-card-token"
},
"customer": {
"ip": "127.0.0.1",
"email": "john@example.com",
"device_id": "12312312321fff67",
"birth_date": "1980-01-31"
},
"additional_data": {
"contract": "test",
"split": {
"241": 40,
"242": 50
}
}
}
}
Ответ
Ответ на запрос разделения платежа будет содержать следующие параметры:
Параметр | Тип | Описание |
---|---|---|
uid * обязательный |
string | UID транзакции. |
amount * обязательный |
integer | Сумма в минимальных денежных единицах. Например, $32.45 это 3245. |
status * обязательный |
string | Возможны стандартные статусы транзакций и статус cancelling - запрошена отмена транзакций (все транзакции будут отменены или уже отменены). |
message * обязательный |
string | Сообщение с результатом запроса. |
shop_id * обязательный |
integer | Shop ID магазина. |
parent * обязательный |
boolean | Допустимые значения:true - родительская (главная) транзакция (комиссия маркетплейса). Родительская транзакция обрабатывается первой.false - транзакция в адрес магазина маркетплейса. |
parent_uid * обязательный |
string | UID родительской транзакции. |
Пример успешного ответа
{
"splits": [
{
"uid": "21-99834feb0b",
"amount": 70,
"status": "successful",
"message": "Successfully processed",
"shop_id": 91,
"parent": true,
"parent_uid": null
},
{
"uid": "22-56784ffecd",
"amount": 10,
"status": "successful",
"message": "Successfully processed",
"shop_id": 1111,
"parent": false,
"parent_uid": "21-99834feb0b"
},
{
"uid": "23-abcd4f1234",
"amount": 20,
"status": "successful",
"message": "Successfully processed",
"shop_id": 2222,
"parent": false,
"parent_uid": "21-99834feb0b"
}
]
}
Пример ответа, если одна из транзакций была отклонена
{
"splits": [
{
"uid": "21-99834feb0b",
"amount": 10,
"status": "cancelling",
"message": "Cancel has been requested.",
"shop_id": 240,
"parent": true,
"parent_uid": "nil"
},
{
"uid": "123",
"amount": 40,
"status": "cancelling",
"message": "Cancel has been requested.",
"shop_id": 241,
"parent": false,
"parent_uid": "21-99834feb0b"
},
{
"uid": "234",
"amount": 50,
"status": "failed",
"message": "Decline",
"shop_id": 242,
"parent": false,
"parent_uid": "21-99834feb0b"
}
]
}
Пример ответа, если сумма платежей в адрес магазинов выше или равна сумме, указанной в параметре amount
HTTP статус код 422.
{
"message": "Split sum is equal or more than main amount."
}
Отмена разделения платежа
Если хотя бы одна транзакция из разделенного платежа будет отклонена или вернет ошибку, система отменит все предыдущие транзакции.
Первой UnonaPay обрабатывает главную транзакцию (сумму, что должна быть выплачена как комиссия маркетплейса).
- Если главная транзакция была отклонена шлюзом или эквайером, UnonaPay не будет обрабатывать все оставшиеся транзакции из запроса на разделение платежа.
- Если главная транзакция была успешно обработана, но первая транзакция из запроса на разделение платежа не была успешно завершена, UnonaPay отправит для главной транзакции запрос на отмену авторизации или возврат средств.
- Если главная транзакция была успешно обработана, и несколько транзакций из запроса на разделение платежа были успешно обработаны, но последняя транзакция была отклонена шлюзом или эквайером, UnonaPay отменит авторизацию или выполнит возврат средств для всех предыдущих транзакций, включая главную.
- Если ошибка произойдет до отправки каких-либо запросов на шлюз, UnonaPay также обработает этот случай и вернет стандартное сообщение об ошибке.