Выполнение платежа Регистрация результата платежа RegisterPayment
Thursday, October 26, 2023 11:38 PMРегистрация результата платежа RegisterPayment
После звершения платежа сервер банка обращается GET-запросом по RegisterPayment URL магазина для передачи статуса и параметров платежа.
Параметры GET-запроса RegisterPayment
| Параметр | Тип | Описание |
|---|---|---|
| merch_id | String | Идентификатор магазина. Длина 32 символа. |
| trx_id | String | Идентификатор транзакции. Длина 32 символа. |
| merchant_trx | String | Идентификатор транзакции в магазине, полученный в ответе на этапе CheckPaymentAvail |
| result_code | Number | Код результата платежа. 1 — успешный платеж, 2 — неудачный платеж. |
| amount | Number | Сумма платежа. |
| account_id | String | Идентификатор счета магазина, на который был осуществлен перевод денег. |
| p.rrn | String | Идентификатор платежа в процессинговом центре банка-эквайера. |
| p.transmissionDateTime | String | Дата и время авторизации успешного платежа в формате mdYHis. Параметр присутствует если result_code = 1. |
| p.maskedPan | String | Маскированный номер карты. |
| p.cardholder | String | Имя держателя карты. |
| p.authcode | String | Код авторизации, который отражается у банка-эмитента, банка-эквайера и платежной системы. |
| p.isFullyAuthenticated | String | Признак наличия проверки 3-D Secure при выполнении транзакции. |
| ts | String | Дата и время выполнения запроса в формате Ymd H:i:s. |
| signature | String | ЭЦП банка-эквайера под запросом в формате PEM (кодированный Base64). Подписывается весь сформированный URL начиная c https:// (включительно) вплоть до &signature= (не включая &signature=). Параметр используется в целях безопасности и служит для проверки достоверности ответа сервера банка. |
| o.* | String | Дополнительные параметры заказа. Набор параметров и их названия определяются магазином на этапе инициирования платежа. |
Пример GET-запроса RegisterPayment
https://www.merchant.ua/register-payment.php?trx_id=46622B749D0946EB37791DA383E315A9&merch_id=06A4A0FDA274668349DDC006D3CA0739&merchant_trx=624292&result_code=1&amount=27282&account_id=12E890A5564AA0665F4976F0A6AB1F0E&o.user_id=285167&o.amount=272.82&o.order_id=5907133&o.t_id=624292&p.maskedPan=487424xxxxxx9133&p.authcode=961195&p.cardholder=Mr.+Cardholder&p.rrn=009666668732&p.isFullyAuthenticated=N&ts=20160617+18%3A31%3A36&signature=B%2BfykbO9j5iOD3Wnqdg0ilD7aKWcwil421zXr00qI2jz6zLq7GHBx7Nz3rcLHZXVQxTaHuHuW%2B16%0AYk4kY0geDYkwB57stsBOMR2a84TWxy%2BQKJ9EjYF%2FUbqGPrInNtPkN7s5LkWJ81t9TiAvEGAa%2F9km%0ACX3Igxmspt1b5kR4f2fwsanMpBmWyDW621vcd0cIP25lQIMokk1Awn5oVeIjRhDL7%2BREtyZSIfmr%0ADa1fPN4fy9vgVqcmwPvP2iN7DaRhGLzpLgtFJmc54wZGKDXP2Nv2vFvBa8ck3AxH1Mtp8L3UCwgX%0Ah5M6ms9j6VKguwb8rff7d2dzqUpzZngk%2BWvgiw%3D%3D
Параметры ответа магазина на RegisterPayment
По RegisterPayment URL магазин отвечает банку в формате XML о получении результата платежа. Магазин может ответить двумя способами:
- подтвердить получение результата платежа;
- сообщить о возникновении проблемы при регистрации результата по техническим причинам. В этом случае сервер банка предпримет новые попытки зарегистрировать результат платежа позже (в соответствии с настройками).
| Параметр | Обязательность | Тип | Описание |
|---|---|---|---|
| result.code | √ | Number | Результат регистрации платежа. 1 — успешный, 2 — неуспешный. |
| result.desc | √ | String | Описание результата. Максимальная длина 125 символов. |
Пример ответа магазина на RegisterPayment при result.code = 1
<?xml version="1.0"?>
<register-payment-response>
<result>
<code>1</code>
<desc>OK</desc>
</result>
</register-payment-response>
Пример ответа магазина на RegisterPayment при result.code = 2
<?xml version="1.0"?>
<result>
<code>2</code>
<desc>Temporary unavailable.</desc>
</result>
</register-payment-response>
Пример проверки ЭЦП банка-эквайера
<?php
$SERVER_PROTOCOL = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') ? "https://" : "http://";
$request = explode('&signature=', $SERVER_PROTOCOL . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
$data = $request[0];
$signature = base64_decode(urldecode($request[1]));
$fp = fopen($_SERVER['DOCUMENT_ROOT'].'/path/to/*.crt', "r");
$cert = fread($fp, 8192);
fclose($fp);
$public_key = openssl_pkey_get_public($cert);
$signature_check = openssl_verify($data, $signature, $public_key, OPENSSL_ALGO_SHA1);
openssl_free_key($public_key);
?>