Использование ApplePay, SamsungPay, GooglePay в приложении
Для работы с платежами в мобильных приложениях (или на сайте, но без перехода на страницу ввода реквизитов карты Банка) можно использовать расширенные параметры HTML-формы.
Перед отправкой POST-запроса необходимо сформировать платёжный токен в приложении или на сайте по инструкции соответствующей системы. Например, в случае ApplePay токен имеет вид:
1 |
{"paymentData":{"version":"EC_v1","data":"pNPWEDC/dZFILricVrdSrC7m0Jlm9gK8NL+IyLCWcycS0FHrdko7aqzv0=","signature":"MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQM=","header":{"ephemeralPublicKey":"MFkwEwYHKoZIzj0CAh06pYBPndn+drVGhAmfa/QCHBXE30ZReOGhSB2LV9ptGGjINM8PI5dU0IgXhVvcw==","publicKeyHash":"ghBdBZGQnem4v1MmmItug=","transactionId":"6022a5119e34aece05aae621e25f2b8390ba8e278786adeade21e874f66a8b31"}},"paymentMethod":{"displayName":"MasterCard 1281","network":"MasterCard","type":"debit"},"transactionIdentifier":"7133B4228F65BFDF25BBF733F36G399410CE9F389897BEFB0F32F985F66A8B32"} |
Этот токен, а также признак, указывающий на конкретную платёжную систему, нужно отправить в дополнительных параметрах запроса к методу /create/:
Параметр | Назначение | Обязательный | |
1 | paytokentype | Система, одна из строк apple , google или samsung | Да |
2 | paytoken | Платёжный токен, JSON-строка | Да |
3 | json_errors | Вернуть ответ в виде JSON или сделать перенаправление на страницу результата или человеко-читаемое сообщение об ошибке? Строка yes или no , по умолчанию — no | Нет |
Если json_errors = yes , то в результате запроса будет возвращён ответ в виде JSON.
В поле result будет "fail" , если во время исполнения запроса произошла какая-либо ошибка, либо "success" , и тогда в поле payment будет информация о попытке оплаты (возможно, неуспешной) в формате ответа на JSON API-запрос 2.1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
{ "result":"success", "payment": { "id":"2000123", "pay_amount":"7072.98", "refund_amount":"0.00", "clientid":"testuser@example.com", "payment_system_id":"52", "site_description":"ВТБ", "system_description":"VTB", "unique_id":"2403842", "status":"success", "repeat_counter":"0", "pending_datetime":"2019-02-15 10:20:47", "obtain_datetime":"2019-02-15 10:21:03", "success_datetime":"2019-02-15 10:21:07" } } |
В случае ошибки будет возвращено:
1 2 3 4 5 |
{ "result":"fail", "message":"processing gateway returned error status", "error_code":71 } |
POST-уведомление об успешном платеже пройдёт в обычном порядке, рекомендуется использовать именно его как настоящее подтверждение платежа.
Если параметр json_errors не был передан или передан как no , вместо JSON-строки сервером будет отправлен HTTP-статус HTTP/1.1 302 Found с заголовком Location: , указывающим на человеко-читаемую страницу результата платежа или сообщения об ошибке
Включение этого метода работы нужно запрашивать отдельно, кроме того, он может быть недоступен в банке-эквайере, либо в конкретном случае.
Если требуется реализовать одновременно все три возможных сценария работы с токенизированными оплатами: кнопка оплаты на странице ввода реквизитов, веб-покупка (кнопка на сайте) и in-app покупка (оплата в приложении без перехода из приложения), нужно будет работать с тремя личными кабинетами.