Разбиение суммы платежа

Обзор

При проведении платежей можно столкнуться с ограничениями на максимальную сумму платежа, установленными со стороны провайдеров или платёжных систем. Чтобы проводить платежи в условиях подобных ограничений, платёжная платформа поддерживает разбиение суммы платежа, превышающей установленные ограничения, на несколько операций с меньшими суммами.

Возможность разбиения суммы платежа поддерживается для разовых оплат в одну или две стадии с прямым использованием платёжных карт, а также для выплат как с прямым использованием платёжных карт, так и с использованием других платёжных методов. Информацию о методах, для которых поддерживается разбиение суммы выплат, можно получить у курирующего менеджера ECommPay.

Особенности

Разбиение суммы платежа может быть применено совместно с каскадным проведением платежей. В этом случае может потребоваться выполнить процедуру дополнения информации о платеже более одного раза.

Также при проведении оплат с разбиением суммы может понадобиться выполнить аутентификацию 3‑D Secure более одного раза. В связи с этим на стороне веб-сервиса мерчанта требуется отображать пользователю предупреждение о том, что сумма может быть разбита и может возникнуть необходимость пройти аутентификацию 3‑D Secure несколько раз.

Ограничения

Разбиение суммы платежа возможно с учётом следующих ограничений:

  • Возможность должна поддерживаться для используемого платёжного метода.

    Если сумма платежа превышает ограничения, установленные со стороны провайдера или платёжной системы, но для используемого платёжного метода не поддерживается возможность разбиения суммы платежа, то разбиение суммы не выполняется. Информацию о поддерживаемых методах можно получить у курирующего менеджера ECommPay.

  • Количество операций, создаваемых в рамках платежа, не должно превышать заданное.

    Если количество операций, необходимых для проведения платежа, превышает заданное, платёж отклоняется. Количество таких операций настраивают специалисты технической поддержки — support@ecommpay.com.

  • Не поддерживается совместное применение разбиения суммы платежа и повторных попыток выплат.

    Если для платежа применено разбиение суммы и этот платёж отклонён, повторные попытки выплат в рамках этого платежа не выполняются.

Схема работы

Разбиение суммы платежа выполняется после поступления запроса на проведение этого платежа в платёжную платформу ECommPay. На стороне платёжной платформы проверяется соответствие суммы платежа, переданной в запросе, ограничениям со стороны провайдера или платёжной системы. Если сумма превышает такое ограничение, выполняется её разбиение на несколько операций, иначе платёж проводится стандартно. При необходимости конвертации суммы платежа проверка её соответствия ограничениям выполняется уже после конвертации.

Вычисление сумм для операций при разбиении суммы платежа выполняется следующим образом:

  1. Вычисляется количество операций с максимально допустимой суммой. Для этого сумма платежа делится на сумму лимита; полученное целое число равно количеству операций с максимально допустимой суммой.

    Например, максимальная сумма, установленная провайдером, составляет 1 800,00 EUR, а сумма платежа — 5 000,00 EUR. Тогда количество операций с максимально допустимой суммой вычисляется следующим образом: 5000 ÷ 1800 = 2,8. Таким образом, при разбиении создаются две операции с максимально допустимой суммой.

  2. Вычисляется оставшаяся сумма. Для этого из суммы платежа вычитается произведение установленного лимита и получившегося количества операций с максимально допустимой суммой.

    Например, при максимальной сумме, установленной провайдером, равной 1 800,00 EUR, сумме платежа равной 5 000,00 EUR и двум операциям с максимально допустимой суммой оставшаяся сумма вычисляется следующим образом: 5000 - (1800 × 2) = 1400. Таким образом, сумма третьей операции равна 1 400,00 EUR.

После вычисления сумм в платёжной платформе формируются и выполняются операции на соответствующие суммы. Информация о каждой успешной операции передаётся к веб-сервису мерчанта в оповещениях, формат которых описан далее.

Информация о платежах с разбиением суммы также отображается в столбце Тип процесса реестра платежей интерфейса Dashboard. Для каждого из таких платежей в этом столбце указывается значение split.

Подключение и настройка

Чтобы подключить эту возможность в рамках проекта мерчанта, со стороны мерчанта необходимо согласовать с курирующим менеджером ECommPay её подключение, а затем обратиться к специалистам технической поддержки (support@ecommpay.com). Максимально допустимое количество операций, создаваемых в рамках платежа, также задаётся специалистами технической поддержки ECommPay.

Формат оповещения о результате оплаты

Для оповещений о результатах оплат с разбиением суммы платежа используется стандартный формат, описание которого представлено в разделе Оповещения. Оповещение отправляется на каждую обработанную операцию по платежу.

Возможные итоговые статусы платежа:
  • success — оплачена вся сумма платежа,
  • decline — не оплачена вся сумма платежа и нет или закончены все попытки каскадного проведения,
  • partially paid — сумма платежа оплачена частично и нет или закончены все попытки каскадного проведения.

Полная сумма и валюта платежа передаются в объекте payment.sum:

  • amount — общая сумма платежа, всегда передается;
  • currency — валюта платежа, всегда передается;
В зависимости от типа операции и статуса платежа в объекте payment могут передаваться следующие параметры, содержащие информацию о суммах:
  • actual_amount — фактическая сумма, которая была оплачена по проведенной операции sale или capture, всегда передается;
  • amount_authorized — фактическая сумма, которая ранее была заблокирована операцией auth, и ее можно либо подтвердить операцией capture, либо отменить операцией cancel, передается, если оплата в две стадии;
  • amount_remaining_refund — сумма, на которую возможно сделать возврат средств пользователю, передается только для платежей со статусом partially paid или success.

Далее приведены примеры оповещений, отправляемые при разных возможных вариантах проведения оплат в одну и две стадии с разбиением суммы платежа.

  • Пример оплаты в одну стадию общей суммой 10,01 EUR и с лимитом провайдера в 10,00 EUR:

    В следующем примере оповещение свидетельствует о том, что инициирована оплата в одну стадию от пользователя. Cумма первой операции, на которую отправлено оповещение и которая фактически была оплачена пользователем, равна 10,00 EUR.

    Рис.: Пример оповещения о проведении оплаты в одну стадию с разбиением суммы

    {
        "project_id": 968,
        "payment": {
          "id": "ORDER_ID_762",
          "type": "purchase",
          "status": "processing",
          "date": "2019-11-14T05:36:19+0000",
          "method": "card",
          "sum": {
            "amount": 1001,
            "currency": "EUR"        
          },
          "actual_amount": 1000,
          "description": "2 operations"
        },
        "account": {
          "number": "558342******7117",
          "type": "mastercard",
          "card_holder": "PAUL LEE",
          "expiry_month": "01",
          "expiry_year": "2025"
        },
        "customer": {
          "id": "D_K"
        },
        "operation": {
          "id": 302103697,
          "type": "sale",
          "status": "success",
          "date": "2019-11-14T05:36:20+0000",
          "created_date": "2019-11-14T05:36:13+0000",
          "request_id": "00000001",
          "sum_initial": {
            "amount": 1000,
            "currency": "EUR"
          },
          "code": "0",
          "message": "Success",
          "provider": {
            "id": 3,
            "payment_id": "81206",
            "auth_code": "",
            "endpoint_id": "3",
            "date": "2019-11-14T05:36:18+0000"
          }
        },
        "signature": "h8WLEFVwUVnuL5X0szc0sVqDexKoe3UwumxXxLdn0...=="
      }

    В следующем примере оповещение свидетельствует о том, что проведены обе операции оплаты в одну стадию от пользователя общей суммой 10,01 EUR, а сумма операции, на которую отправлено оповещение — 0,01 EUR. Сумма, доступная к возврату — 10,01 EUR.

    Рис.: Пример оповещения о проведённой оплате в одну стадию с разбиением суммы

    {
        "project_id": 968,
        "payment": {
          "id": "ORDER_ID_762",
          "type": "purchase",
          "status": "success",
          "date": "2019-11-14T05:36:19+0000",
          "method": "card",
          "sum": {
            "amount": 1001,
            "currency": "EUR"        
          },
          "actual_amount": 1001,
          "amount_remaining_refund": 1001,
          "description": "2 operations"
        },
        "account": {
          "number": "558342******7117",
          "type": "mastercard",
          "card_holder": "PAUL LEE",
          "expiry_month": "01",
          "expiry_year": "2025"
        },
        "customer": {
          "id": "D_K"
        },
        "operation": {
          "id": 302103697,
          "type": "sale",
          "status": "success",
          "date": "2019-11-14T05:36:20+0000",
          "created_date": "2019-11-14T05:36:13+0000",
          "request_id": "00000001",
          "sum_initial": {
            "amount": 1,
            "currency": "EUR"
          },
          "code": "0",
          "message": "Success",
          "provider": {
            "id": 3,
            "payment_id": "81206",
            "auth_code": "",
            "endpoint_id": "3",
            "date": "2019-11-14T05:36:18+0000"
          }
        },
        "signature": "h8WLEFVwUVnuL5X0szc0sVqDexKoe3UwumxXxLdn0...=="
      }
  • Пример оплаты в две стадии общей суммой 45,27 EUR и с лимитом провайдера в 25,00 EUR:

    В следующем примере оповещение свидетельствует о том, что проведена часть оплаты в две стадии от пользователя общей суммой 45,27 EUR, а сумма операции, на которую отправлено оповещение, составляет 25,00 EUR. Статус платежа processing означает, что по платежу остается сумма на подтверждение — 20,27 EUR.

    Рис.: Пример оповещения о проведении оплаты в две стадии с разбиением суммы

    {
        "project_id": 968,
        "payment": {
          "id": "ORDER_09519",
          "type": "purchase",
          "status": "processing",
          "date": "2019-11-14T05:32:27+0000",
          "method": "card",
          "sum": {
            "amount": 4527,
            "currency": "EUR"
            },   
          "actual_amount": 2500,
          "amount_authorized": 2027,
          "description": "2 operations"
        },
        "account": {
          "number": "558342******7117",
          "type": "mastercard",
          "card_holder": "PAUL LEE",
          "expiry_month": "01",
          "expiry_year": "2025"
        },
        "customer": {
          "id": "D_K"
        },
        "operation": {
          "id": 302103695,
          "type": "capture",
          "status": "success",
          "date": "2019-11-14T05:32:28+0000",
          "created_date": "2019-11-14T05:32:26+0000",
          "request_id": "00000001",
          "sum_initial": {
            "amount": 2500,
            "currency": "EUR"
          },
         "code": "0",
          "message": "success",
          "provider": {
            "id": 3,
            "payment_id": "",
            "auth_code": "",
            "endpoint_id": "3",
            "date": "2019-11-14T05:32:27+0000"
          }
        },
        "signature": "GvDHyki3OPkwbWzumbTYRBxNSgDFLF8Yg220hAud3r...=="
      }

    В следующем примере оповещение свидетельствует о том, что провайдером отклонена часть оплаты в две стадии общей суммой 45,27 EUR, сумма операции, на которую отправлено оповещение, составляет 20,27 EUR. Статус платежа awaiting capture означает, что по платежу есть сумма, уже подтвержденная и проведенная ранее — 25,00 EUR, и остается сумма на подтверждение или отмену — 20,27 EUR.

    Рис.: Пример оповещения об отказе в проведении оплаты в две стадии с разбиением суммы

    {
        "project_id": 968,
        "payment": {
          "id": "ORDER_ID_C00024_0.63157000_1573709519",
          "type": "purchase",
          "status": "awaiting capture",
          "date": "2019-11-14T05:32:27+0000",
          "method": "card",
          "sum": {
            "amount": 4527,
            "currency": "EUR"
            }, 
          "actual_amount": 2500,
          "amount_authorized": 2027,     
          "description": "2 operations"
        },
        "account": {
          "number": "558342******7117",
          "type": "mastercard",
          "card_holder": "PAUL LEE",
          "expiry_month": "01",
          "expiry_year": "2025"
        },
        "customer": {
          "id": "D_K"
        },
        "operation": {
          "id": 302103695,
          "type": "capture",
          "status": "decline",
          "date": "2019-11-14T05:32:28+0000",
          "created_date": "2019-11-14T05:32:26+0000",
          "request_id": "00000001",
          "sum_initial": {
            "amount": 2027,
            "currency": "EUR"
          },
          "code": "10000",
          "message": "General decline",
          "provider": {
            "id": 3,
            "payment_id": "",
            "auth_code": "",
            "endpoint_id": "3",
            "date": "2019-11-14T05:32:27+0000"
          }
        },
        "signature": "GvDHyki3OPkwbWzumbTYRBxNSgDFLF8Yg220hAud3r...=="
      }

    В следующем примере оповещение свидетельствует о том, что мерчантом произведена отмена части оплаты в две стадии от пользователя общей суммой 45,27 EUR, сумма операции, на которую отправлено оповещение, составляет 20,27 EUR. Статус платежа partially paid означает, что по платежу есть сумма, уже подтвержденная и проведенная ранее — 25,00 EUR и ее можно вернуть пользователю.

    Рис.: Пример оповещения об отмене проведения оплаты в две стадии с разбиением суммы

    {
        "project_id": 968,
        "payment": {
          "id": "ORDER_ID_C00024_0.63157000_1573709519",
          "type": "purchase",
          "status": "partially paid",
          "date": "2019-11-14T05:32:27+0000",
          "method": "card",
          "sum": {
            "amount": 4527,
            "currency": "EUR"
            }, 
          "actual_amount": 2500,
          "amount_authorized": 0, 
          "amount_remaining_refund": 2500,     
          "description": "2 operations"
        },
        "account": {
          "number": "558342******7117",
          "type": "mastercard",
          "card_holder": "PAUL LEE",
          "expiry_month": "01",
          "expiry_year": "2025"
        },
        "customer": {
          "id": "D_K"
        },
        "operation": {
          "id": 302103695,
          "type": "cancel",
          "status": "success",
          "date": "2019-11-14T05:32:28+0000",
          "created_date": "2019-11-14T05:32:26+0000",
          "request_id": "00000001",
          "sum_initial": {
            "amount": 2027,
            "currency": "EUR"
          },
          "code": "10000",
          "message": "General decline",
          "provider": {
            "id": 3,
            "payment_id": "",
            "auth_code": "",
            "endpoint_id": "3",
            "date": "2019-11-14T05:32:27+0000"
          }
        },
        "signature": "GvDHyki3OPkwbWzumbTYRBxNSgDFLF8Yg220hAud3r...=="
      }
  • Пример оплаты в две стадии общей суммой 45,00 EUR и с лимитом провайдера в 20,00 EUR и с установленным лимитом на количество создаваемых операций по одному платежу — 2.

    Оповещение свидетельствует о том, что сумма платежа превышает установленный лимит по количеству создаваемых операций с разбиением суммы.

    Рис.: Пример оповещения об отказе в проведении оплаты с разбиением суммы

    {
            "customer": {
                "id": "customer_123"
            },
            "account": {
                "number": "427638******3556",
                "type": "visa",
                "card_holder": "PAUL LEE",
                "expiry_month": "07",
                "expiry_year": "2021"
            },
            "project_id": 260,
            "payment": {
                "id": "TEST_14-04-2020_0001",
                "type": "purchase",
                "status": "decline",
                "date": "2020-04-14T11:19:42+0000",
                "method": "card",
                "sum": {
                    "amount": 4500,
                    "currency": "EUR"
                },
                "description": "TEST_1586862995539"
            },
            "operation": {
                "id": 46523000020281,
                "type": "auth",
                "status": "decline",
                "date": "2020-04-14T11:19:42+0000",
                "created_date": "2020-04-14T11:19:42+0000",
                "request_id": "046524",
                "sum_initial": {
                    "amount": 4500,
                    "currency": "EUR"
                },
                "code": "3019",
                "message": "Exceeded count split operation",
                "provider": {
                    "id": 414,
                    "payment_id": "",
                    "endpoint_id": 414
                }
            },
            "signature": "/dnQUd/uLStqBI4DU1j2+/X2Cua6cvH00...=="
        }

Формат оповещения о результате выплаты

Для оповещений о результатах выплат с разбиением суммы платежа используется стандартный формат, описание которого представлено в разделе Оповещения. Оповещение отправляется для каждой успешной операции.

В оповещении вместе с другой информацией о платеже содержится информация об итоговом статусе платежа, полной сумме и валюте, а также о фактической сумме этого платежа. Возможные итоговые статусы:

  • success — оплачена вся сумма платежа;
  • decline — не оплачена вся сумма платежа, при этом нет доступных попыток для каскадного проведения этого платежа;
  • partially paid out — сумма платежа выплачена частично, при этом нет доступных попыток для каскадного проведения этого платежа.

Информация о валюте платежа, а также его полной и фактической суммах передаётся в объекте payment:

  • sum — объект с информацией о полной сумме и валюте платежа:
    • amount — общая сумма платежа,
    • currency — код валюты платежа;
  • actual_amount — фактическая сумма платежа, то есть сумма, выплаченная пользователю.

Рис.: Пример оповещения об успешной выплате с разбиением суммы без конвертации

 {
  "project_id":51,
  "payment":{
    "id":"3_02022021",
    "type":"payout",
    "status":"success",
    "date":"2021-02-02T12:22:24+0000",
    "method":"card",
    "sum":{
      "amount":50,
      "currency":"EUR"
    },
    "actual_amount": 20,
    "description":""
  },
  "account":{
    "number":"424242******4243",
    "type":"visa",
    "card_holder":"JOHN DOE"
  },
  "customer":{
    "id":"0706"
  },
  "operation":{
    "id":99079010048031,
    "type":"payout",
    "status":"success",
    "date":"2021-02-02T12:22:24+0000",
    "created_date":"2021-02-02T12:22:22+0000",
    "request_id":"72dba48d05a-c80519e33ca93d-90",
    "sum_initial":{
      "amount":10,
      "currency":"EUR"
    },
    "sum_converted":{
      "amount":10,
      "currency":"EUR"
    },
    "code":"0",
    "message":"Success",
    "provider":{
      "id":414,
      "payment_id":"0020000025309274",
      "auth_code":"219705",
      "endpoint_id":414,
      "date":"2021-02-02T12:22:23+0000"
    }
  },
  "signature":"vVQBF25Pl+T4oYz0uYNKZXO/rSiEG4Ubeg=="
}

Рис.: Пример оповещения об успешной выплате с разбиением суммы и конвертацией

{
  "project_id":51,
  "payment":{
    "id":"6_02022021",
    "type":"payout",
    "status":"success",
    "date":"2021-02-02T12:28:13+0000",
    "method":"card",
    "sum":{
      "amount":40,
      "currency":"USD"
    },
    "description":""
  },
  "account":{
    "number":"424242******4243",
    "type":"visa",
    "card_holder":"JOHN DOE"
  },
  "customer":{
    "id":"0706"
  },
  "operation":{
    "id":78330010048421,
    "type":"payout",
    "status":"success",
    "date":"2021-02-02T12:28:13+0000",
    "created_date":"2021-02-02T12:28:12+0000",
    "request_id":"8cf90a71b731b87d-ff50ef811046-031",
    "sum_initial":{
      "amount":16,
      "currency":"USD"
    },
    "sum_converted":{
      "amount":13,
      "currency":"EUR"
    },
    "code":"0",
    "message":"Success",
    "provider":{
      "id":414,
      "payment_id":"0010000025513643",
      "auth_code":"264443",
      "endpoint_id":414,
      "date":"2021-02-02T12:28:12+0000"
    }
  },
  "signature":"xoTV08v6S/owHnAPV=="
}

Рис.: Пример оповещения об отказе в проведении выплаты

 {
  "project_id":251,
  "payment":{
    "id":"02022021",
    "type":"payout",
    "status":"decline",
    "date":"2021-02-02T12:20:28+0000",
    "method":"card",
    "sum":{
      "amount":100,
      "currency":"EUR"
    },
    "description":""
  },
  "account":{
    "number":"424242******4243",
    "type":"visa",
    "card_holder":"JOHN DOE"
  },
  "customer":{
    "id":"0706"
  },
  "operation":{
    "id":75384010047551,
    "type":"payout",
    "status":"decline",
    "date":"2021-02-02T12:20:28+0000",
    "created_date":"2021-02-02T12:20:28+0000",
    "request_id":"14f0c88a0848998-00075385",
    "sum_initial":{
      "amount":100,
      "currency":"EUR"
    },
    "sum_converted":{
      "amount":100,
      "currency":"EUR"
    },
    "code":"3019",
    "message":"Exceeded count split operation",
    "provider":{
      "id":414,
      "payment_id":"",
      "endpoint_id":414
    }
  },
  "signature":"vrX0JIVGNEnqUJazUknfA6EaDtNZGmp=="
}