Приватний
MPI
Перевірка картки платника на участь в 3D-Secure

Схема работы API MPI
Формування запиту до API при самостійній інтеграції:
Приклад використання SDK:
#!/bin/bash
PUBLIC_KEY='your_public_key'
PRIVATE_KEY='your_private_key'
API_URL='https://www.liqpay.ua/api/request'
JSON="{ 
	\"action\" : \"mpi\",
	\"version\" : 3,
	\"public_key\" : \"${PUBLIC_KEY}\", 
	\"phone\" : \"380950000001\", 
	\"amount\" : \"1\", 
	\"currency\" : \"USD\", 
	\"description\" : \"description text\", 
	\"order_id\" : \"order_id_1\", 
	\"card\" : \"4731195301524634\", 
	\"card_exp_month\" : \"03\", 
	\"card_exp_year\" : \"22\", 
	\"card_cvv\" : \"111\"
}"
# DATA is base64_encode result from JSON string
DATA=$(echo -n ${JSON} | base64)
# SIGNATURE is base64 encode result from sha1 binary hash from concatenate string ${PRIVATE_KEY}${DATA}${PRIVATE_KEY}
SIGNATURE=$(echo -n "${PRIVATE_KEY}${DATA}${PRIVATE_KEY}" | openssl dgst -binary -sha1 | base64)
# REQ is json response from liqpay
REQ=$(curl --silent -XPOST ${API_URL} --data-urlencode data="${DATA}" --data-urlencode signature="${SIGNATURE}")
echo "Result: ${REQ}"
$liqpay = new LiqPay($public_key, $private_key);
$res = $liqpay->api("request", array(
	'action'         => 'mpi',
	'version'        => '3',
	'phone'          => '380950000001',
	'amount'         => '1',
	'currency'       => 'USD',
	'description'    => 'description text',
	'order_id'       => 'order_id_1',
	'card'           => '4731195301524634',
	'card_exp_month' => '03',
	'card_exp_year'  => '22',
	'card_cvv'       => '111'
));
HashMap<String, String> params = new HashMap<String, String>();
params.put("action", "mpi");
params.put("version", "3");
params.put("phone", "380950000001");
params.put("amount", "1");
params.put("currency", "USD");
params.put("description", "description text");
params.put("order_id", "order_id_1"); 
params.put("card", "4731195301524634");
params.put("card_exp_month", "03");
params.put("card_exp_year", "22");
params.put("card_cvv", "111");
LiqPay liqpay = new LiqPay(PUBLIC_KEY, PRIVATE_KEY);
HashMap<String, Object> res = liqpay.api("request", params);    
System.out.println(res.get("status"));
  
liqpay = LiqPay(public_key, private_key)
res = liqpay.api("request", {
	"action"         : "mpi",
	"version"        : "3",
	"phone"          : "380950000001",
	"amount"         : "1",
	"currency"       : "USD",
	"description"    : "description text",
	"order_id"       : "order_id_1",
	"card"           : "4731195301524634",
	"card_exp_month" : "03",
	"card_exp_year"  : "22",
	"card_cvv"       : "111"
})
liqpay = Liqpay::Liqpay.new(
:public_key  => 'public_key',
:private_key => 'private_key'
)
res = liqpay.api("request", {
	:action         => "mpi",
	:version        => "3",
	:phone          => "380950000001",
	:amount         => "1",
	:currency       => "USD",
	:description    => "description text",
	:order_id       => "order_id_1",
	:card           => "4731195301524634",
	:card_exp_month => "03",
	:card_exp_year  => "22",
	:card_cvv       => "111"
})
LiqPay = liqpay:init(PublicKey, PrivateKey),
Res = liqpay:api("request", [
	{<<"action">>,         <<"mpi">>}, 
	{<<"version">>,        <<"3">>}, 
	{<<"phone">>,          <<"380950000001">>}, 
	{<<"amount">>,         <<"1">>}, 
	{<<"currency">>,       <<"USD">>}, 
	{<<"description">>,    <<"description text">>}, 
	{<<"order_id">>,       <<"order_id_1">>}, 
	{<<"card">>,           <<"4731195301524634">>}, 
	{<<"card_exp_month">>, <<"03">>}, 
	{<<"card_exp_year">>,  <<"22">>}, 
	{<<"card_cvv">>,       <<"111">>}
], LiqPay)
var LiqPay = require('liqpay');
var liqpay = new LiqPay(public_key, private_key);
liqpay.api("request", {
	"action"         : "mpi",
	"version"        : "3",
	"phone"          : "380950000001",
	"amount"         : "1",
	"currency"       : "USD",
	"description"    : "description text",
	"order_id"       : "order_id_1",
	"card"           : "4731195301524634",
	"card_exp_month" : "03",
	"card_exp_year"  : "22",
	"card_cvv"       : "111"
}, function( json ){
	console.log( json.status );
});
my $liqpay = Liqpay->new($public_key,$private_key);
my $res = $liqpay->api("request",
	{
	'action'         => 'mpi',
	'version'        => '3',
	'phone'          => '380950000001',
	'amount'         => '1',
	'currency'       => 'USD',
	'description'    => 'description text',
	'order_id'       => 'order_id_1',
	'card'           => '4731195301524634',
	'card_exp_month' => '03',
	'card_exp_year'  => '22',
	'card_cvv'       => '111'
	}
);
Init("my_public_key", "my_private_key")
Api("request", map[string]interface{}{
    "action": "mpi",
    "version": 3,
    "public_key": PublicKey,
    "phone": "380950000001",
    "amount": 1,
    "currency": "UAH",
    "description": "Test payment",
    "order_id": "order_id_1",
    "card": "4731195301524634",
    "card_exp_month": "03", 
    "card_exp_year": "22", 
    "card_cvv": "111",
})
Параметри для формування data:
Основні
Parameter Required Type Description
version Required Number Версія API. Поточне значення - 3
public_key Required String Публічний ключ - ідентифікатор магазину. Отримати ключ можна в налаштуваннях магазину
action Required String mpi
amount Required Number Сума платежу. Наприклад: 5, 7.34
card Required String Номер картки платника
card_cvv Required String CVV/CVV2
card_exp_month Required String Місяць терміну дії картки платника. Наприклад: 08
card_exp_year Required String Рік терміну дії картки платника. Наприклад: 19
currency Required String Валюта платежу. Можливі значення: USD, EUR, RUB, UAH
description Required String Призначення платежу.
ip Required String IP клієнта
order_id Required String Унікальний ID покупки у Вашому магазині. Максимальна довжина 255 символів.
action_payment Optional String Параметр, який визначає тип платежу. Передати значення параметра action платежу, який буде проводитися після проходження 3DS. Можливі значення: pay - платіж, hold - блокування коштів на рахунку відправника, subscribe - регулярний платіж, paydonate - пожертвування, auth - предавторизація картки, p2p - переказ з картки на картку, p2pdebit - оплата за допомогою p2p debit. Значення за замовчуванням - pay
language Optional String Мова клієнта ru, uk, en
sender_first_name Optional String Ім’я платника
sender_last_name Optional String Прізвище платника
threeDSInfo Required Object Додаткові дані для перевірки операції
Параметры 3DS 2.0 (Объект threeDSInfo)
notificationURL Required String Адреса, на яку буде відправлено результат проходження перевірки.
URL для відправки CRes або повідомлення про помилку. Повідомлення CRes надсилається від ACS емітента через браузер власника картки після проходження перевірки.
Максимальна довжина 256 символів.
browserLanguage Required String Мова браузера платника.
Значення, що представляє мову браузера, у форматі, визначеному стандартом IETF BCP47. Повертається властивістю navigator.language браузера користувача. Наприклад, en-US.
Максимальна довжина 8 символів.
threeDSRequestorURL Required String URL сайту, на якому виконується оплата. Цей елемент надає додаткові дані 3-D Secure системі в разі виникнення проблеми й повинен надати контактну інформацію.
Максимальна довжина 2048 символів.
browserScreenHeight Required String Загальна висота екрана користувача в пікселях. Повертається властивістю screen.height браузера користувача.
Максимальна довжина 6 символів.
browserColorDepth Required String Значення, що представляє бітову глибину кольорової палітри для відображення зображень у бітах на піксель. Повертається властивістю screen.colorDepth браузера користувача.
Максимальна довжина 2 символа.
Допустимі значення: 1 = 1 біт, 4 = 4 біти, 8 = 8 біт, 15 = 15 біт, 16 = 16 біт, 24 = 24 біт, 32 = 32 біт, 48 = 48 біт.
browserJavascriptEnabled Optional Boolean Параметр, який повідомляє, чи може браузер платника виконувати JavaScript. За замовчуванням true
browserJavaEnabled Optional Boolean Параметр, який повідомляє, чи може браузер платника виконувати Java. За замовчуванням false
browserScreenWidth Required String Загальна ширина екрана платника в пікселях. Повертається властивістю screen.width браузера користувача.
Максимальна довжина 6 символів.
browserAcceptHeader Required String Точне значення HTTP accept заголовків, відправлених із браузера платника на ресурс, де виконується оплата.
Максимальна довжина 2048 символів.
Якщо значення заголовків буде довшим за 2048 символів, 3DS сервер обріже зайву частину.
browserTZ Required String Зміщення часового поясу між Гринвічем та місцевим часом платника, у хвилинах. Приклад значень зміщення часового поясу у хвилинах:
- якщо UTC –5 годин, то значення 300,
- якщо UTC +5 годин, то значення –300.
browserUserAgent Required String Точний зміст HTTP заголовка user-agent.
Максимальна довжина 2048 символів.
Якщо значення заголовків буде довшим за 2048 символів, 3DS сервер обріже зайву частину.
Приклад відповіді:
3DS 1.0
  {
    "status": "success",
    "mpi_req_pareq": "eJxVUe1OwjAUfRWyB1jbMWAjlybIjJI4J1454B/TlKuUsA+6zTCf3lvYRPvrnJN72tNz4XlrEZMn\n1I1FCSlWlfrgdnMvNX8fTyKAx7xwJOwmj/iQcIX2soUuRQ+9wNgPSWj1VV1xKUPlwt10Uowng8\nBNZRyNAuEyl4d2IRjfgI2FmGXGUovQ/jATtB0EWT17aVEQ+B9QQ7ld5fbui6rKWOoi4zcGv29OZSq\n9Rt10VhWGorn5oFdsq0ahyq6/2g2Mr15ad+S9ret0l34/LDhPk2Vw93o9A+YmYKNqlAEXEx4J\nMRBiOpMQ4p90kFlLpjkPhf00T0r0xPxOS/1Kgki3mupVxxOlbPQM8lkWNEGZfzGwS9zFrStW\n19RVvxNX7UlwbkPtiLGL0ETFgzsK6rbFur4T+7fsHPamnMg==",
    "mpi_req_md": "MGUyZDYxMjYDfhKOC00MDI2LWFhMWUOpDFJjNzIyMmDffShZjli",
    "mpi_req_url": "https://acs.bankname.com/mpi",
    "mpi_status": "Y"
  }
  
3DS 2.0 (статус C)
  {
    "result": "ok", 
    "mpi_status": "C", 
    "mpi_version": "2.0", 
    "mpi_form": "< form action = 'https://acs4.privatbank.ua/acs/creq' method = 'post' > < input type = 'hidden' name = 'creq' value = 'eyJhY3NUcmFuc0lEIjoiNDJlYmRkOWMtNzU0Zi00YzMwLTg5NDMtNDJhODQzMDY4ZTMwIiwibWVzc2FnZVR5cGUiOiJDUmVxIiwibWVzc2FnZVZlcnNpb24iOiIyLjEuMCIsInRocmVlRFNTZXJ2ZXJUcmFuc0lEIjoiZTc1YmEyOGItNjE0YS00NDE5LWFjMzQtNzkxZDlmMjkwZjE3IiwiY2hhbGxlbmdlV2luZG93U2l6ZSI6IjAyIn0=' / > < /form>", 
    "status": "success",
    "mpi_cres": null,
    "cres": null
  }
  
3DS 2.0 (статус A)
  {
    "result": "ok", 
    "mpi_status": "A", 
    "mpi_version": "2.0", 
    "mpi_form": "null", 
    "status": "success",
    "mpi_cres": "eyJhY3NUcmFuc0lEIjoiYTc1ZGYxZGYtZmRhZi00YzcyLTlkOTItYTM1NDUzMzEzODU1IiwibWVzc2FnZVR5cGUiOiJDUmVzIiwibWVzc2FnZVZlcnNpb24iOiIyLjEuMCIsInRocmVlRFNTZXJ2ZXJUcmFuc0lEIjoiYTQyNzQwNmUtZDlmOS00MmI2LTk5MDItOGQ2OTZjMGVkNjJjIiwidHJhbnNTdGF0dXMiOiJBIn0",
    "cres": "eyJhY3NUcmFuc0lEIjoiYTc1ZGYxZGYtZmRhZi00YzcyLTlkOTItYTM1NDUzMzEzODU1IiwibWVzc2FnZVR5cGUiOiJDUmVzIiwibWVzc2FnZVZlcnNpb24iOiIyLjEuMCIsInRocmVlRFNTZXJ2ZXJUcmFuc0lEIjoiYTQyNzQwNmUtZDlmOS00MmI2LTk5MDItOGQ2OTZjMGVkNjJjIiwidHJhbnNTdGF0dXMiOiJBIn0"
  }
  
Параметри відповіді
Parameter Type Description
mpi_req_md String Параметр, необхідний для аутентифікації відправника на сторінці ACS
mpi_req_pareq String Параметр, необхідний для аутентифікації відправника на сторінці ACS
mpi_req_url String Адреса сторінки банку-емітента картки (ACS сторінка), на яку потрібно перенаправити клієнта для проходження 3D-Secure
mpi_status String
Значення для 3DS версії 2.0:
Y, A - додаткова перевірка клієнта не потрібна,
C - потрібна додаткова перевірка клієнта,
N - не вдалося провести верифікацію клієнта. Проведення платежу не рекомендується. Можна перевірити клієнта за допомогою 3DS 1.0,
U – не вдалося перевірити картку на участь, перенаправлення клієнта для проходження 3-D Secure не потрібне.
Значення для 3DS версії 1.0:
N - картка не бере участі, перенаправлення клієнта для проходження 3D-Secure не потрібно,
U - не вдалося перевірити картку на участь, перенаправлення клієнта для проходження 3D-Secure не потрібно,
Y - картка підтримує сервіс 3D-Secure і в параметрі mpi_req_url буде присутня адреса сторінки банку-емітента, куди потрібно буде передати параметри mpi_req_pareq і mpi_req_md методом POST в наступній формі:
<form name="MPIform" action='${mpi_req_url}' method="POST">
   <input type="hidden" name="PaReq" value='${mpi_req_pareq}'>
   <input type="hidden" name="MD" value='${mpi_req_md}'>
   <input type="hidden" name="TermUrl" value='${TermUrl}'>
</form>
  
де TermUrl – адреса сторінки, на яку емітент поверне відповідь з параметрами PaRes і MD. Для проведення платежу з вже пройденим 3DS при створенні платежу необхідно передати параметри mpi_pares і mpi_md, зі значеннями PaRes і MD, які були отримані від ACS банку емітента.
mpi_version String Повертається в тому випадку, коли картка підтримує 3DS версії 2.0. Значення "2.0".
mpi_form String Повертається в тому випадку, коли картка підтримує 3DS версії 2.0. Форма, на яку потрібно відправити клієнта для аутентифікації. Зашифрований результат перевірки буде повернуто емітентом на notificationURL в параметрі cres. Для проведення платежу з уже пройденим 3DS під час створення платежу необхідно передати параметр cres, зі значенням cres, яке було отримано від банку-емітента.
mpi_cres String Параметр, необхідний для аутентифікації відправника. Повертається при отриманні статусу Y або N.
status String Статус платежу.
Можливі значення:
Кінцеві статуси платежу
failure Неуспішний платіж
success Успішний платіж