KoVaLsKy 59 Опубликовано 23 марта, 2017 Жалоба Share Опубликовано 23 марта, 2017 Итак. ПРосят пофиксить неработающий модуль интеркассы. Начинаю все проверять, логи, все дела и.... че нахожу то. Модуль оперирует переменными (например) if(MODULE_PAYMENT_IK_SHOP_ID !== $ik_co_id) die('error: ik_co_id'); а $ik_co_id - откуда берется то? Т.е проблема в том, что $ik_* переменные не определены и пусты там вверху манипуляции с массивом $_POST ведутся. Так они внутри функции, которая возвращает код авторизации. Как она работает то хоть у кого-то? Еще есть там сточка $orderTotal = number_format($vamPrice->CalculateCurrEx($order->info['total'], $ikCurrency), 2, '.', ''); Идем в класс order находим info Проверяем, что там у нас в total и, о Боги strip_tags($order_total['text']), Текст будем передавать в функцию вывода цены? наверное total_value должно быть? Сам файл <?php /*------------------------------------------------------------------------------ $Id: ik.php 1310 2010-05-06 19:20:03 VaM $ VaM Shop - open source ecommerce solution http://vamshop.ru http://vamshop.com Copyright (c) 2010 VaM Shop ----------------------------------------------------------------------------- based on: (c) 2005 Vetal (robox.php,v 1.48 2003/05/27); metashop.ru Released under the GNU General Public License ------------------------------------------------------------------------------*/ function get_var($name, $default = 'none') { return (isset($_GET[$name])) ? $_GET[$name] : ((isset($_POST[$name])) ? $_POST[$name] : $default); } require('includes/application_top.php'); require (DIR_WS_CLASSES.'order.php'); function ikGetSign($post) { $aParams = array(); foreach ($post as $key => $value) { if (!preg_match('/ik_/', $key)) continue; $aParams[$key] = $value; } unset($aParams['ik_sign']); $key = MODULE_PAYMENT_IK_SECRET_KEY; ksort ($aParams, SORT_STRING); array_push($aParams, $key); $signString = implode(':', $aParams); $sign = base64_encode(md5($signString, true)); return $sign; } // logging //$fp = fopen('ik.log', 'a+'); //$str=date('Y-m-d H:i:s').' - '; //foreach ($_POST as $vn=>$vv) { // $str.=$vn.'='.$vv.';'; //} //fwrite($fp, $str."\n"); //fclose($fp); // Проверка id магазина if(MODULE_PAYMENT_IK_SHOP_ID !== $ik_co_id) die('error: ik_co_id'); $sign = ikGetSign($_POST); if ($ik_sign === $sign && $ik_inv_st == 'success') { // данные заказа $order = new order((int)$ik_pm_no); $ikCurrency = (MODULE_PAYMENT_IK_CURRENCY == 'RUB') ? 'RUR' : MODULE_PAYMENT_IK_CURRENCY; global $vamPrice; $orderTotal = number_format($vamPrice->CalculateCurrEx($order->info['total'], $ikCurrency), 2, '.', ''); // Проверяем стоимость if($ik_am != $orderTotal OR $ik_am <= 0) die("error: ik_am"); $sql_data_array = array ( 'orders_status' => MODULE_PAYMENT_IK_ORDER_STATUS_ID ); vam_db_perform('orders', $sql_data_array, 'update', "orders_id='".(int)$ik_pm_no."'"); $sql_data_arrax = array ( 'orders_id' => (int)$ik_pm_no, 'orders_status_id' => MODULE_PAYMENT_IK_ORDER_STATUS_ID, 'date_added' => 'now()', 'customer_notified' => '0', 'comments' => 'InterKassa accepted this order payment '.vam_db_prepare_input($ik_pw_via) ); vam_db_perform('orders_status_history', $sql_data_arrax); echo 'OK'.$ik_pm_no; } else die('error: ik_sign or ik_inv_st'); Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 23 марта, 2017 Жалоба Share Опубликовано 23 марта, 2017 По-моему, этот модуль добавлялся кем-то из пользователей. Лично я не в курсе. Да и наверняка у интеркассы и протокол обмена данными уже поменялся. Не только ik.ru придётся править, но и платёжную форму. Ссылка на сообщение Поделиться на другие сайты
KoVaLsKy 59 Опубликовано 23 марта, 2017 Автор Жалоба Share Опубликовано 23 марта, 2017 нене. все остальное работает на ура. //$fp = fopen('ik.log', 'a+'); //$str=date('Y-m-d H:i:s').' - '; //foreach ($_POST as $vn=>$vv) { // $str.=$vn.'='.$vv.';'; //} В лог гупит как надо. Нужно понять, как из $_POST сделать одноименные переменные. На выхлопе лог выглядит примерно так ik_co_id=57d123412341234123412341324; ik_co_prs_id=1234123412341234; ik_inv_id=4324141434141; ik_inv_st=success; ik_inv_crt=2017-03-19 22:35:59; ik_inv_prc=2017-03-19 22:38:09; ik_trn_id=22660431; ik_pm_no=1; ik_pw_via=privat24_liqpay_merchant3_uah; ik_am=1.08; ik_co_rfn=1.0800; ik_ps_price=1.13; ik_cur=UAH; ik_desc=Order-1; ik_sign=пывапывапывапывапывапыNg==; extract($_POST); помогает. Но не до конца. с итоговой суммой смотрю Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 23 марта, 2017 Жалоба Share Опубликовано 23 марта, 2017 23 минуты назад, KoVaLsKy сказал: extract($_POST); помогает. Но не до конца. с итоговой суммой смотрю Так же как я /yandex.php, к примеру, сверху добавить: function get_var($name, $default = 'none') { return (isset($_GET[$name])) ? $_GET[$name] : ((isset($_POST[$name])) ? $_POST[$name] : $default); } и уже в коде использовать get_var("ik_co_id") Хотя смысла ведь особого и нет в этой обёртке, можно сразу использовать $_POST["ik_co_id"] и т.д. Ссылка на сообщение Поделиться на другие сайты
KoVaLsKy 59 Опубликовано 23 марта, 2017 Автор Жалоба Share Опубликовано 23 марта, 2017 Ловим работающий файл. Ахтунг. Запись логов не закомментирована <?php /*------------------------------------------------------------------------------ $Id: ik.php 1310 2010-05-06 19:20:03 VaM $ VaM Shop - open source ecommerce solution http://vamshop.ru http://vamshop.com Copyright (c) 2010 VaM Shop ----------------------------------------------------------------------------- based on: (c) 2005 Vetal (robox.php,v 1.48 2003/05/27); metashop.ru Released under the GNU General Public License ------------------------------------------------------------------------------*/ $txt_mail = ''; function get_var($name, $default = 'none') { return (isset($_GET[$name])) ? $_GET[$name] : ((isset($_POST[$name])) ? $_POST[$name] : $default); } require('includes/application_top.php'); require (DIR_WS_CLASSES.'order.php'); function ikGetSign($post) { $aParams = array(); foreach ($post as $key => $value) { if (!preg_match('/ik_/', $key)) continue; $aParams[$key] = $value; } unset($aParams['ik_sign']); $key = MODULE_PAYMENT_IK_SECRET_KEY; ksort ($aParams, SORT_STRING); array_push($aParams, $key); $signString = implode(':', $aParams); $sign = base64_encode(md5($signString, true)); return $sign; } // logging $sign = ikGetSign($_POST); extract($_POST); // Проверка id магазина if(MODULE_PAYMENT_IK_SHOP_ID !== $ik_co_id) die('error: ik_co_id'); $txt_mail .= '$sig = '.$ik_sign .' $sign = '. $sign .' $ik_inv_st = '. $ik_inv_st; $fp = fopen('ik.log', 'a+'); $str=date('Y-m-d H:i:s').' - '; foreach ($_POST as $vn=>$vv) { $str.=$vn.'='.$vv.';'; } // данные заказа $order = new order((int)$ik_pm_no); $ikCurrency = (MODULE_PAYMENT_IK_CURRENCY == 'RUB') ? 'RUR' : MODULE_PAYMENT_IK_CURRENCY; global $vamPrice; $orderTotal = number_format($order->info['total_value'], 2, '.', ''); $ik_am = number_format($ik_am, 2, '.', ''); $str.= 'ot='.$orderTotal.' $order->info[total_value]='.$order->info['total_value'] .'; $ikCurrency'. $ikCurrency.' $ik_pm_no='.$ik_pm_no.' $orderTotal2='.$orderTotal2; fwrite($fp, $str."\n"); fclose($fp); if ($ik_sign === $sign && $ik_inv_st == 'success') { // Проверяем стоимость //$txt_mail .= '$ik_am = '.$ik_am.' $orderTotal = '.$orderTotal; if($ik_am != $orderTotal OR $ik_am <= 0) die("error: ik_am"); $sql_data_array = array ( 'orders_status' => MODULE_PAYMENT_IK_ORDER_STATUS_ID ); vam_db_perform('orders', $sql_data_array, 'update', "orders_id='".(int)$ik_pm_no."'"); $sql_data_arrax = array ( 'orders_id' => (int)$ik_pm_no, 'orders_status_id' => MODULE_PAYMENT_IK_ORDER_STATUS_ID, 'date_added' => 'now()', 'customer_notified' => '0', 'comments' => 'InterKassa accepted this order payment '.vam_db_prepare_input($ik_pw_via) ); vam_db_perform('orders_status_history', $sql_data_arrax); echo 'OK'.$ik_pm_no; } else{ die('error: ik_sign or ik_inv_st'); } Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 23 марта, 2017 Жалоба Share Опубликовано 23 марта, 2017 Спасибо, добавил в текущий код. Лог закомментировал. ik.php Ссылка на сообщение Поделиться на другие сайты
KoVaLsKy 59 Опубликовано 23 марта, 2017 Автор Жалоба Share Опубликовано 23 марта, 2017 Всегда пожалуйста Ссылка на сообщение Поделиться на другие сайты
eugenem 11 Опубликовано 5 апреля, 2017 Жалоба Share Опубликовано 5 апреля, 2017 Что-то не работает модуль. Не передается сумма, в переменной ik_am 0.00 Где может быть ошибка? Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 5 апреля, 2017 Жалоба Share Опубликовано 5 апреля, 2017 3 часа назад, eugenem сказал: Что-то не работает модуль. Не передается сумма, в переменной ik_am 0.00 Где может быть ошибка? Там идёт пересчёт в валюту, указанную в настройках модуля. По умолчанию - гривна, код валюты UAH т.е. в Админке - Разное - Валюты должна присутствовать эта валюта, с кодом UAH Что б пересчёт работал. Либо можно просто в /includes/modules/payment/ik.php поментять: $TotalAmount = number_format($vamPrice->CalculateCurrEx($order->info['total'], MODULE_PAYMENT_IK_CURRENCY), 2, '.', ''); на: $TotalAmount = number_format($order->info['total'], 2, '.', ''); Что б никаких пересчётов не было, а просто выводилась сумма заказа. Ссылка на сообщение Поделиться на другие сайты
eugenem 11 Опубликовано 5 апреля, 2017 Жалоба Share Опубликовано 5 апреля, 2017 Да, спасибо, в магазине одна валюта - рубль, заменил код, все пошло. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 5 апреля, 2017 Жалоба Share Опубликовано 5 апреля, 2017 Не за что Ссылка на сообщение Поделиться на другие сайты
eugenem 11 Опубликовано 6 апреля, 2017 Жалоба Share Опубликовано 6 апреля, 2017 Еще вопрос такой - а должен ли этот модуль менять статус заказа при оплате? Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 6 апреля, 2017 Жалоба Share Опубликовано 6 апреля, 2017 7 часов назад, eugenem сказал: Еще вопрос такой - а должен ли этот модуль менять статус заказа при оплате? Выше Kovalsky как раз писал об этом, что по умолчанию /ik.php не менял статус и выложил свой исправленный вариант /ik.php Он писал, что его файл меняет статус. Ссылка на сообщение Поделиться на другие сайты
eugenem 11 Опубликовано 7 апреля, 2017 Жалоба Share Опубликовано 7 апреля, 2017 ага, ок, тогда надо потестировать... Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 7 апреля, 2017 Жалоба Share Опубликовано 7 апреля, 2017 1 час назад, eugenem сказал: ага, ок, тогда надо потестировать... Напишите как раз, работает или нет. Я то сейчас интеркассу проверить нет возможности. Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения