Приватный
Защищенный платеж
Отложенный платеж с гарантией оплаты после подтверждения клиентом оказания услуги или получения товара


Создание
Схема работы API защищенного платежа
Формирование запроса к API при самостоятельной интеграции:
Пример использования SDK:
#!/bin/bash
PUBLIC_KEY='your_public_key'
PRIVATE_KEY='your_private_key'
API_URL='https://www.liqpay.ua/api/request'
JSON="{ 
\"action\" : \"paylc\",
\"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\", 
\"letter_of_credit\" : \"1\", 
\"letter_of_credit_date\" : \"2016-04-24 00:00:00\"
}"
# 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'                => 'paylc',
'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',
'letter_of_credit'      => '1',
'letter_of_credit_date' => '1443992459999'
));
HashMap<String, String> params = new HashMap<String, String>();
params.put("action", "paylc");
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");
params.put("letter_of_credit", "1");
params.put("letter_of_credit_date", "1443992459999");

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"                : "paylc",
"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",
"letter_of_credit"      : "1",
"letter_of_credit_date" : "1443992459999"
})
liqpay = Liqpay::Liqpay.new(
:public_key  => 'public_key',
:private_key => 'private_key'
)
res = liqpay.api("request", {
:action                => "paylc",
: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",
:letter_of_credit      => "1",
:letter_of_credit_date => "1443992459999"
})
LiqPay = liqpay:init(PublicKey, PrivateKey),
Res = liqpay:api("request", [
{<<"action">>,                <<"paylc">>},
{<<"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">>},
{<<"letter_of_credit">>,      <<"1">>},
{<<"letter_of_credit_date">>, <<"1443992459999">>}
], LiqPay)
var LiqPay = require('liqpay');
var liqpay = new LiqPay(public_key, private_key);
liqpay.api("request", {
"action"                : "paylc",
"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",
"letter_of_credit"      : "1",
"letter_of_credit_date" : "1443992459999"
}, function( json ){
console.log( json.status );
});
my $liqpay = Liqpay->new($public_key,$private_key);
my $res = $liqpay->api("request",
{
'action'                => 'paylc',
'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',
'letter_of_credit'      => '1',
'letter_of_credit_date' => '1443992459999'
}
);
Init("my_public_key", "my_private_key")
Api("request", map[string]interface{}{
    "action": "paylc",
    "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",
    "letter_of_credit": "1",
    "letter_of_credit_date": "2016-04-24 00:00:00", 
})
Параметры для формирования data:
Основные
Parameter Required Type Description
version Required Number Версия API. Текущее значение - 3
public_key Required String Публичный ключ - идентификатор магазина. Получить ключ можно в настройках магазина
action Required String paylc
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 символов.
phone Required String Телефон плательщика. На этот номер будет отправлен OTP пароль подтверждения платежа. Телефон указывается в международном формате (Украина +380, Россия +7). Например: +380950000001 (с +) или 380950000001 (без +)
language Optional String Язык клиента ru, uk, en
prepare Optional String Предподготовка платежа. Этот режим позволяет определить все ли данные заполнены, нужна ли 3DS проверка карты, не превышен ли лимит. Средства с карты плательщика не списываются. Для включения режима необходимо передать значение 1
recurringbytoken Optional String Этот параметр позволяет генерировать card_token плательщика, который вы получите в callback запросе на server_url. card_token позволяет проводить платежи без ввода реквизитов карты плательщика, используя API paytoken. Для получения card_token необходимо передать в запросе значение: 1
sandbox Optional String Включает тестовый режим. Средства с карты плательщика не списываются. Для включения тестового режима необходимо передать значение 1. Все тестовые платежи будут иметь статус sandbox - успешный тестовый платеж.
server_url Optional String URL API в Вашем магазине для уведомлений об изменении статуса платежа (сервер->сервер). Максимальная длина 510 символов. Подробнее
Параметры защищенного платежа
letter_of_credit Optional String Чтобы включить прием платежей по аккредитиву передайте параметр со значением1
letter_of_credit_date Optional String Дата окончания срока аккредитива в следующем формате 2015-03-31 00:00:00 по UTC.
Параметры по отправителю
sender_address NEW Optional String Адрес отправителя
sender_city Optional String Город отправителя
sender_country_code Optional String Код страны отправителя. Цифровой ISO 3166-1 код
sender_first_name Optional String Имя отправителя
sender_last_name Optional String Фамилия отправителя
sender_postal_code Optional String Почтовый индекс отправителя
Параметры расщепления платежа
split_rules Optional String Платеж с расщеплением суммы на нескольких получателей. В этом параметре указывается JSON массив с правилами расщепления платежа. При использовании параметра split_rules происходит одно списание с клиента и несколько зачислений получателям. Эквайринговая комиссия взимается с каждого магазина в массиве split_rules. Пример JSON строки:
[
  {
    "public_key": "i000000001",
    "amount": 1,
    "commission_payer": "sender",
    "server_url": "https://server1/callback"
  },
  {
    "public_key": "i000000002",
    "amount": 2,
    "commission_payer": "receiver",
    "server_url": "https://server2/callback"
  }
]
3DS параметры
mpi_md Optional String Параметр, возвращаемый страницей ACS MD.
Этот параметр передается, только если предварительно было использовано API MPI
mpi_pares Optional String Параметр, возвращаемый страницей ACS pares.
Этот параметр передается, только если предварительно было использовано API MPI
Другие параметры
customer Optional String Уникальный идентификатор пользователя на сайте мерчанта. Максимальная длина 100 символов.
dae Optional String Длинная запись Detail Addenda.
Параметр dae представляет собой JSON строку, к которой применили функцию base64. JSON может содержать следующие параметры:
{
  "airLine": "Avia", // абревиатура авиакомпании, max 4 символов.
  "ticketNumber": "ACSFD12354SA", // номер билета, max 15 символов. 
  "passengerName": "John Doe", // имя пассажира, max 29 символов.
  "flightNumber": "742", // номер рейса, max 5 цифр.
  "originCity": "DP", // код города/аэропорта вылета, max 5 символов.
  "destinationCity": "NY", // код города/аэропорта назначения, max 5 символов.
  "departureDate": "100514" // дата вылета в формате YYMMDD, max 6 цифр.
}
Пример параметра dae: ewogICJhaXJMaW5lIjogIkROSVBST0FWSUEiLAogICJ0aWNrZXROdW1iZXIiOiAiQUNTRkQxMjM1NFNBIiwKICAicGFzc2VuZ2VyTmFtZSI6ICJKb2huIERvZSIsCiAgImZsaWdodE51bWJlciI6ICI3NDIiLAogICJvcmlnaW5DaXR5IjogIkRQIiwKICAiZGVzdGluYXRpb25DaXR5IjogIk5ZIiwKICAiZGVwYXJ0dXJlRGF0ZSI6ICIxMDA1MTQiCn0=
info Optional String Информация для добавления данных к платежу. Например: "External information for payments"
product_category Optional String Категория товара. Максимальная длина 25 символов.
product_description Optional String Описание товара. Максимальная длина 500 символов.
product_name Optional String Название товара. Максимальная длина 100 символов.
product_url Optional String Адрес страницы с товаром. Максимальная длина 2000 символов.
Пример ответа:
{
"action": "pay",
"payment_id": 165174,
"status": "wait_lc",
"version": 3,
"type": "buy",
"paytype": "card",
"public_key": "i000000000",
"acq_id": 414963,
"order_id": "98R1U1OV1485849059893399",
"liqpay_order_id": "NYMK3AE61501685438251925",
"description": "description",
"sender_phone": "380950000001",
"sender_first_name": "first name",
"sender_last_name": "last name",
"sender_card_mask2": "473118*15",
"sender_card_bank": "pb",
"sender_card_type": "visa",
"sender_card_country": 804,
"ip": "8.8.8.8",
"card_token": "2DFBFE626B730001122DE81E971E948D6F260",
"amount": 0.02,
"currency": "UAH",
"sender_commission": 0.0,
"receiver_commission": 0.0,
"agent_commission": 0.0,
"amount_debit": 0.02,
"amount_credit": 0.02,
"commission_debit": 0.0,
"commission_credit": 0.0,
"currency_debit": "UAH",
"currency_credit": "UAH",
"sender_bonus": 0.0,
"amount_bonus": 0.0,
"bonus_type": "bonusplus",
"bonus_procent": 7.0,
"authcode_debit": "109082",
"rrn_debit": "000663748360",
"mpi_eci": "7",
"is_3ds": false,
"letter_of_credit_date": 1510228800000,
"transaction_id": 165174
}
Параметры ответа
Parameter Type Description
acq_id Number ID эквайера
action String Тип операции. Возможные значения: pay - платеж, hold - блокировка средств на счету отправителя, paysplit - расщепление платежа, subscribe - создание регулярного платежа, paydonate - пожертвование, auth - предавторизация карты, regular - регулярный платеж
agent_commission Number Комиссия агента в валюте платежа
amount Number Сумма платежа
amount_bonus Number Бонус отправителя в валюте платежа debit
amount_credit Number Сумма транзакции credit в валюте currency_credit
amount_debit Number Сумма транзакции debit в валюте currency_debit
authcode_debit String Код авторизации по транзакции debit
bonus_procent Number Размер скидки в процентах
bonus_type String Тип бонуса, возможные значения bonusplus, discount_club, personal, promo
card_token String Token карты оправителя
commission_credit Number Комиссия с получателя в валюте currency_credit
commission_debit Number Комиссия с отправителя в валюте currency_debit
currency String Валюта платежа
currency_credit String Валюта транзакции credit
currency_debit String Валюта транзакции debit
description String Комментарий к платежу
ip String IP адрес отправителя
is_3ds Boolean Возможные значения:
true - транзакция прошла с 3DS проверкой,
false - транзакция прошла без 3DS проверки
letter_of_credit_date String Дата окончания срока аккредитива
liqpay_order_id String Order_id платежа в системе LiqPay
mpi_eci Number Возможные значения: 5 - транзакция прошла с 3DS (эмитент и эквайер поддерживают технологию 3D-Secure), 6 - эмитент карты плательщика не поддерживает технологию 3D-Secure, 7 - операция прошла без 3D-Secure
order_id String Order_id платежа
payment_id Number Id платежа в системе LiqPay
paytype String Способ оплаты. Возможные значения card - оплата картой, liqpay - через кабинет liqpay, privat24 - через кабинет приват24, masterpass - через кабинет masterpass, moment_part - рассрочка, cash - наличными, invoice - счет на e-mail, qr - сканирование qr-кода.
public_key String Публичный ключ магазина
receiver_commission Number Комиссия с получателя в валюте платежа
rrn_debit String Уникальный номер транзакции в системе авторизации и расчетов обслуживающего банка Retrieval Reference number
sender_bonus Number Бонус отправителя в валюте платежа
sender_card_bank String Банк отправителя
sender_card_country String Страна карты отправителя. Цифровой ISO 3166-1 код
sender_card_mask2 String Карта отправителя
sender_card_type String Тип карты отправителя MC/Visa
sender_commission Number Комиссия с отправителя в валюте платежа
sender_first_name String Имя отправителя
sender_last_name String Фамилия отправителя
sender_phone String Телефон отправителя
status String Статус платежа.
Возможные значения:
Конечные статусы платежа
error Неуспешный платеж. Некорректно заполнены данные
failure Неуспешный платеж
reversed Платеж возвращен
sandbox Тестовый платеж
success Успешный платеж
Cтатусы требующие подтверждения платежа
3ds_verify Требуется 3DS верификация.
Для завершения платежа, требуется выполнить 3ds_verify
cvv_verify Требуется ввод CVV карты отправителя.
Для завершения платежа, требуется выполнить cvv_verify
otp_verify Требуется OTP подтверждение клиента. OTP пароль отправлен на номер телефона Клиента.
Для завершения платежа, требуется выполнить otp_verify
receiver_verify Требуется ввод данных получателя.
Для завершения платежа, требуется выполнить receiver_verify
sender_verify Требуется ввод данных отправителя.
Для завершения платежа, требуется выполнить sender_verify
Другие статусы платежа
wait_accept Деньги с клиента списаны, но магазин еще не прошел проверку. Если магазин не пройдет активацию в течение 90 дней, платежи будут автоматически отменены
wait_lc Аккредитив. Деньги с клиента списаны, ожидается подтверждение доставки товара
wait_secure Платеж на проверке
transaction_id Number Id транзакции в системе LiqPay
type String Тип платежа
version Number Версия API. Текущее значение - 3