Не меняеться статус оплаты LiqPay

Slaxor

Постоялец
Регистрация
23 Май 2012
Сообщения
76
Реакции
37
ImageCMS 4.6

Метод оплаты Liqpay

Оплата проходит успешно и возбращает строку вида: 0923nz038q?result=true&pm=10&crc=b8f444466d9701e91 ed4bad6f2076760&amount=1&order_id=86

Но статут заказа не оплачен.

Вот код самого модуля
Код:
<?php

/**
* Robokassa payment module
*
* author: dev@imagecms.net
* more info at: http://www.robokassa.ru/HowTo.aspx
*/
class LiqPaySystem extends BasePaymentProcessor {

    protected $settigns = null;

    public function __construct() {
        $this->order = ShopCore::app()->SPaymentSystems->getOrder();
        $lang = new MY_Lang();
        $lang->load('main');
    }

    /**
     * Process payment.
     */
    public function processPayment() {
        // Check if order is paid.
        if ($this->order->getPaid() == true)
            return ERROR_ORDER_PAID_BEFORE;

        $data = $this->loadSettings();
        $public_key = $data['merchant_id'];
        //$mrh_pass2 = $data['password2'];

        $shp_order_key = $this->order->getKey();
        $shp_payment_id = $this->paymentMethod->getId();
    $out_summ =  $_REQUEST["amount"];
        $inv_id = $_REQUEST["order_id"];
        $crc = strtoupper($_REQUEST["crc"]);   


        $my_crc = strtoupper(md5("$out_summ:$inv_id:$shp_order_key:$shp_payment_id:$public_key"));

       
        // Check sum
        // ціна доставки
        $deliveryPrice = $this->order->getDeliveryPrice();
        if ($out_summ != ShopCore::app()->SCurrencyHelper->convert($deliveryPrice + $productsPrice, $this->paymentMethod->getCurrencyId()))
            return ERROR_SUM;

        // Check sign
        if ($my_crc != $crc)
            return "bad sign $out_summ:$inv_id:Shp_orderKey=$shp_order_key:Shp_pmId=$shp_payment_id";

        // Set order paid
        $this->setOrderPaid();

        // Show answer for Robokassa API service
        if (isset($_REQUEST['getResult']) && $_REQUEST['getResult'] == 'true') {
            echo "OK" . $this->order->getId();
            exit();
        }


        if (empty($_POST['operation_xml']) && empty($_POST['signature '])) {
            $this->setOrderPaid();
        }
        return true;
    }

    /**
     * Create payment form
     *
     * @return string Generated form
     */
    public function getForm() {
        $data = $this->loadSettings();

        // Оплата заданной суммы с выбором валюты на сайте LiqPay
        // регистрационная информация (логин, пароль #1)
        $public_key = $data['merchant_id'];
        $private_key = $data['merchant_sig'];
        $shp_order_key = $this->order->getKey();
        $shp_payment_id = $this->paymentMethod->getId();
       
        $productsPrice = $this->order->getTotalPrice();
        // ціна доставки
        $deliveryPrice = $this->order->getDeliveryPrice();
        $out_summ = ShopCore::app()->SCurrencyHelper->convert($deliveryPrice + $productsPrice, $this->paymentMethod->getCurrencyId());     
       // номер заказа
        $inv_id = $this->order->getId();       
        //шифр
        $crc = md5("$out_summ:$inv_id:$shp_order_key:$shp_payment_id:$public_key");

        $result_url = shop_url('order/view/'.$shp_order_key.'?result=true&amp;pm=' . $this->paymentMethod->getId() . '&amp;crc='.$crc. '&amp;amount='.$out_summ. '&amp;order_id='.$inv_id);
        //$result_url= 'http://ninjatest.imagecms.net/shop/order/view/';
        $server_url = 'https://ninjatest.imagecms.net/shop/order';
        $type = "buy";
        $language = "ru";
        $lang = new MY_Lang();
        $language1 = $lang->getLangCode();
        if($language1[0] == 'en'){$language = "en";}else($language == 'ru');
       


        // описание заказа
        $inv_desc = "Оплата заказа номер " . $this->order->getId();
       

        // сумма заказа
        //$out_summ = ShopCore::app()->SCurrencyHelper->convert($this->order->getTotalPrice(), $this->paymentMethod->getCurrencyId());
       
        // ціна доставки
        $deliveryPrice = $this->order->getDeliveryPrice();
        $out_summ = ShopCore::app()->SCurrencyHelper->convert($deliveryPrice + $productsPrice, $this->paymentMethod->getCurrencyId());

        // предлагаемая валюта платежа
        $ISOCode = SCurrenciesQuery::create()->filterByIsDefault(true)->findOne()->getCode();

       
        // форма оплаты товара
        $inv = $private_key . $out_summ . $ISOCode . $public_key . $inv_id . $type . $inv_desc . $result_url . $server_url;
        $inv = html_entity_decode($inv);
        $signature = base64_encode(sha1($inv,1));
       

        $xml = "<form method='POST' action='https://www.liqpay.com/api/pay' target='_blank' accept-charset='utf-8'>
          <input type='hidden' name='public_key' value='$public_key' />
          <input type='hidden' name='amount' value='$out_summ' />
          <input type='hidden' name='currency' value='$ISOCode' />
          <input type='hidden' name='description' value='$inv_desc' />
          <input type='hidden' name='order_id' value='$inv_id' />
          <input type='hidden' name='result_url' value='$result_url' />
          <input type='hidden' name='server_url' value='$server_url' />
          <input type='hidden' name='type' value='$type' />
          <input type='hidden' name='signature' value='$signature' />
          <input type='hidden' name='language' value='$language' />
        ";       
       
        $this->render('LiqPay', array(
            'xml_encoded' => $xml
        ));
    }

    /**
     * Create configure form
     *
     * @return string
     */
    public function getAdminForm() {
        $data = $this->loadSettings();

        $form = '
           
            <div class="control-group">
                <label class="control-label" for="inputRecCount">' . lang('Public key', 'main') . ':</label>
                <div class="controls">
                 <input type="text" name="LiqPay[merchant_id]" value="' . $data['merchant_id'] . '"/>
                </div>
            </div>
            <div class="control-group">
                <label class="control-label" for="inputRecCount">' . lang('Private key', 'main') . ':</label>
                <div class="controls">
                 <input type="text" name="LiqPay[merchant_sig]" value="' . $data['merchant_sig'] . '" />
                </div>
            </div>
    
        ';

        return $form;
    }

    /**
     * Save settings
     *
     * @return bool|string
     */
    public function saveSettings(SPaymentMethods $paymentMethod) {
        $saveKey = $paymentMethod->getId() . '_LiqPayData';
        ShopCore::app()->SSettings->set($saveKey, serialize($_POST['LiqPay']));

        return true;
    }

    /**
     * Load Robokassa settings
     *
     * @return array
     */
    protected function loadSettings() {
        $settingsKey = $this->paymentMethod->getId() . '_LiqPayData';
        $data = unserialize(ShopCore::app()->SSettings->$settingsKey);
        if ($data === false)
            $data = array();
        return array_map('encode', $data);
    }

}
 
У Вас статус магазина в личном кабинете стоит Активирован? Если там написано подключен без возмещения, то платежи будут проходить но статус оплаты меняться не будет.
Еще проверьте в личном кабинете LiqPay лог вызова API, там должен быть код 200.
 
У Вас статус магазина в личном кабинете стоит Активирован? Если там написано подключен без возмещения, то платежи будут проходить но статус оплаты меняться не будет.

Магазин активирован, проблема осталась

Еще проверьте в личном кабинете LiqPay лог вызова API, там должен быть код 200.
Можно подробнее где именно?
 
Открываете раздел бизнес, далее история платежей и кликаете на вот эту иконку:
Для просмотра ссылки Войди или Зарегистрируйся
У вас появится страница со следущим содержимым:
Для просмотра ссылки Войди или Зарегистрируйся
Там сможете посмотреть лог вызова API
Выше в этом же окне, в разделе магазин проверьте адрес API Callback
 
Последнее редактирование:
У меня что то не так

API callback Для просмотра ссылки Войди или Зарегистрируйся

PNWweHN.png
 
Последнее редактирование:
А вот здесь уже помочь не смогу, т.к с ImageCMS не знаком.
Но мне кажется, API callback не правильный, в скрипте должен быть модуль оплаты LiqPay.
Например, у меня в rootpanel API callback: Для просмотра ссылки Войди или Зарегистрируйся
Смотрите настройки скрипта, в самом кабинете LiqPay настраивать ничего не нужно обычно.
 
Нужно
PHP:
$server_url = 'https://ninjatest.imagecms.net/shop/order';
заменить на
PHP:
$server_url = 'http(s)://твойсайт.ру/shop/order';
Ошибка в адресе коллбека как написал предыдущий автор.

UPD Я бы сделал так:
PHP:
$server_url = 'http'.((isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") ? 's' : '').'://'.$_SERVER["HTTP_HOST"].'/shop/order';

UPD2 Видимо дело не только в этом адресе. Нужно серьёзнее дебажить, где-то в коде ошибка.
 
Последнее редактирование:
У LiqPay'я очень требователен к id и прочему
тестируй выходные-входные параметры
у нас ситуация решилась именно подбором удачной генерации выходных параметров
 
Банально тесть вход и выход и ищи багу
 
Назад
Сверху