Перейти к содержимому


Фотография
* * * - - 2 Голосов

Новый способ оплаты - Privat24 (liqPay)

privat24 способы оплаты оплата платежные системы

Сообщений в теме: 10

#1 werewolfgsm

werewolfgsm

Отправлено 11 June 2013 - 19:41

*
Популярное сообщение!

Сделал оплату через Privat24 (liqPay).
Все изменения производились в файле media\zoo\applications\jbuniversal\framework\controllers\payment.php
Делал на основе Робокассы (по сути переделал робокассу, теперь у меня ее нет)
В настройках корзины, в полях Робокассы указываем id мерчанта (login) и сигнатуру (password 1) и включаем робокассу
 
далее файл payment.php
17 строка: const TYPE_ROBOX  = 'Liqpay.com';
далее функция function index()
в ней формируется запрос на платежную систему
// robox замена на Privat24
if ((int)$this->appParams->get('global.jbzoo_cart_config.robox-enabled', 0)) {

    $params               = new stdClass();
    // id мерчанта
    $params->login        = JString::trim($this->appParams->get('global.jbzoo_cart_config.robox-login'));

    // подпись мерчанта
    $params->password1    = JString::trim($this->appParams->get('global.jbzoo_cart_config.robox-password1'));
    
    // берем поле тефефон клиента из формы заказа
    $params->phone        = $this->order->getElement('c1b20e16-3869-40db-95b9-2c8fd0a8649f')->get('value');
    $params->summ         = $totalSumm;
    $params->orderId      = $this->orderId;
    $params->summFormated = $totalSummFormated;

    // формируем xml liqpay
    // поля operation_xml
    $params->xml_operation_xml = '<request>
            <version>1.2</version>
            <merchant_id>'.$params->login.'</merchant_id>
            <result_url>{страница возврата после платежа}</result_url>
            <server_url>{страница на которую приходит callback от платежки}</server_url>
            <order_id>'.$this->orderId.'</order_id>
            <amount>'.$totalSumm.'</amount>
            <currency>UAH</currency>
            <description>OrderID #'.$this->orderId.' Podarochniy sertifikat na summu: '.$totalSumm.' UAH</description>
            <default_phone>'.$params->phone.'</default_phone>
            <pay_way>card</pay_way>
        </request>';

    // Создание подписи signature
    $params->sign = base64_encode(sha1($params->password1.$params->xml_operation_xml.$params->password1,1));

    //Запаковка XML
    $params->xml_encoded = base64_encode($params->xml_operation_xml);

    $this->payments['robox'] = $this->app->data->create($params);
}
После этого правим функцию _init
нам надо получить order_id который приходит от привата в массиве post в закодированном виде (в отличии от робокассы и интеркассы)
строку
if ($invId = (int)$this->_jbreq->get('InvId')) {
меняем на
$this->appParams = $this->application->getParams();

if (isset($_POST['operation_xml']) && isset($_POST['signature'])){
    
    $operation_xml = $_POST['operation_xml'];
    $signature_input = $_POST['signature'];
        
    $merc_sig    = JString::trim($this->appParams->get('global.jbzoo_cart_config.robox-password1'));
    $xml_decoded=base64_decode($operation_xml);
    $my_signature_decoded = base64_encode(sha1($merc_sig . $xml_decoded . $merc_sig, 1)); 
        
    if ($signature_input === $my_signature_decoded) { 
        if ($xml = simplexml_load_string($xml_decoded)) {
            foreach($xml as $xmlRow) {
                if ($xmlRow->getName() == 'order_id') $this->orderId = (int)$xmlRow;
                if ($xmlRow->getName() == 'status')	$status = (string)$xmlRow;
            }
        }
        $this->systemType = self::TYPE_ROBOX;
    }			
} else if ($invId = (int)$this->_jbreq->get('InvId')) {
далее функция  paymentCallback()
 
меняем всю ветку по робокассе:
if ($this->systemType == self::TYPE_ROBOX) {
на:
if ($this->systemType == self::TYPE_ROBOX) {
    if (isset($_POST['operation_xml']) && isset($_POST['signature'])){
        $operation_xml = $_POST['operation_xml'];
        $signature_input = $_POST['signature'];
        
        $merc_sig    = JString::trim($this->appParams->get('global.jbzoo_cart_config.robox-password1'));
        $xml_decoded=base64_decode($operation_xml);
        $my_signature_decoded = base64_encode(sha1($merc_sig . $xml_decoded . $merc_sig, 1)); // формируем свою подпись для проверки
    
        if ($signature_input === $my_signature_decoded) { // подпись аутентична

            if ($xml = simplexml_load_string($xml_decoded)) { // парсим XML
                foreach($xml as $xmlRow) {
                    if ($xmlRow->getName() == 'order_id') $this->orderId = (int)$xmlRow;
                    if ($xmlRow->getName() == 'status') $status = (string)$xmlRow;
                }
            }
            
            // get request vars									
            $args = array(
                'date'            => $this->app->date->create()->toSQL(),
                'system'          => $this->systemType,
                'additionalState' => $status
            );
            
            // execute callback method
            $this->orderDetails->callback('paymentCallback', $args);

            jexit('OK' . $this->orderId);		
        } else {
            throw new PaymentJBUniversalControllerException('No valid hash');
        }	
        
    } else {
        throw new PaymentJBUniversalControllerException('Empty data from liqpay');
    }

} else if ($this->systemType == self::TYPE_IKASSA) {
Все. После 70+ тренеровочных оплат по 3 копейки (ну нет у привата тестового режима) я смог заставить принимать и правильно обрабываться каллбек.
 
Проблема была в том, что после _init функция обрывалась и не возвращалась в callback
Когда я получил id заказа в _init я смог продвинуться дальше.
 
Надеюсь комуто пригодится.
  • 20

#2 SmetDenis

SmetDenis

Отправлено 11 June 2013 - 20:17

Спасибо! Сделал ваше сообщение отдельным топиком.

Начало дискуссии можно прочитать тут http://forum.jbzoo.c...t-li-narabotki/


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#3 werewolfgsm

werewolfgsm

Отправлено 11 June 2013 - 20:54

Денис, Вы посмотрите, может там какие ошибки я сделал, потому что с логикой разбирался методом проб и ошибок.


  • 0

#4 SmetDenis

SmetDenis

Отправлено 12 June 2013 - 19:57

Денис, Вы посмотрите, может там какие ошибки я сделал, потому что с логикой разбирался методом проб и ошибок.

Я смотрел. В принципе то что у вас получилось - очень похоже на правду. Похвально, что вы разобрались сами :)
Но сам код я не тестировал - нет времени =(
  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#5 werewolfgsm

werewolfgsm

Отправлено 13 June 2013 - 13:27

При работе с liqpay иногда случается ситуация, что приходит статус платежа "на проверке". Это происходит, когда платеж с карты не ПриватБанка.

Поддержка говорит, что когда платеж проверят (1-3 дня) присваивают статус  "успешно" и отправляют повторный callback на тот же урл, что указан в платеже.

Вопрос в чем, обработает ли jbzoo этот каллбэк и обновится ли статус на новый? Проверить не могу. Пытался сгенерировать такой статус, не вышло.


  • 1

#6 SmetDenis

SmetDenis

Отправлено 13 June 2013 - 21:21

Проверка статуса заказа происходит тут

20130614-336-65kb.jpg


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#7 sc

sc

Отправлено 13 June 2013 - 22:42

Я еще не проверял, но низкий поклон Вам werewolfgsm, я давно ждал добавление отдельно Приват24 в JBZoo +1 к Вашей карме, надеюсь еще 100 человек поставят + и администрация за 100 плюсов кармы выдаст бесплатно Вам доступ на год  ;)


  • 1

yootheme-logo.png
Лицензирование YOOtheme (шаблоны, Widgetkit, ZOO). А так же самые свежие обновления напрямую от ZOOlanders, SH404SEF, Akeeba Backup PRO, Admin Tools PRO, Accordion Menu и д.р. Пишите в ЛС


#8 kolosroman

kolosroman

Отправлено 15 December 2013 - 11:15

Огромное спасибо за переделку  - для Украины это ОЧЕНЬ нужная фича.


  • 0

#9 topins

topins

Отправлено 15 December 2013 - 12:58

Сделал оплату через Privat24 (liqPay).

 
Надеюсь комуто пригодится.

 

Уважаемый werewolfgsm, а есть возможность выложить измененные файлы с хелпом что и куда? Я так понимаю, если просто перезалить файлы и прописать номер мерчанта Приват24 все начнет работать. Просто с кодом не все дружат...


  • 0

#10 Sliapy

Sliapy

Отправлено 15 December 2013 - 17:53

Активность: Dec 02 2013 22:45

 

Так что даже не знаю, сколько времени Вам придется ждать ответа...


  • 0
[color=#aa0000]Не забывайте нажимать кнопку "Вопрос Решён" под сообщением, которое решило Вашу проблему.[/color]





Темы с аналогичным тегами privat24, способы оплаты, оплата, платежные системы

Click to return to top of page in style!