Интерфейс взаимодействия
1. Общие положения ............................................................................................................................3
2. Передача параметров авторизационного запроса серверу платёжного шлюза ....................................5
3. Возврат результатов обработки. NOTIFY_URL ................................................................................... 8
4. Подпись данных ..............................................................................................................................12
Генерация ключей и сертификата (*.crt) .................................................................................................12
Генерация подписи ...............................................................................................................................13
Проверка подписи ............................................................................................................................... 14
Запрос на возврат/реверсал ................................................................................................................ 15
Примеры формирования запроса ......................................................................................................... 16
5. Pre/Authorization транзакции ............................................................................................................. 19
6. Ввод терминала в эксплуатацию ...................................................................................................... 20
7. Просмотр и возврат транзакций ........................................................................................................ 23
8. Коды возврата результатов транзакций ............................................................................................. 24
9. Запрос состояния транзакции ........................................................................................................... 25
10. Запрос возврата ............................................................................................................................. 27
11. Сервис Токенизации ........................................................................................................................ 29
12. Платежи в рассрочку ...................................................................................................................... 31
1. Общие положения.
Взаимодействие торговой системы с платежным шлюзом на этапе проверки платежеспособности карты осуществляется на завершающем этапе – ‘checkout’ процесса. Этот этап, как правило, характерен тем, что плательщик уже определился с набором приобретаемых товаров или услуг, их стоимостью, условиями доставки и т.д., и готов произвести оплату с использованием платежной карты. Задача торговой системы (электронного магазина) – в этот момент переадресовать покупателя на защищенную страницу платежного сервера (как показано на рисунке), передав при этом необходимые параметры сделки в строке переадресации.
1. Страница с подготовленными значениями для передачи запроса платежному шлюзу.
2. Страница SUCCESS_URL – для редиректа браузера пользователя в случае успешного проведения транзакции. В параметрах ответа передаются результаты обработки.
3. Страница FAILURE_URL – для редиректа браузера пользователя в случае неуспешного проведения транзакции. В параметрах ответа передаются результаты обработки.
4. Страница NOTIFY_URL – для передачи результатов транзакций напрямую торговой системе от защищённого платёжного шлюза
.
Применение страницы NOTIFY_URL позволяет напрямую передать результаты транзакции от платёжного шлюза торговой системе. Данный метод значительно повышает уровень безопасности обработки транзакций – торговая система напрямую доверяет соединению со стороны платёжного шлюза, так как адрес этого источника данных зафиксирован в её системе, в отличие от адреса браузера плательщика.
Информацию, которую передает сервер платёжного шлюза на страницы SUCCESS_URL и FAILURE_URL необходимо использовать только для отображения результатов оплаты плательщику. Анализировать или сохранять такие данные в локальное хранилище стоит только с массива данных полученных от страницы NOTIFY URL.
2. Передача параметров авторизационного запроса серверу платёжного шлюза.
Торговой системе необходимо передать ряд параметров при переходе на защищённую страницу платёжного шлюза:
Параметр | Назначение | Описание | Формат |
Version | Значение версии интерфейса SG | Версия протокола взаимодействия. Действующая версия в данный момент ‘1’. Этот параметр является справочным для обработчика входных данных шлюза. | N |
MerchantID | Идентификатор торговца | Назначается обслуживающим банком | an15 |
TerminalID | Идентификатор терминала | Назначается обслуживающим банком | an8 |
TotalAmount | Сумма заказа | Всегда указывается в мелких единицах валюты (копейки, центы) | N1..12 |
Currency | Валюта | Определяется договором с обслуживающим банком-эквайером | n3 |
AltTotalAmount (опционально) | Сумма заказа (альтернативная валюта) | Необязательный параметр. Указывается в мелких единицах валюты (копейки, центы) |
N1..12 |
AltCurrency (опционально) | Альтернативная Валюта | Используется торговой системой при необходимости отобразить сумму платежа в другой валюте(например €, $). | n3 |
PurchaseTime |
Время запроса в формате: yyMMddHHmmss |
|
n12..17 |
locale | Язык интерфейса (en, ru, uk ) | Язык интерфейса защищенной страницы шлюза | a2 |
OrderID | Номер заказа | Идентификатор заказа (до 20 байт) | Ans…20 |
SD (опционально) | Session Data -данные сессии клиента, которые передаёт торговая система | Вспомогательный параметр, может быть использован системой для управления пользовательскими сессиями | an...99 |
PurchaseDesc (опционально) | Краткое описание покупки, товара | Необязательный параметр, предусмотренный спецификацией 3-D Secure. Может быть отображен на странице платежного сервера. Рекомендуется использовать для удобства покупателя. | ans...1 25 |
Signature | Электронно-цифровая подпись данных, участвующих в генерации запроса | Длина параметра зависит от выбранной схемы вычисления | Зависит от схемы |
Delay | Идентификатор платежа Преавторизация | Используется для преавторизации, при значение равном 1=включено, при 0(пусто)=выключено | N1 |
Ref3 (O) | Передача доп параметра в n-файл, а потом в b-файл | При помощи данного параметра можно передавать поле, содержащее не карточную информацию. | ans..1 150 |
Прим. табл.1.1
Формат | Format description |
n- numeric decimal digit | value 0..9 |
an - alphabetic or numeric character | value 0..9 or A..Z or ..z |
ans - alphabetic | numeric or special character |
.
Параметры AltTotalAmount, AltCurrency определяются, если торговой системе нужно показать покупателю сумму платежа в альтернативной валюте, отличной от той, что указана в договоре, заключённом с обслуживающим банком-эквайером. При этом, на платёжный шлюз необходимо посылать 4 параметра:
.
TotalAmount, Currency - сумма и валюта по условиям договора
AltTotalAmount, AltCurrency - сумма и валюта, указанная для оплаты на сайте торговой системы.
Коды валют:
980 | Ukrainian Hryvnia |
978 | Euro |
840 | United States Dollar |
643 |
Russian Ruble |
Параметры, приведенные в табл.1, передаются методом HTTPS/POST на защищённую страницу платёжного шлюза в определенной HTML-форме для дальнейшего ввода реквизитов платежной карты покупателем (держателем платежной карты).
Пример:
<form action="https://ecg.test.upc.ua/go/enter" method="POST">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<input name="Version" type="hidden" value="1" />
<input name="MerchantID" type="hidden" value="1111111" />
<input name="TerminalID" type="hidden" value="E1111111" />
<input name="TotalAmount" type="hidden" value="1000" />
<input name="Currency" type="hidden" value="980" />
<input name="locale" type="hidden" value="ru" />
<INPUT TYPE="HIDDEN" NAME="PurchaseTime" VALUE="150611110821"/>
<input name="OrderID" type="hidden" value="121sdsdss2sd" />
<input name="PurchaseDesc" type="hidden" value="tran test" />
<input name="Signature" type="hidden" value=""/>
<input type="submit"/>
</form>
3. Возврат результатов обработки авторизационного запроса торговой системе.
.
Параметр | Назначение | Описание | Формат |
MerchantID | Идентификатор торговца | Совпадает с переданными данными в запросе авторизации | an15 |
TerminalID | Идентификатор терминала | Совпадает с переданными данными | an8 |
TotalAmount | Сумма заказа | Совпадает с переданными данными | n..12 |
AltTotalAmount (опционально) | Сумма заказа (альтернативная валюта) | Совпадает с переданными данными | n..12 |
Currency | Валюта | Совпадает с переданными данными | n3 |
AltCurrency (опционально) | Альтернативная Валюта | Совпадает с переданными данными | n3 |
PurchaseTime | Время запроса сделки (YYMMDDhhmmss) | Совпадает с переданными данными | N12 |
OrderID | Order ID | Совпадает с переданными данными | ans..20 |
XID | Идентификатор транзакции (номер заказа, до 20 символов) | Совпадает с переданными данными | ans28 |
SD (опционально) | Данные сессии клиента переданные торговой системой | Совпадает с переданными данными | an... 99 |
ApprovalCode | Код авторизации хоста | Код подтверждения операции, полученный от банка | An6 |
Rrn | Retrieval Reference Number | Уникальный номер транзакции в системе авторизации и расчетов обслуживающего банка | N12 |
ProxyPan | 4 последние цифры номера карты | Значение PAN ( 4 последние цифры ) с дополненными нулями впереди для индикации длины PAN. Пример: 499999******0011 | N13…19 |
Signature | Электронно-цифровая подпись данных, участвующих в генерации запроса | Длина параметра зависит от выбранной схемы вычисления | An…40 |
TranCode | Код завершения транзакции | Представлено в таб. 4 | N3 |
Delay | Идентификатор платежа Преавторизация | Используется для преавторизации, при значение равном 1=включено, при 0(пусто)=выключено | N1 |
PurchaseTime = '090929152500'
ProxyPan = '499999*******0011'
Currency = '980'
ApprovalCode = '111111'
MerchantID = '1752493'
OrderID = '111111111111111111'
Signature = test'
Rrn = '2222222222'
XID = '333333-4444444'
Email = 's.sichnoy@upc.ua'
SD = '24ee6084a5343e3d'
TranCode = '000'
TerminalID = 'E7880293'
TotalAmount = '500'
Параметр | Значение | Описание |
Response.action | approve / reverse | При значении approve – торговая система дает одобрение для успешности операции. При значении reverse - шлюз делает откат успешной транзакции и устанавливает признак завершения 503 – «Транзакция отменена магазином» |
Response.reason (опционально) | An.. 255 | Пояснение ответа магазина (опционально), например – причина для значения Response.action |
Response.forwardUrl | An.. 255 | Значение URL для редиректа браузера пользователя, вместо SUCCESS_URL или FAILURE_URL (предоставляет возможность использовать динамические ссылки) |
echo "MerchantID="1752493"\n";
echo "TerminalID="E7880293"\n";
echo "OrderID="ID0009992"\n";
echo "Currency="980"\n";
echo "TotalAmount="980"\n";
echo "XID="333333-4444444"\n";
echo "PurchaseTime="090929152500"\n";
echo "Response.action="\n";
echo "Response.reason="\n";
echo "Response.forwardUrl="\n";
.
.
4. Подпись данных.
Для начала работы необходимо скачать Win32 OpenSSL(оф.сайт https://www.openssl.org/source/)
1. необходимо прописать в переменную Path путь к каталогу bin
2. правой кнопкой "Мой компьютер", "Свойства", "Дополнительно", "Переменные среды"
3. В системных переменных: PATH "Изменить" поставить в конце строки точку с запятой и прописать путь к папке bin: c:\OpenSSL\bin
Генерация ключей и сертификата (*.crt)
Генерация и обмен ключами осуществляется после подачи заявки на регистрацию и получения атрибутов торговой системы (MerchantID, TerminalID). Перед генерацией ключей необходимо отредактировать файл config.dat в соответствии с данными подключаемой торговой системы:
#Страна
CN=UA
#Область
ST=Kievskaya
#Город
L=Kiev
#Название организации
O=UPC
#Название отделения
OU=IT DEP
#Имя для сертификата (Ваше имя)
CN=SERG
#Email организации
emailAddress=ec@upc.ua
run.bat 1770000
Запускаем команду, после чего генерируется три файла:
1770000.crt – сертификат
1770000.pem – приватный ключ
1770000.pub – публичный ключ
Генерация подписи
Подпись генерируется на основании двух файлов:
- (*.pem) – приватный ключ, сгенерированный на стороне торговой системы.
- datafile – предоставленный техническим отделом UPC.
datafile содержит определённые данные(поля), для которых непосредственно формируется подпись. Важно соблюдать последовательность полей, иначе запрос будет отклонен с ошибкой 405 (Signature is invalid). Поля записываются в datafile в представленном ниже порядке:
Если отсутствуют поля Delay или AltCurrency, AltAmount, то запятая перед этими полями опускается:
MerchantId;TerminalId;PurchaseTime;OrderId ;CurrencyId,AltCurrencyId;Amount, AltAmount;;
MerchantId;TerminalId;PurchaseTime;OrderId,Delay;CurrencyId ;Amount;;
MerchantId;TerminalId;PurchaseTime;OrderId;CurrencyId;Amount ;;
Если в запросе на шлюз присутствует поле Ref3, то оно должно участвовать в формировании подписи:
MerchantId;TerminalId;PurchaseTime;OrderId;CurrencyId;Amount;SessionData(SD);Ref3;
Для генерации подписи необходимо запустить create_signature.bat с параметром *.pem. Например, create_signature.bat 1770000.pem.
В результате будут обновлены или созданы два файла: signature.bin (подпись) и signature (подпись в кодировке base64). Данные в файле signature отправляются в запросе как подпись.
Проверка подписи от шлюза
Для проверки подписи данных со шлюза необходимо в файл from_gateway записать поля в следующем порядке:
MerchantId;TerminalId;PurchaseTime;OrderId,Delay;Xid;CurrencyId,AltCurrencyId;Amount,AltAmount;SessionData;TranCode;ApprovalCode;
Для проверки подписи со шлюза ее необходимо поместить в файл signature. Все требования с предыдущего пункта, касательно формирования from_gateway здесь так же обязательны. Очень важно, чтобы количество значащих символов в одной строке файла signature не превышало 64 (длина строки).
Для проверки подписи выполнить check_signature.bat
openssl base64 -d -in signature -out signature.bin
openssl dgst -sha1 -verify test-server.pub - signature signature.bin from_gateway
Запрос на возврат/реверсал
Если выполняется запрос на возврат/реверсал, то данные должны быть дополнены следующими полями: ApprovalCode, RRN.
Пример:
MerchantId;TerminalId;PurchaseTime;OrderId;CurrencyId;Amount;SessionData(SD);ApprovalCode;RRN;RefundAmount;Ref3;
Если отсутствует опциональное(необязательное) поле, например - RefundAmount или Ref3, то такое поле просто опускается:
MerchantId;TerminalId;PurchaseTime;OrderId;CurrencyId;Amount;SessionData(SD);ApprovalCode;RRN;Ref3;
MerchantId;TerminalId;PurchaseTime;OrderId;CurrencyId;Amount;SessionData(SD);ApprovalCode;RRN;RefundAmount;
MerchantId;TerminalId;PurchaseTime;OrderId;CurrencyId;Amount;SessionData(SD);ApprovalCode;RRN;
Примеры формирования запроса на шлюз
Пример на HTML :
function submit()
//document.submitForm.submit(); // Submits the form without the button
}
Проверка ответа шлюзом:
.
<head>
<title>Введите информацию платежной карточки</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expiration" content="0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="stylesheet" href="/go/style/def/style.css?v=2.7.7" type="text/css">
<style nonce="4ead891ad314226c5fb68cd64d79e11b025c4bf5" id="antiClickjack">body{display:none;}</style>
<script nonce="4ead891ad314226c5fb68cd64d79e11b025c4bf5">
if (self === top) {
var antiClickjack = document.getElementById("antiClickjack");
antiClickjack.parentNode.removeChild(antiClickjack);
} else {
top.location = self.location;
}
</script>
</head>
Пример на PHP :
Формирование запроса на шлюз с подготовленными данными:
<?php
$OrderID = 12;
$PurchaseTime = date("ymdHis") ;
#строка для подписи
$data = "1752429;E7880229;$PurchaseTime;$OrderID;980;1200;;";
$fp = fopen("1752429.pem", "r");
$priv_key = fread($fp, 8192);
fclose($fp);
$pkeyid = openssl_get_privatekey($priv_key);
openssl_sign( $data , $signature, $pkeyid);
openssl_free_key($pkeyid);
#Подпись данных в формате base64
$b64sign = base64_encode($signature);
?>
<form action="https://ecg.test.upc.ua/go/enter" method="post" > - URL тестового сервера
<input name="Version" type="hidden" value="1" />
<input name="MerchantID" type="hidden" value="1234567" /><!--Тестовый Merchant Id
<input name="TotalAmount" type="hidden" value="1200" />
<input name="Currency" type="hidden" value="980" />
<input name="locale" type="hidden" value="RU" />
<INPUT TYPE="HIDDEN" NAME="PurchaseTime" VALUE="<?php echo $PurchaseTime ?>">
<input name="OrderID" type="hidden" value="12" />
<input name="Signature" type="hidden" value="<?php echo "$b64sign" ?>"/>
-Подпись которую сервер проверит Вашим публичным ключом
<input type="submit" />
</form>
<a href="index112.php">SUBMIT</a>
</body>
</html>
<?php
// $data содержит значение полей для проверки подписи
$signature = $HTTP_POST_VARS["Signature"];
$signature = base64_decode($signature) ;
// извлечь сертификат
$fp = fopen("/opt/deploy/certs/server.crt", "r");
$cert = fread($fp, 8192); fclose($fp);
$pubkeyid = openssl_get_publickey($cert);
// проверка подписи
$ok = openssl_verify($data, $signature, $pubkeyid); if ($ok == 1) { echo "good"; } elseif ($ok == 0) { echo "bad"; } else {
echo "ugly, error checking signature";
}
// free the key from memory openssl_free_key($pubkeyid); ?>
Подпись запроса приватным ключом торговца
Файл datafile содержит данные для подписи, например:
6352045;ECI62791;031227105500;HV-923452;;980;12550;;
Команда cat datafile | openssl dgst -sha1 -sign 1751852.pem
либо openssl dgst -sha1 -sign 1751852.pem datafile
Для получения в BASE64 нужно віполнить дополнительные команды для обработки потока, например :
[root@ecgtest test]# cat datafile | openssl dgst -sha1 -sign 1751852.pem | uuencode -m AAA | tail 4 | head -3
U8jjhDRYamOxeIpGqvCH3IIItTFfSyegAfQcqdwLhzyKHevpsxMV3l1RTwYw
0V7X5HK7+lMaC08JE8AEogPkbNS/JiZu1yCL47jOgJUrfUjbu9Gbob/FiiB9
8M4RI3LHOUOoeFl1uxXkEsi9fAfdtUN+mXRDI8muKT+Xu2JP6wk=
[root@ecgtest test]#
Проверка ответа публичным ключом шлюза:
Для начала нужно извлечь из сертификата шлюза его публичный ключ, например :
[root@ecgtest test]# openssl x509 -in gateway.crt -noout –pubkey | tee gateway.pub
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDC73xJq+BISfysLKT0Pc872Agm
irgNYWUYSnQd3gihhtF3ZrBmESqpoxebTGZX0iVXS4Ulb0NAGAIge6XpoIp6GQ3X4rtFw
CZTwFOSPtXhKA3dZBECI4UuoTY/Wvr4FXSzgOMF0Izubd4uPbE2O3gOFXha pYoNKC8
V+hN+rFDfmQIDAQAB
-----END PUBLIC KEY-----
[root@ecgtest test]# openssl dgst -sha1 -verify gateway.pub -signature signature datafile Verified OK
5.Pre/Authorization транзакции
Торговая система имеет возможность использовать такой вид оплаты, как «Преавторизация». Данный вид оплаты может применяться для торговых систем, с такими видами деятельности, для которых сначала необходимо забронировать определённую сумму по транзакции на карте плательщика, а в расчеты данную транзакцию передать с другой, отличной от забронированной, суммой (например, в гостиничном бизнесе при предварительной оплате номера и т.д.). Для этого, в запросе на шлюз передается дополнительный параметр с именем Delay. Параметр должен иметь значение, равное «1». Соответственно, при наложении и проверке подписи шлюзом, он указывается рядом с полем OrderID, через запятую.
1. Торговая система шлет запрос с параметром Delay=1 и нужной суммой
2. Кардхолдер проходит обычную процедуру оплаты используя схему 3DSecure или ввод кода CVC2.
3. При успешной транзакции происходит блокировка средств по карте плательщика, транзакции присваивается тип операции «Преавторизация».
4. Далее, в расчеты эта транзакция не идет. Для совершения оплаты -перевода средств на счет торговой системы, в её интерфейсе необходимо выбрать: →Поиск: Тип операции=Преавторизация→Код транзакции=Успешно → указать окончательную сумму для оплаты
5. На данный момент эта операция имеет следующие ограничения –
- окончательная сумма платежа не может превышать 20% от суммы оригинальной транзакции
- после 30 дней транзакции «Преавторизация» автоматически удаляются.
- для завершения платежа использовать XML запрос "Поставторизация"
7. После успешно завершённой оплаты, транзакция «Преавторизация» превращается в тип «Пост-авторизация», что говорит о факте совершения окончательной оплаты и формируется новая транзакция для расчетов с типом «Покупка».
8. Дополнительно, на успешную транзакция «Покупка» может быть выполнена только одна операция «Возврат».
Возможные коды ошибок:
506 – срок оплаты транзакции «Преавторизация» истек(более 30 дней )
507 – оплата транзакции «Преавторизация» уже была произведена (повторная попытка)
508 – неправильная сумма для оплаты (неправильное значение или значение больше, чем на 20% от суммы оригинальной транзакции)
6. Ввод терминала в эксплуатацию
После завершения тестирования сотрудник EC UPC регистрирует торговую систему на рабочем шлюзе и отправляет зарегестрированные рабочие данные администратору данной торговой системы
1. Инсталляция сертификата work-server.cert
Для проверки сообщений от платёжного шлюза UPC необходимо разместить полученный во вложении файл work-server.cert в доступную директорию для скрипта рабочего кода (аналогично test-server.crt).
Сертификат *.p12 используется для защищенного входа в интерфейс торговой системы. Его необходимо импортировать в браузер для получения доступа, используя полученный в сообщении пароль. Пример по загрузке сертификата в браузер можно найти, используя поисковые системы.
Google Chrome: http://infrastructure.kiev.ua/training/68/
Mozilla Firefox: http://infrastructure.kiev.ua/training/70/
Ссылка для перехода в интерфейс торговой системы (работает только при установленном сертификате *.p12): https://secure.upc.ua/go/merchant
Перед началом работы, в интерфейсе личного кабинета торговой системы, используя логин и пароль полученный в письме с рабочими данными, нужно изменить пароль для входа в кабинет. Далее, необходимо указать адрес страницы NOTIFY_URL для передачи результатов транзакций, а также, - адрес страницы для переадресации картхолдера в случае успешной SUCCESS_URL или неуспешной FAILURE_URL транзакции.
Сделать это нужно в разделе «Терминалы»:
Перед генерацией ключей необходимо отредактировать файл config.dat в соответствии с данными подключаемой торговой системы:
#Страна
CN=UA
#Область
ST=Kievskaya
#Город
L=Kiev
#Название организации
O=UPC
#Название отделения
OU=IT DEP
#Имя для сертификата (Ваше имя)
CN=SERG
#Email организации
emailAddress=ec@upc.ua
run.bat 1770000
Запускаем команду, после чего генерируется три файла:
1770000.crt – сертификат
1770000.pem – приватный ключ
1770000.pub – публичный ключ
После генерации файлов, полученный сертификат (*.crt) администратор торговой системы обязательно должен отправить в технический отдел UPC (ec@upc.ua), для проверки платёжным шлюзом аутентичности сообщения, а ключи оставить на стороне торговой системы и использовать для генерации подписи.
После успешного выполнения выше указанных инструкций, можно провести тестовую транзакцию на небольшую сумму с использованием реальной карты(сумма всегда указывается в копейках 1 гривна=100). Для этого необходимо изменить настройки системы оплаты сайта торговой системы:
- Заменить ранее полученный тестовый MerchantID на рабочий;
- Заменить ранее полученный тестовый TerminalID на рабочий;
- Изменить адрес шлюза с тестового на рабочий: https://secure.upc.ua/go/pay
.
.
7. Просмотр и возврат транзакций в интерфейсе торговца.
.
1. 123456* - поиск по первым 6 цифрам карты клиента;
2. 123456*7890 – поиск по первым 6 и последним 4 цифрам карты клиента;
3. *7890 – поиск по последним 4 цифрам карты плательщика.
8. Коды возврата результатов транзакции
Коды возврата результата транзакции делятся на несколько классов и подклассов и служат для информирования торговой системы о результате ее проведения. Для индикации успешного завершения транзакции достаточно одного кода. Большая же часть кодов служит для предоставления торговой системе обобщенной информации о причине неудачного завершения транзакции. Ниже представлены коды ответов на основе авторизационного хоста банка(таб.4) и коды ответов, генерируемых платёжным сервером без обращения к хосту банка(табл.5):
Коды ответа | Примерная интерпретация ответа | Коды ответов в сообщении от обслуживающего банка |
000 | Сделка авторизована | 00x |
105 | Транзакция не разрешена банком-эмитентом | 100,103,104,105…107 |
116 | Недостаточно средств | 116 |
111 | Несуществующая карта | 111,125,200,202 |
108 | Карта утеряна или украдена | 208,209 |
101 | Неверный срок действия карты | 101,201 |
130 | Превышен допустимый лимит расходов | 121,123 |
290 | Банк-издатель недоступен | 905…908,910 |
291 | Техническая или коммуникационная проблема | 9xx (кроме указанных выше) |
табл.3
Внутренние коды ошибок платежного сервера | Примерная интерпретация ответа |
401 | Ошибки формата |
402 | Ошибки в параметрах Acquirer/Merchant |
403 | Ошибки при соединении с ресурсом платежной системы (DS) |
404 | Ошибка аутентификации покупателя |
405 | Ошибка подписи |
406 | Превышена квота разрешенных транзакций |
407 | Торговец отключен от шлюза |
408 | Транзакция не найдена |
409 | Несколько транзакций найдено |
410 | Заказ уже был успешно оплачен В случае повтора |
411 | Некорректное время в запросе |
412 | Параметры заказа уже были получены ранее В случае повтора |
420 | Превышен лимит дневной лимит транзакций |
421 | Превышена максимально разрешенная сумма транзакции |
430 | Транзакция запрещена на уровне платежного шлюза |
431 | Не разрешена транзакция без полной аутентификации по схеме 3DSecure (карта не зарегистрирована для 3DSecure операций) |
454 | Шлюзом запрещено использование Ref3 |
455 | Шлюзом запрещен запрос на возврат средств |
501 | Транзакция отменена пользователем |
502 | Сессия браузера устарела |
503 | Транзакция отменена магазином |
504 | Транзакция отменена шлюзом |
601 | Транзакция не завершена |
9. Запрос состояния транзакции со стороны торговца
Для получения статуса оплаты торговой системе необходимо использовать схему с применением NOTIFY_URL. В данном случае платёжный шлюз доставляет результат обработки транзакции напрямую торговой системе, не надеясь на передачу параметров через браузер пользователя. Дополнительно, торговая система со своей стороны может послать запрос о состоянии транзакции на шлюз. Это может быть сделано передачей запроса POST на страницу шлюза со следующими параметрами:
TerminalID=
OrderID=
Currency=
TotalAmount=
PurchaseTime=
Шлюз возвращает текстовую страницу с дополнительными параметрами
XID=
TranCode=
ApprovalCode=
Транзакция считается успешной, если значение поля TranCode = «000».
Пример:
<html>
<body>
<form method='POST' action="https://ecg.test.upc.ua/go/service/01">
<input type='hidden' name='MerchantID' value='6352045'>
<input type='hidden' name='TerminalID' value='ECI62791'>
<input type='hidden' name='OrderID' value='VHS-23684'>
<input type='hidden' name='Currency' value='980'>
<input type='hidden' name='TotalAmount' value='12550'>
<input type='hidden' name='PurchaseTime' value='031227105500'>
<input type='submit' value='go'>
</form>
</body>
<html>
10. Запрос возврата/отката транзакции со стороны торговой системы
(Функцию возврата можно активировать отправив соответствующий запрос на ec@upc.ua)
Запрос возврата/реверсала возможно осуществить только на операцию авторизации. Для выполнения возврата торговая система со своей стороны должна отправить запрос на защищённую страницу шлюза. Это может быть сделано передачей POST запроса, который содержит параметры, приведенные в таблице ниже(табл.6):
Параметр | Назначение | Описание | Формат |
MerchantID | Идентификатор торговца | Назначается обслуживающим банком | an15 |
TerminalID | Идентификатор терминала | Назначается обслуживающим банком | an8 |
TotalAmount | Сумма заказа | Всегда указывается в мелких единицах валюты (копейки, центы) | N1..12 |
Currency | Валюта | Определяется договором с обслуживающим банком-эквайером | n3 |
PurchaseTime |
Время запроса в формате: yyMMddHHmmss |
|
n12..17 |
OrderID | Номер заказа | Идентификатор заказа (до 20 байт) | Ans…20 |
Rrn | Retrieval Reference Number | Уникальный номер транзакции в системе авторизации и расчетов обслуживающего банка | N12 |
SD (опционально) | Session Data -данные сессии клиента, которые передаёт торговая система | Вспомогательный параметр, может быть использован системой для управления пользовательскими сессиями | an...99 |
Signature | Электронно-цифровая подпись данных, участвующих в генерации запроса | Длина параметра зависит от выбранной схемы вычисления | Зависит от схемы |
ApprovalCode | Код авторизации хоста | Код подтверждения операции, полученный от банка | An6 |
Ref3 (Oпционально) | Передача доп параметра в n-файл, а потом в b-файл | При помощи данного параметра можно передавать поле, содержащее не карточную информацию. | ans..1 150 |
Параметр | Назначение | Описание | Формат |
MerchantID | Идентификатор торговца | Назначается обслуживающим банком | an15 |
TerminalID | Идентификатор терминала | Назначается обслуживающим банком | an8 |
TotalAmount | Сумма заказа | Всегда указывается в мелких единицах валюты (копейки, центы) | N1..12 |
TranCode | Код завершения транзакции | Представлено в таб. 4 | N3 |
CardType | VISA – Visa MAST – MasterCard MAES – Maestro |
Принадлежность карты к платёжной системе | an4 |
ERROR (опционально) | содержит краткую информацию об ошибке | опционально и формируется только при возникновении ошибки в процессе обработки запроса | ans |
<html>
<body>
<form method='POST' action="https://ecg.test.upc.ua/go/repayment">
<input type='hidden' name='MerchantID' value='1752493' />
<input type='hidden' name='TerminalID' value=' E7880293' />
<input type='hidden' name='OrderID' value='PAY160601124534' />
<input type='hidden' name='Currency' value='980' />
<input type='hidden' name='TotalAmount' value='12550' />
<input type='hidden' name='PurchaseTime' value='160601124534' />
<input type='hidden' name='ApprovalCode' value='123456' />
<input type='hidden' name='RRN' value='2222222222' />
<input type='hidden' name='RefundAmount' value='12000' />
<input type='hidden' name='Signature' value='45F345Fafde4455445Gvb550' />
<input type='submit' value='go'>
</form>
</body>
<html>
11. Сервис Токенизации
Сервис предназначен для предоставления торговым системам услуги по созданию цифрового аналога платежной карты (токен) на стороне Процессингового Центра, что позволяеи Non-PCIDSS мерчантам хранить цифровой аналог платежной карты (токен) и инициировать транзакции с использованием токена. Для активации Сервиса Токенизации администратору торговой системы необходимо отправить запрос на электронную почту ec@upc.ua с указанием Merchant_id, предварительно уведомив о данном запросе обслуживающий банк-эквайер, который должен присылает лимит с пороговыми суммами(относительно валют, используемых банком), свыше которых, запрос должен будет содержать CVC (карты, по которой был сформирован токен). Также, банк-эквайер имеет возможность устанавливать индивидуальные лимиты с пороговыми сумами для торговых систем. После активации сервиса, шлюз будет формировать ответ на транзакцию с параметрами представлены ниже:
Первоначальный платеж
Последующие транзакции
Банк-эквайрер отправляет лимит с пороговыми суммами (в отношении валют, используемых банком), в случае превышения лимита запрос должен содержать CVC (карты, для которой был создан токен). Банк-эквайрер может устанавливать индивидуальные лимиты с пороговыми суммами для продавцов.
Когда опция активирована, шлюз создает ответ на транзакцию с параметрами, указанными в Табл. 7.
Табл.7
Параметр | Назначение | Описание | Формат |
MerchantID | Идентификатор торговца | Назначается банком | an15 |
TerminalID | Идентификатор терминала | Назначается банком | an8 |
TotalAmount | Сумма заказа | Указывается в мелких единицах валюты | N1..12 |
Currency | Валюта | Определяется договором с обслуживающим банком-эквайером | n3 |
AltTotalAmount (опционально) | Сумма заказа (альтернативная валюта) | Необязательный параметр. Указывается в мелких единицах валюты (копейки, центы) |
N1..12 |
AltCurrency (опционально) | Альтернативная Валюта | Используется торговой системой при необходимости отобразить сумму платежа в другой валюте(например €, $). | n3 |
PurchaseTime | Время запроса | yyMMddHHmmss | n12..17 |
OrderID | Номер заказа | Идентификатор заказа (до 20 байт) | Ans…20 |
XID | Идентификатор транзакции | Совпадает с переданными данными | ans28 |
SD (опционально) | Данные сессии клиента | Совпадает с переданными данными | an... 99 |
ApprovalCode | Код авторизации хоста | Код подтверждения операции, полученный от банка | An6 |
Rrn | Retrieval Reference Number | Уникальный номер транзакции в системе авторизации и расчетов обслуживающего банка | N12 |
ProxyPan | 4 последние цифры номера карты | Значение PAN ( 4 последние цифры ) с дополненными нулями впереди для индикации длины PAN. Пример: 499999******0011 | N13…19 |
Signature | Электронно-цифровая подпись данных | Длина параметра зависит от выбранной схемы вычисления | An…40 |
TranCode | Код завершения транзакции | Представлено в табл. 4 | N3 |
Delay | Идентификатор платежа Преавторизация | Используется для преавторизации, при значение равном 1=включено, при 0(пусто)=выключено | N1 |
UPCToken | Карта/срок действия карты/Merchant_id | Цифровой идентификатор платежной карты | An…32 |
UPCTokenExp | Срок действия токена | формат (MMYYYY) | An…32 |
.
Notify request message:
PurchaseTime = '090929152500'
ProxyPan = '499999*******0011'
Currency = '980'
ApprovalCode = '111111'
MerchantID = '1752493'
OrderID = '111111111111111111'
Signature = test'
Rrn = '2222222222'
XID = '333333-4444444'
Email = j.timoshenko@upc.ua'
SD = '24ee6084a5343e3d'
UPCToken = '254484kC162EEC13E5B012736288683AC'
TranCode = '000'
TerminalID = 'E7880293'
TotalAmount = '500'
Далее торговец может использовать полученный токен для проведения транзакции. Запрос для проведения транзакции должен быть в формате JSON Web Signature(Стандарт JWS (rfc7515. See https://tools.ietf.org/html/rfc7515#page-10 )). Все данные необходимо передавать в BASE64URL кодировке.
12. Платежи в рассрочку (Installment Payments)
Функционал позволяет клиентам - держателям платежных карточек осуществлять оплату покупок на условиях рассрочки платежа, выбирая условия с тех вариантов, которые для данного клиента предоставлены банком-эмитентом. Для активации Сервиса Installment Payments торговцу необходимо отправить запрос на ec@upc.ua с указанием Merchant_id, а также уведомить банк-эквайер, который должен установисть пороговую сумму (в валюте транзакций), при превышении которой в авторизационном запросе будет уходить флаг проверки installment для банка-эмитента.
После подтверждения активации опции Installment Payments со стороны UPC, администратор торговой системы устанавливает параметр «да» через Merchant interface в поле «отправка условий рассрочки с помощью Notify»
В этом случае результаты обработки транзакции и план рассрочки передаются методом HTTP/HTTPS POST со стороны шлюза на страницу торговой системы:
"receipt":"666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
66666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666
6666666666666666666666666666666666666666666666666666666666666666"}'
.
TranCode = '602'
MerchantID = '1754971'
TotalAmount = '15000'
OrderID = '844477'
ApprovalCode = '423488'
ProxyPan = '555949******0023'
Delay = '0'
Rrn = '825415352694'
PurchaseTime = '180907113626'
SD = ''
XID = '18091115-278639'
Currency = '980'
Signature = 'null'
TerminalID = 'E7882971'
После чего, торговая система возвращает ответ в теле выполняемой страницы (вывод ответа на страницу NOTIFY_URL, как текст). Параметр=Значение возвращаются в новой строке и должны быть разделены символом разделителя строк(\n). В данном ответе шлюзу, торговая система должна вернуть 3 дополнительных параметра (помимо стандартных: MerchantID, TerminalID, OrderID, Currency, TotalAmount, XID, PurchaseTime):
Параметр | Значение | Описание |
Response.action | approve / reverse | При значении approve – торговая система дает одобрение для успешности операции. При значении reverse - шлюз делает откат успешной транзакции и устанавливает признак завершения 503 – «Транзакция отменена магазином» |
Response.reason (опционально) | An.. 255 | Пояснение ответа магазина (опционально), например – причина для значения Response.action |
Response.forwardUrl | An.. 255 | Значение URL для редиректа браузера пользователя, вместо SUCCESS_URL или FAILURE_URL (предоставляет возможность использовать динамические ссылки) |
Пример:
echo "MerchantID="1752493"\n"; echo "TerminalID="E7880293"\n"; echo "OrderID="ID0009992"\n"; echo "Currency="980"\n";
echo "TotalAmount="980"\n";
echo "XID="333333-4444444"\n";
echo "PurchaseTime="090929152500"\n";
echo "Response.action="\n";
echo "Response.reason="\n";
echo "Response.forwardUrl="\n";
.