Billing + LiqPay

Разработка платежной системы LiqPay для Биллинга

#1 7 июня 2013 в 22:08
Пишу платежную систему для биллинга, возникают вопросы, каким образом интерпритировать ответы сервера?
Код файла info.php^
  1.  
  2. <?php
  3.  
  4. if (!(defined('VALID_CMS') || defined('VALID_CMS_ADMIN'))){ die(); }
  5.  
  6. $psinfo['title'] = 'LiqPay';
  7. $psinfo['url'] = 'https://liqpay.com/';
  8. $psinfo['logo'] = 'liqpay.gif';
  9.  
  10. //Курсы валют платежной системы
  11.  
  12. $pscfg['currency']['RUR'] = '1';
  13.  
  14. //настройки по-умолчанию
  15.  
  16. $pscfg['S_NAME']['title'] = 'Название Сайта (Информация добавляется в название платежа)';
  17. $pscfg['S_NAME']['value'] = 'Моя социальная сеть';
  18.  
  19. $pscfg['FROM']['title'] = 'Мерчант ID';
  20. $pscfg['FROM']['value'] = '';
  21.  
  22. $pscfg['S_KEY']['title'] = 'Секретный ключ';
  23. $pscfg['S_KEY']['value'] = '';
  24.  
  25. $pscfg['PHONE']['title'] = 'Телефон';
  26. $pscfg['PHONE']['value'] = '';
  27.  
  28.  
  29.  
  30. ?>
  31.  
Код файла form.php
  1.  
  2. <?
  3. $merchant_id=$this->config['FROM']['value'];
  4. $signature=$this->config['S_KEY']['value'];
  5. $url="https://www.liqpay.com/?do=clickNbuy";
  6. $method='card';
  7. $phone=$this->config['PHONE']['value'];
  8. $amount=$this->summ;
  9. $description='Пополнение баланса пользователем';
  10. $order_id=$this->order['id'];
  11.  
  12. $xml="<request>
  13. <version>1.2</version>
  14. <result_url>http://СВОЙ-САЙТ.com/billing/get-payment/liqpay</result_url>
  15. <server_url>http://СВОЙ-САЙТ.com/billing/get-payment/liqpay</server_url>
  16. <merchant_id>$merchant_id</merchant_id>
  17. <order_id>$order_id</order_id>
  18. <amount>$amount</amount>
  19. <currency>RUR</currency>
  20. <description>$description</description>
  21. <default_phone>$phone</default_phone>
  22. <pay_way>$method</pay_way>
  23. </request>
  24. ";
  25.  
  26.  
  27. $xml_encoded = base64_encode($xml);
  28. $lqsignature = base64_encode(sha1($signature.$xml.$signature,1));
  29.  
  30. ?>
  31.  
  32. <form action='https://www.liqpay.com/?do=clickNbuy' method='POST' id="liqpay_<?php echo $currency; ?>"
  33. style="display:none"
  34. class="psys">
  35. <input type='hidden' name='operation_xml' value="<?php echo $xml_encoded; ?>" />
  36. <input type='hidden' name='signature' value="<?php echo $lqsignature; ?>" />
  37. <input type='button' value="<?php echo $_LANG['SHOP_CONTINUE']; ?>" onclick="$('form#liqpay_<?php echo $currency; ?>').submit()"/>
  38. </form>
  39.  
  40.  
Здесь все ясно и все работает, но как обработать в файле liqpay.php ответ сервера?

Наш ответ прийдет к вам в закодированном виде, методом POST в переменных operation_xml и signature (по аналогии с запросом). Чтоб раскодировать operation_xml вам необходимо проделать следующую процедуру, пример:

  1. $xml_decoded=base64_decode($xml);

После распаковки вы получите XML следующего вида:

  1.  
  2. $xml=<response>
  3. <version>1.2</version>
  4. <merchant_id></merchant_id>
  5. <order_id> ORDER_123456</order_id>
  6. <amount>1.01</amount>
  7. <currency>UAH</currency>
  8. <description>Comment</description>
  9. <status>success</status>
  10. <code></code>
  11. <transaction_id>31</transaction_id>
  12. <pay_way>card</pay_way>
  13. <sender_phone>+3801234567890</sender_phone>
  14. <goods_id>1234</goods_id>
  15. <pays_count>5</pays_count>
  16. </response>";
  17.  
Примечание, по тегам
merchant_id — id мерчанта
order_id — id заказа
amount — стоимость
currency — Валюта
description — Описание
status — статус транзакции
code — код ошибки (если есть ошибка)
transaction_id — id транзакции в системе LiqPay
pay_way — способ которым оплатит покупатель(если не указывать то он сам выбирает, с карты или с телефона(liqpay, card))
sender_phone — телефон оплативший заказ
goods_id — id товара в счетчике покупок (если был передан) NEW!
pays_count — число завершенных покупок данного товара (если был передан goods_id) NEW!
*Примеры статусов
status="success" — покупка совершена
status="failure" — покупка отклонена
status="wait_secure" — платеж находится на проверке

Вопрос — Как обработать ответ и зачислить или незачислить деньги?
#2 7 июня 2013 в 22:34
  1.  
  2. $rez = simplexml_load_string($result);
  3. $xml = base64_decode(strval($rez->liqpay->operation_envelope->operation_xml));
  4. $signatur = 'Ваш секретный ключ';
  5. $check = strval($rez->liqpay->operation_envelope->signature);
  6. $signature = base64_encode(sha1($signatur.$xml.$signatur, 1));
  7. if($signature == $check)
  8. {
  9. $payrez = (array)simplexml_load_string($xml);
  10. if($payrez['status'] == 'success')
  11. {
  12. $payrez = (array)$payrez['transaction'];
  13. $status = $payrez['status'];
  14. switch($status)
  15. {
  16. case 'success': //Платеж поступил
  17. //Проверить $payrez['order_id'], $payrez['amount'], $payrez['currency'] на соответствие с заказом
  18.  
  19. break;
  20. case 'failure': //Платеж отменен, отменяем заказ
  21. break;
  22. }
  23. }
  24. }
  25.  
#3 7 июня 2013 в 22:40
stealthdebuger, не совсем понял, как будет обрабатывать биллинг результат?
#4 7 июня 2013 в 23:08
могу готовый скрипт дать для liqpay, подгоните под свои нужды
#5 7 июня 2013 в 23:14

готовый скрипт дать для liqpay

Smith
для биллинга? я просто не могу разобраться как биллинг определяет платеж
#6 7 июня 2013 в 23:18
для самописного движка, но там есть как раз скрипт который отрабатывает ответ сервера
#7 7 июня 2013 в 23:20
да ответ я и сам обрабатывал на самописном, мне именно биллинг нужно понять как определяет что прошла оплата и что нужно зачислять…
#8 8 июня 2013 в 16:03
Попробуйте по аналогии с файлом interkassa.php (расположение components/billing/payments/interkassa)

И в самой кассе настроить куда возвращать ответ, на примере файла выше, ответ должен поступать на:
ваш-сайт/billing/get-payment/interkassa

Т.е. Создаете в папке payments папку liqpay, делаете в ней все по аналогии с интеркассой и соответственно
ответ от платежки должен прийти на: ваш-сайт/billing/get-payment/liqpay
#9 8 июня 2013 в 16:04
Это должно также помочь:
www.instantmaps.ru/help/payments.html

п.с. В файле interkassa.php все достаточно хорошо расписано и с русскими комментариями кода
#10 8 июня 2013 в 16:05
спасибо, друг обещал помочь, как будет готов — отдам бесплатно по лицензии GNU :)
#11 27 февраля 2014 в 15:44
Просто так подключить LiqPay не получится, так как, нужно менять зашифрованный код. Этот вопрос к разработчикам. Кажется, в последних версиях биллингах эта система уже внедрена
#12 2 июля 2016 в 11:44


могу готовый скрипт дать для liqpay, подгоните под свои нужды

Smith
здравствуйте. вы поможете с установкой на сайт liqpay?
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.