API LiqPay: Liq&Buy 2.0

14 сообщений / 0 новое
Последняя публикация
WT George
Аватар пользователя WT George
API LiqPay: Liq&Buy 2.0

Kiss 2 если было полезно, жми кнопку g+1 ⇒

Вводные примечания:

  • Пример приведен для использования API LiqPay на любом сайте (использующим любой CMS или самописном).
  • Пример использование приведенных ниже скриптов вы можете увидеть здесь.
    • В данном тестовом платеже установлено значение <?php $sandbox 1?> (тестовый режим). Это означает, что деньги с карты не списываются.
    • Параметрами <?php return_url ?> и <?php server_url ?> указаны адреса рабочей платежной системы этого сайта. Т.е. после тестовой оплаты вы будете перенаправлены на наш сайт.
  • !!! В связи с участившимися случаями получениями платежей статуса wait_secure (платеж на проверке) <?php $_POST['status']=='wait_secure'?> очень рекомендуем требовать у вашего плательщика на первой странице оплаты e-mail. Для того, чтоб отослать ему уведомление о статусе платежа, после оплаты.

Параллельно открываем Инструкцию по установке Liq&Buy 2.0

Перед отправкой данных на страницу платежной системы (https://www.liqpay.com/api/pay) методом POST, вы должны сформировать форму.

<?php&lt;form accept-charset="utf-8" action="https://www.liqpay.com/api/pay" method="POST"&gt;&lt;code&gt;***&lt;/code&gt;&lt;/form&gt;?>

Мы предлагаем вариант, когда оплата на вашем сайте производиться в 3 шага:

  1. step Заполнение данных плательщиком на вашем сайте.
    Пусть это будет страница www.example.com/liqpay-1.php
    1. Сумма платежа
    2. Назначение (описание платежа)
    3. Обязательный ввод e-mail(а) плательщика Это нужно для того, чтоб после оплаты, кроме смс-уведомлений плательщик получал результат оплаты на почту. 
  2. step Промежуточная страница с подтверждением (проверкой) введенных данных. на вашем сайте www.example.com/liqpay-2.php
  3. step Последующие стадии уже на сайте LiqPay
  4. step Возврат после оплаты на ваш сайт
    1. плательщика
    2. ответа от сервера Ликпэй

Step 1. Заполнение данных плательщиком. www.example.com/liqpay-1.php

<?php&lt;!doctype html&gt;
&
lt;html&gt;
&
lt;head&gt;
     &
lt;meta charset="utf-8"&gt;
     &
lt;title&gt;Step 1. Заполнение данных плательщиком.
     &
lt;/title&gt;
&
lt;/head&gt;
&
lt;body&gt;

&
lt;?php
/**
* Ввод данных плательщиком LiqPay
*/
?&gt;

&
lt;form method="post" action="http://example.com/liqpay-2.php"&gt;
     
Введите сумму:&amp;nbsp;&amp;nbsp;&lt;input type="number" name="amount" min="0.05" step="1" required /&gt;&amp;nbsp;$USA&lt;br /&gt;&lt;br /&gt;
     
Назначение платежа:&amp;nbsp;&amp;nbsp;&lt;input type="text" name="Description" maxlength="200" size="30" required /&gt;&lt;br /&gt;&lt;br /&gt;
     
Ваш e-mail:&amp;nbsp;&amp;nbsp;&lt;input type="email" name="SenderMail" maxlength="200" size="30" required /&gt;&lt;br /&gt;&lt;br /&gt;

     &
lt;input type="submit" name="payment-system" value="Оплатить LiqPay" /&gt;
&
lt;/form&gt;

&
lt;/body&gt;
&
lt;/html&gt;?>

Step 2. Подтверждение платежа. www.example.com/liqpay-2.php

<?php&lt;?php
/**
* Возвращаем на первую страницу,
* в случае отсутствии переданных переменных (прямого захода на страницу)
*/
if (empty($_POST)) {
     
header('Location: http://example.com/liqpay-1.php');
     exit;
}
?&
gt;

&
lt;!doctype html&gt;
&
lt;html&gt;
&
lt;head&gt;
     &
lt;meta charset="utf-8"&gt;
     &
lt;title&gt;Step 2. Подтверждение платежа.&lt;/title&gt;
&
lt;/head&gt;
&
lt;body&gt;

&
lt;?php
/**
* 1. Страница проверки данных плательщиком.
* 2. Формирование API 2.0 LiqPay для отправки на Ликпэй.
*/

/** Забираеем некоторые значения с предидущей страницы (из $_POST) **/
$amount $_POST['amount'];
$description $_POST['Description'];

/** Выводим пользователю ранее введенные им данные (проверка). **/
echo '&lt;p&gt;
     &lt;b&gt;Сумма:&lt;/b&gt;&amp;nbsp;'
$amount '&amp;nbsp;$&lt;br /&gt;
     &lt;b&gt;Назначение платежа:&lt;/b&gt;&amp;nbsp;' 
$description '&lt;br /&gt;
     &lt;b&gt;e-mail:&lt;/b&gt;&amp;nbsp;' 
$_POST['SenderMail'] . '&lt;/p&gt;';

/** Определение переменных для формы API 2.0 LiqPay **/
$order_id date("d/m/Y-H:i:s");//id заказа
$merchant_id 'k597825694'//ID мерчанта (прием платежей на карту/счет). Он же public_key
$private_key "adgAlkj57fsirg6cJ5hklaadsfyrf5"//Подпись мерчанта
$return_url 'http://example.com/liqpay-4.php';     //страница на которую вернется клиент
$server_url $return_url//страница на которую придет ответ от сервера
$currency 'USD'//Валюта
$order_id = array( // Берем необходимые значения платежа, для отсылки информации результата платежа (после платежа)
                    
=&gtdate("d/m/Y_H:i:s"), //ID покупки в Вашем магазине. Должен быть УНИКАЛЬНЫМ для каждого платежа.
                    
=&gt$_POST['SenderMail'], //e-mail покупателя. Необходим для отсылки уведомления о статусе его платежа.
                    
); //print_r($order_id);
$order_id implode('~'$order_id); //преобразуем массив в строку
$type 'buy';//buy - покупка, donate - пожертвование, subscribe - подписка
$sandbox 1//для теста-1, рабочий-0

/**
* Подпись запроса.
* Внимание!!!
* 1) Алгоритм формирования подписи, приведенный на https://www.liqpay.com/ru/doc#callback
*    как 'Проверка Callback сигнатуры' здесь не работает. При отправке запроса - просто НЕизвестны
*    переменные  status (статус платежа после оплаты), transaction_id (Id платежа в системе LiqPay),
*    sender_phone (номер телефона плательщика)
* 2) Также НЕ работает алгоритм - base64_encode(sha1(...));
*    Он закомментирован ниже
*/
$signature base64_encode(sha1(join('',compact(
     
'private_key',
     
'amount',
     
'currency',
     
'merchant_id',
     
'order_id',
     
'type',
     
'description',
     
'return_url',
     
'server_url'
)),1));

/** Нерабочий алгоритм **/
// $signature = base64_encode(sha1(
//          private_key .
//          amount .
//          currency .
//          merchant_id . //public_key .
//          order_id .
//          type .
//          description .
//          return_url .
//          server_url
// ,1));

/** Форма API 2.0 LiqPay **/
echo '&lt;form id="liqpay" method="POST" action="https://www.liqpay.com/api/pay" accept-charset="utf-8"&gt;
          &lt;input type="hidden" name="public_key" value="' 
$merchant_id '" /&gt;
          &lt;input type="hidden" name="amount" value="' 
$amount '" /&gt;
          &lt;input type="hidden" name="currency" value="' 
$currency '" /&gt;
          &lt;input type="hidden" name="description" value="' 
$description '" /&gt;
          &lt;input type="hidden" name="order_id" value="' 
$order_id '" /&gt;
          &lt;input type="hidden" name="result_url" value="' 
$return_url '" /&gt;
          &lt;input type="hidden" name="server_url" value="' 
$server_url '" /&gt;  
          &lt;input type="hidden" name="type" value="' 
$type '" /&gt;
          &lt;input type="hidden" name="signature" value="' 
$signature '" /&gt;
          &lt;input type="hidden" name="language" value="RU" /&gt;
          &lt;input type="hidden" name="sandbox" value="' 
$sandbox '" /&gt;';
?&
gt;
     &
lt;/form&gt;

     &
lt;form id="back" action="javascript:history.back()"&gt;
          &
lt;!--это форма вспомогательнаядля возврата назад--&gt;&lt;/form&gt;

     &
lt;!--кнопка назад--&gt;
          &
lt;button type="submit" form="back"&gt;Назад&lt;/button&gt;&amp;nbsp;&amp;nbsp;
     &
lt;!--кнопка оплаты--&gt;
          &
lt;button type="submit" form="liqpay"&gt;Оплатить LiqPay&lt;/button&gt;

&
lt;/body&gt;
&
lt;/html&gt;?>

Step 3.

Step 4. Ответ сервера LiqPay на вашему сайту.

После оплаты плательщик получает уведомления:

  1. СМС-уведомление от своего банка о снятии денег (если банк нормальный))
    • при статусе платежа success
  2. СМС-уведомление от ЛикПэй о получении денег платежной системой LiqPay.
    • при статусах платежа success, wait_secure

Обратим внимание, что при статусе платежа wait_secure (платеж на проверке), происходит плательщик получает все 2а уведомления о снятии денег.
Средства заходят на ЛикПєй, но они не переводятся вам, и вы не получаете смс-уведомление о приходе.
Поэтому настоятельно рекомендуем брать у плательщика e-mail (на начальной стадии оплаты), и отсылать уведомление о статусе платежа (после оплаты).

Алексей (не проверено)
Подскажите, параметр RU еще

Подскажите, параметр <language>RU</language> еще работает? Не могу указать русский язык, все время выводит на английском. Спасибо.

WT George
Аватар пользователя WT George
Леша, смотрите информацию о

Леша, смотрите информацию о изменении API. В новом API смотрите значения переменной language - Возможные значения: ru, en. Ранее эти переменные были в верхнем регистре, может это имеет значение сейчас... Вы об этом спрашивали?

Алексей (не проверено)
В версии 2.0 в документации

В версии 2.0 в документации написано вставить в форму language с параметром ru. У меня на сайте версия 1.2, где формируется xml. Сверху люди пишут что можно вставить в xml строчку <language>RU</language>, но язык все равно английский. Девушка в онлайн помощи, говорит тоже про <language>EN</language>, но английский мне не нужен. Говорит, что нужно на новую версию переходить. Неужели придется все переделывать на версию 2.0 ?

WT George
Аватар пользователя WT George
То, что написано выше,

<language></language> использовался в версии Liq&Buy 1.2
У версии Liq&Buy 2.0 XML вообще не используется.
В документации вроде бы написано, как юзать новую версию, но)), скажем так... одного абзаца о переменной <?php $signature ?> (<input type="hidden" name="signature" value="Q6AKTktJClt8gw="/>) не хватает Dash 1 (как ее получить).
Мы то разобрались Wacko но мануал не выложили здесь. Сегодня-завтра сделаем и уведомим.

Анна (не проверено)
Извините, что прерываю ваш

Извините, что прерываю ваш разговор:)
Алексей, советую переходить на новую версию АПИ, потому что старая больше поддерживаться не будет. Сменить язык можно в новой версии с помощью <input type="hidden" name="language" value="ru"/> в html-форме.
PG George, чтоб получить сигнатуру нужно выполнить

<?php
BASE64
(SHA1(privat_key amount currency public_key order_id type description result_url server_url)
?>
Анна (не проверено)
Сменить язык можно в новой

Сменить язык можно в новой версии с помощью <input type="hidden" name="language" value="ru"/> в html-форме.

Алексей (не проверено)
Спасибо. Перейду на новую

Спасибо. Перейду на новую версию)

Сергей (не проверено)
Прошу прощения, может, я

Прошу прощения, может, я туплю, но LiqPay отвечает мне signature_invalid
Помогите найти ошибку:


<?php
$signature 
base64_encode(sha1("Приватный ключ".$amount.$currency."Публичный ключ".$order_id.$type.$description.$resultUrl.$serverUrl));
?>
retto (не проверено)
таже проблема с .net, все

таже проблема с .net, все время signature_invalid

WT George
Аватар пользователя WT George
Не понял, что имеете ввиду?

Не понял, что имеете ввиду? Что на сайтах с доменами .NET ликпэй выдает signature_invalid даже при правильной формировании подписи?

retto (не проверено)
$resultUrl.$serverUrl не

<?php $resultUrl.$serverUrl ?> не нужно при генерации подписи

WT George
Аватар пользователя WT George
Retto, не вводите в

Retto, не вводите в заблуждение.


<?php
$signature2 
base64_encode(sha1(
        
private_key .
        
amount .
        
currency .
        
merchant_id .
        
order_id .
        
type .
        
description
 
,1));
?>

Такая подпись дает signature_invalid.

WT George
Аватар пользователя WT George
Ликпэй в документации Liq&Buy

Ликпэй в документации Liq&Buy 2.0 public не выложил информацию как надо формировать signature. Diablo
Вариант <?php signature =  base64_encode(sha1("переменные",1)); ?> не рабочий.
Правильный пример мы выложили выше. Это <?php signature =  base64_encode(sha1(join('',compact("переменные")),1)); ?>

Тема заблокирована