Сообщение об ошибке

Deprecated function: Function create_function() is deprecated в функции GeSHi->_optimize_regexp_list_tokens_to_string() (строка 4698 в файле /var/www/promoan/3wt.promo.org.il/sites/all/libraries/geshi/geshi.php).

платежный шлюз LiqPay (wp-woocommerce ) ошибка signature_invalid

9 сообщений / 0 новое
Последняя публикация
DJ Alex
Аватар пользователя DJ Alex
платежный шлюз LiqPay (wp-woocommerce ) ошибка signature_invalid

Здравствуйте.
Помогите, пожалуйста, найти ошибку у меня в коде....выдает signature_invalid....вроде бы все, как вы писали, сделал:

<?php
   
public function generate_form($order_id){
            global 
$woocommerce;
           
            
$order = new WC_Order$order_id );
            
$action_adr "https://www.liqpay.com/api/pay";
            
$public_key 'i99748376587';   
            
$merchant_id 'i99748376587';
            
$merchant_sig 'nynDcQz8KZqleOeYG400Bf1v1wSFDDxU6J3TullY';
            
$private_key "nynDcQz8KZqleOeYG400Bf1v1wSFDDxU6J3TullY"//Подпись мерчанта
            
$currency 'UAH'//Валюта           
            
$return_url 'http://radema.org.ua/wp-content/plugins/liqpay-test/test_callback.php'//страница на которую вернется клиент
            
$result_url str_replace'https:''http:'add_query_arg'wc-api''wc_gateway_liqpay'home_url'/' ) ) );
            
$server_url $return_url;            
            
$order_id date("d/m/Y-H:i:s");//id заказа
            
$type 'buy';//buy - покупка, donate - пожертвование, subscribe - подписка
            
$sandbox 1//для теста-1, рабочий-0
            
$description 'Секретарські послуги';

$sign base64_encode(sha1(join('',compact(
     
'private_key',
     
'amount',
     
'currency',
     
'merchant_id',
     
'order_id',
     
'type',
     
'description',
     
'return_url',
     
'server_url'
)),1));

return;
'<form id="liqpay" method="POST" action="https://www.liqpay.com/api/pay" accept-charset="utf-8">'.
                    
'<input type="hidden" name="public_key" value="'.esc_attr($public_key).'" />'.                   
                    
'<input type="hidden" name="amount" value="'.esc_attr$order->order_total ).'" />'.
                    
'<input type="hidden" name="currency" value="'.esc_attr($currency).'" />'.
                    
'<input type="hidden" name="description" value="'.esc_attr($description).'" />'.
                    
'<input type="hidden" name="order_id" value="'.esc_attr($order_id).'" />'.
                    
'<input type="hidden" name="result_url" value="'.esc_attr($return_url).'" />'.
                    
'<input type="hidden" name="server_url" value="'.esc_attr($server_url).'" />'.
                    
'<input type="hidden" name="type" value="'.esc_attr($type).'" />'.
                    
'<input type="hidden" name="signature" value="'.esc_attr($sign).'" />'.
                    
'<input type="hidden" name="language" value="RU" />'.
                    
'<input type="hidden" name="sandbox" value="1"/>'//тестовый режим 0 - нет, 1 - да
                   
                    
'<input type="submit" class="button alt" id="submit_liqpay_button" value="'.__('Сплатити''woocommerce').'" /> <a class="button cancel" href="'.$order->get_cancel_order_url().'">'.__('Відмовитися від оплати та повернутися в кошик''woocommerce').'</a>'."\n".
                    
'</form>';
                   
        }
 
?>

WT George
Аватар пользователя WT George
Ну во первых, проверьте свои
Ну во первых, проверьте свои настройки аккаунта Ликпєй.
WT George
Аватар пользователя WT George
Далее. Для формирования $sign
Далее. Для формирования $sign = ... перед ее определением вы не определили переменную amount, и подпись $sign формируется не корректно.
WT George
Аватар пользователя WT George
Зачем вы дублируете

Зачем вы дублируете переменные? Уберите лишние, оставьте только те, что в вас указаны в <?php $sign ?>. Не имеет значение как их называть, лиш бы те названия переменных что в <?php $sign ?> были предварительно определены.

<?php
//$public_key = 'i99748376587';   
$merchant_id 'i99748376587';
//$merchant_sig = 'nynDcQz8KZqleOeYG400Bf1v1wSFDDxU6J3TullY';
$private_key "nynDcQz8KZqleOeYG400Bf1v1wSFDDxU6J3TullY";
?>
WT George
Аватар пользователя WT George
Ну и форма, что вы

Ну и форма, что вы отправляете на сервер...

  • У вас перед ней стоит <?php return; ?>. Ну правда, это может быть вы временно поставили.
  • у вас в строке значения подписи <?php <input type="hidden" name="signature" value="'  .esc_attr($sign) . '" />' ?> Вы определили что подпись у вас как , значит в форме должно быть <input type="hidden" name="signature" value="' . $sign . '" />

Вы, когда будете на странице, на которой эта форма уже сформирована (перед тем как улетите на <?phpaction="https://www.liqpay.com/api/pay"?>) откройте страницу в режиме 'просмотр кода (html) страницы' (это в хроме удобно делать, поскольку если вы в редакторе изменяете скрипт /прямо на сервере/ - то можно в хроме тут-же перезагружать ее и видеть изменения) и гляньте, что у вас получилось с этой формой (что уйдет на ликпэй). Если важные <input type="" name="" value="" /> у вас пустые (типа <input type="hidden" name="currency" value="" /> или amount ...) то это тоже дает ошибку.

DJ Alex
Аватар пользователя DJ Alex
Сверил и перепроверил все,

Сверил и перепроверил все, как вы сказали.... все равно выдает ошибку.... форма (что уходит на ликпей): пустых параметров нет:

Спасибо за Ваш заказ, пожалуйста, нажмите кнопку ниже, чтобы заплатить.

<form id="liqpay" method="POST" action="https://www.liqpay.com/api/pay" accept-charset="utf-8">
     <input type="hidden" name="public_key" value="i99748376587" />
     <input type="hidden" name="merchant_id" value="i99748376587" />
     <input type="hidden" name="merchant_sig" value="nynDcQz8KZqleOeYG400Bf1v1wSFDDxU6J3TullY" />
     <input type="hidden" name="amount" value="1" /><input type="hidden" name="currency" value="UAH" />
     <input type="hidden" name="description" value="Оплата за секретарські послуги" />
     <input type="hidden" name="order_id" value="16/10/2014-12:29:57" />
     <input type="hidden" name="result_url" value="http://radema.org.ua/wp-content/plugins/liqpay-test/test_callback.php" />
     <input type="hidden" name="server_url" value="http://radema.org.ua/wp-content/plugins/liqpay-test/test_callback.php" />
     <input type="hidden" name="type" value="buy" />
     <input type="hidden" name="signature" value="SUpKHgzDvqcoL6My7Is4tMPgknE=" />
     <input type="hidden" name="language" value="RU" />
     <input type="hidden" name="sandbox" value="1" />
     <input type="submit" class="button alt" id="submit_liqpay_button" value="Сплатити" /> <a class="button cancel" href="http://radema.org.ua/korzina/?cancel_order=true&amp;order=wc_order_543fba445188e&amp;order_id=1648&amp;redirect&amp;_wpnonce=944901d813">Відмовитися від оплати та повернутися в кошик</a>
</form>

Высылаю весь код, может что-то раньше не так указано....я уже в отчаянии...неделю морочусь с заданием, которое мне показалось нетяжелым (((

<?php
if ( ! defined'ABSPATH' ) ) exit;
add_action('plugins_loaded''woocommerce_init'0);
function 
woocommerce_init() {
    if ( !
class_exists'WC_Payment_Gateway' ) ) return;
    class 
WC_Gateway_Liqpay extends WC_Payment_Gateway{
        public function 
__construct(){
            
            global 
$woocommerce;
            
            
$this->id 'liqpay';
            
$this->has_fields         false;
            
$this->method_title       __'Liqpay''woocommerce' );
            
$this->method_description __'Liqpay''woocommerce' );
            
$this->init_form_fields();
            
$this->init_settings();
            
$this->title               =  $this->get_option'title' );
            
$this->description        =  $this->get_option('description');
            
$this->merchant_id        =  $this->get_option('merchant_id');    // public key
            
$this->merchant_sig       =  $this->get_option('merchant_sig'); // private key

            // Actions
            
add_action'woocommerce_receipt_liqpay', array( $this'receipt_page' ) );
            
add_action'woocommerce_update_options_payment_gateways_' $this->id, array( $this'process_admin_options' ) );
            
            
// Payment listener/API hook
            
add_action'woocommerce_api_wc_gateway_liqpay', array( $this'check_ipn_response' ) );
            
            if (!
$this->is_valid_for_use()){
                
$this->enabled false;
            }
        }

        public function 
admin_options() {

        
?>
        <h3><?php _e'Liqpay''woocommerce' ); ?></h3>
        
        <?php if ( $this->is_valid_for_use() ) : ?>
        
            <table class="form-table">
            <?php
                $this
->generate_settings_html();
            
?>
            </table>
            
        <?php else : ?>
        <div class="inline error"><strong><?php _e('Шлюз отключен''woocommerce'); ?></strong>: <?php _e('Liqpay не поддерживает валюты Вашего магазина.''woocommerce' ); ?></p></div>
        <?php
            
endif;
        }
        
        public function 
init_form_fields(){
            
$this->form_fields = array(
                
'enabled' => array(
                    
'title' => __'Включить/Отключить''woocommerce' ),
                    
'type' => 'checkbox',
                    
'label' => __'Включить''woocommerce' ),
                    
'default' => 'yes'
                                
),
                
'title' => array(
                    
'title' => __'Заголовок''woocommerce' ),
                    
'type' => 'text',
                    
'description' => __'Заголовок, который отображается на странице оформления заказа''woocommerce' ),
                    
'default' => 'Оплата картой',
                    
'desc_tip' => true,
                                ),
                
'description' => array(
                    
'title' => __'Описание''woocommerce' ),
                    
'type' => 'textarea',
                    
'description' => __'Описание, которое отображается в процессе выбора формы оплаты''woocommerce' ),
                    
'default' => __'Оплатить через электронную платежную систему Liqpay''woocommerce' ),
                ),
                
'merchant_id' => array(
                    
'title' => __'Merchant ID''woocommerce' ),
                    
'type' => 'text',
                    
'description' => __'Уникальный идентификатор магазина.''woocommerce' ),
                ),
                
'merchant_sig' => array(
                    
'title' => __'Подпись''woocommerce' ),
                    
'type' => 'text',
                    
'description' => __'Подпись для остальных операций''woocommerce' ),
                ),
            );
        }
        
        function 
is_valid_for_use(){
            if (!
in_array(get_option('woocommerce_currency'), array('RUB''UAH''USD'))){
                return 
false;
            }
        return 
true;
    }

        function 
process_payment($order_id){
                
$order = new WC_Order($order_id);
                return array(
                    
'result' => 'success',
                    
'redirect'    => add_query_arg('order'$order->idadd_query_arg('key'$order->order_keyget_permalink(woocommerce_get_page_id('pay'))))
                );
         }
        public function 
receipt_page($order){
            echo 
''.__('Спасибо за Ваш заказ, пожалуйста, нажмите кнопку ниже, чтобы заплатить.''woocommerce').'';
            echo 
$this->generate_form($order);
        }
        public function 
generate_form($order_id){
            global 
$woocommerce;
                        
            
$order = new WC_Order$order_id );
            
$action_adr "https://www.liqpay.com/api/pay";
            
            
$merchant_id 'i99748376587'//public key
            
$merchant_sig 'nynDcQz8KZqleOeYG400Bf1v1wSFDDxU6J3TullY'// private key            
            
$description 'Оплата за секретарські послуги'// за что берется оплата
            
$type 'buy'//buy - покупка, donate - пожертвование, subscribe - подписка
            
$currency 'UAH'//Валюта 
            
$order_id date("d/m/Y-H:i:s"); //id заказа
            
$return_url 'http://radema.org.ua/wp-content/plugins/liqpay-test/test_callback.php'//страница на которую вернется клиент
            
$server_url $return_url//страница на которую прийдет ответ от сервера
            
$amount '1'// формирование суммы к оплате
            
$sandbox 1//для теста-1, рабочий-0
        
            
$sign base64_encode(sha1(join('',compact(
            
'merchant_id',
            
'merchant_sig',
            
'description',
            
'type',
            
'currency',
            
'order_id',
            
'return_url',
            
'server_url',
            
'amount'
            
)),1));

            echo    
'<form id="liqpay" method="POST" action="https://www.liqpay.com/api/pay" accept-charset="utf-8">'.
                    
                    
'<input type="hidden" name="public_key" value="'$merchant_id .'" />'.
                    
'<input type="hidden" name="merchant_id" value="'$merchant_id .'" />'.                      
                    
'<input type="hidden" name="merchant_sig" value="'$merchant_sig .'" />'.
                    
'<input type="hidden" name="amount" value="'$amount .'" />'.
                    
'<input type="hidden" name="currency" value="'$currency .'" />'.
                    
'<input type="hidden" name="description" value="'$description .'" />'.
                    
'<input type="hidden" name="order_id" value="'$order_id .'" />'.
                    
'<input type="hidden" name="result_url" value="'$return_url .'" />'.
                    
'<input type="hidden" name="server_url" value="'$server_url .'" />'.
                    
'<input type="hidden" name="type" value="'$type .'" />'.
                    
'<input type="hidden" name="signature" value="'$sign .'" />'.
                    
'<input type="hidden" name="language" value="RU" />'.
                    
'<input type="hidden" name="sandbox" value="' $sandbox '" />'.
                    
                    
'<input type="submit" class="button alt" id="submit_liqpay_button" value="'.__('Сплатити''woocommerce').'" /> <a class="button cancel" href="'.$order->get_cancel_order_url().'">'.__('Відмовитися від оплати та повернутися в кошик''woocommerce').'</a>'."\n".
                    
'</form>';
                  
        }
    }
    function 
woocommerce_add_liqpay_gateway($methods) {
        
$methods[] = 'WC_Gateway_Liqpay';
        return 
$methods;
    }
    
    
add_filter('woocommerce_payment_gateways''woocommerce_add_liqpay_gateway' );
    
}
?>
WT George
Аватар пользователя WT George
Саша, ну заем вы мне

Саша, ну заем вы мне высылаете код вордпресса.? Даже на этом сайте (на Drupale) в API LiqPay не используются никакие модули или функции Друпала.

  1. скрипт пишется от руки и выкладывается в к./либо каталог сайта
  2. на к.л. странице сайта от вызывается

В его работе не участвует никаким образом CMS на которой сделан сайт. Просто, если надо предварительно взять к.л. переменные, к возможно (в нем) использование функций ядра сайта.

WT George
Аватар пользователя WT George
Саша,

Саша,

  • какой <input type="hidden" name="merchant_id" value="i99748376587" />?
  • какой <input type="hidden" name="merchant_sig" value="nynDcQz8KZqleOeYG400Bf1v1wSFDDxU6J3TullY" />?

Где Вы нашли этот мусор, что кормите Ликпэю?

не капайтесь в коде СМС.
Сделайте сначала голый скрипт без участия ядра (просто чтоб вызывался он со страницы сайта).
Для начала вообще переменные от руки поставте (типа <?php $amount=7?>). Правда с $order_id от руки не получиться, она должна постоянно меняться при каждом платеже.
Как он заработает, уже потом интегрируйте его в ядро - берите переменные что нужны для работы скипта из ядра.

DJ Alex
Аватар пользователя DJ Alex
Большое спасибо Вам за

Большое спасибо Вам за уделенное время.

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