После вызова метода оплаты сделки платежи за товар и за доставку инициируют оплату и зачастую могут ожидать подтверждения плательщиком.

Для того чтобы узнать что платеж требует подтверждения вызываем метод получение данных по сделки и в ответе смотрим на объекты платежей data.productPayment и data.handlerPayment. Статус самого платежа status остается в "NEW", но статус waitingFor должен быть в статусе "CONFIRMATION", это означает что этот платеж нужно подтверждать. В поле details.confirmation, будет храниться объект, который нужен для подтверждения платежа.

Пример:

...
"productPayment": {
    "id": 994,
    "amount": 10000,
    "commissionAmount": 600,
    "status": "NEW",
    "statusCode": "NEEDS_CONFIRMATION",
    "statusText": null,
    "type": "P2P",
    "waitingFor": "CONFIRMATION",
    "details": {
        "confirmation": {
            "type": "LOOKUP",
            "attemptsLeft": 3,
            "redirectUrl": "https://api.escrowbox.stage.uapay.ua/api/payments/994/confirmations"
        }
    },
    "payReceipt": "https://api.stage.uapay.ua/api/receipts/f8c2f0dd-454e-4264-8051-80a51fd4d167.pdf",
    "reverseReceipt": null,
    "finishReceipt": null
},
...

Существуют несколько видов подтверждения платежа, чтобы понять какой вид у данного платежа смотрим на details.confirmation.type.

Подтверждения LOOKUP

Поле details.confirmation.type = "LOOKUP".

Пример объекта details.confirmation:

{
    "type": "LOOKUP",
    "attemptsLeft": 3,
    "redirectUrl": "https://api.escrowbox.demo.uapay.ua/api/payments/994/confirmations"
}

Процедура подтверждения платежа заключаеться в том, что плательщику приходит смс с кодом подтверждения от банка-эмитента, который нужно передать в метод подтверждения платежа системы Escrow Box. Процесс передачи этого кода от плательщика до системы Escrow Box лежит на реализации клиента-интегратора. Как пример, это просто обычная форма с одним полем и кнопкой "Отправить" на клиентской части сервиса клиента-интегратора, которая вызовет метод сервиса клиента-интегратора, а он в свою очередь вызовет метод подтверждения платежа системы Escrow Box c параметром code, в этом случае details.confirmation.redirectUrl являеться URL-ом на который нужно отпрвить подтверждение. 

Подтверждения 3DS

Поле details.confirmation.type = "3DS".

Пример объекта details.confirmation:

{
  "type": "3DS",
  "url": "https://3ds.ukrsotsbank.com:443/way4acs/pa?id=W6yNkAC_RQUjjjRwIyPCsg",
  "form": {
    "PaReq": "eJxVUttuo0AMfc5foH4Ac0kgQzQZiZaHjVRatqXqY4WIldDdTMgMZJt+/dpAVtmRRtg+Z2yObV3uHUD2CnXvwOgcvK92EDTb9V2RvsDpQ0RzxecRV2qRqDsz00PYzGb6DM43R2tEyEOp2dVFpK2siaKlEnwpZMzjSM6VZhRFMAdX7yvboT3TVX263zyZSMZJLDSbXEIO4DaZ4eOR4wcZY5gItjqAKcF3wTVjUFb+sbG/As0GkFj1sbeduxjFF5pdHQJ699vsu65dMSbkEiXwUKzmeFhebNgL+PZoPRTuWGNLGrsLP32rGb3Cx+xGhC56sv1Y76vZmrx8+37O0u+nMl08Zz8jtP/k411rRgxibqsOjORC8UQuA8FXkVpxbNMQH3pzoN81cUi6J4fiLdVLJ5Cw28CguXcObH0xieIo+uoRBF8oC5CHA/tnk6AbEfrhxzSbusNepxV/3xT95fHs2sX58N7vT01ns+0bl680sYE05W6wuSIhFZNDqSkdFhjWhjo3bBha/23eX56EwQw="
  },
  "redirectUrl": "https://api.escrowbox.demo.uapay.ua/api/payments/564/confirmations"
}

Процедура подтверждения платежа заключаеться в том, что плательщику приходит смс с кодом подтверждения от банка-эмитента, который нужно ввести на странице подтверждения(ACS) банка-эмитента. Процес вызова этой страницы лежит на реализации клиента-интегратора. На клиентской части сервиса клиента-интегратора нужно реализовать форму с методом отправки POST запроса при submit на action details.confirmation.url c двома полями: "TermUrl"(в значение указать URL системы-интегратора на который прийдет postback от банка с данными для подтверждения платежа) и "PaReq"(в значение указать значение из details.confirmation.form.PaReq). После вызова данной формы, плательщика редиректит на страницу подтверждения платежа банка-эмитента, там он подтверждает платеж и после успешного подтверждения банк отправляет postback на URL, который был указан в форме. Есть ситуации, когда банк не показывает страницу подтверждения платежа, а сразу отправляет postback, смотрите ниже информацию по quasi-3DS. В ответ прийдет объект с параметром "PaRes" и от некоторых банков может быть параметр "MD", эти параметры нужно отправить в метод подтверждения платежа системы Escrow Box на URL details.confirmation.redirectUrl.

Пример формы:


<html>

<body>
    <form action="https://acs.privatbank.ua/pPaReqMC.jsp" method="POST">
        <input name="TermUrl" value="https://api.escrowbox.stage.uapay.ua/api/payments/1072/confirmations"></input><br>
        <input name="PaReq" value="eJxVUsFuwjAMPfMXFR/QJC2lDQqR2DgMaR1o685TVSzoNkJJ2g34+tkpIBa1qu337NTPVsXWAszfoOosaJWDc+UGgno9Ha5mr3D4EEksucxiEWcjOdQD5cN6MFA/YF29N1qEPIwUu7qINKXRiRhnaZLGPEtTLtNEMYoimIOttqVp0R6osjo8LF50Eo3lWCh2cQnZgV3MNe9P1H+Q0YeJYMod6AJcG1wrBkXpnmvzFSjmQWJV+8609qQzPlLs6hDQ2W+9bdtmwpiIUmyBh2IS42H5asFewTV742Bl9xVKUptN+OkaxSgLk9ldE2rVke36+471WufF+3lZzJLlPD/m5w1H+zef+3eqGDGIuS5b0BEXmeBcBiKb4BPHivm412ZHv6sFH4ecoza9S0hDN85uMKH3Id93Zy2Y6qRlhujNIwiO2BogD4d2s6mpu0bU49NlPlWLesc84VKmEmdKQ/KxS6ka9cTxjHyt2ourGGVjPb8pJJZfKrT+LdsfSpO6aw=="></input><br>
        <button>Submit</button>
    </form>
</body>

</html>

Завершающий этап подтверждения

Подтвержденным платеж будет считаться, когда его статус смениться с "NEW" на "PAID", а не когда вызоветься метод подтверждения платежа. В связи с этим, после вызова метода подтверждения платежа при любом подтверждении, нужно трекать состояния сделки и смотреть на состояние платежей. 

Есть еще одна разновидность подтверждения платежа - quasi-3DS, он не вынесен как отдельный тип подтверждения, так как включает в себя оба подтверждения. Сначала нужно будет подтвердить 3DS(страница банка-эмитента тут не показывается, сразу идет редирект, без подтверждения плательщика), а потом платеж становиться с подтверждением LOOKUP.