Разработка доски объявлений под ключ › Boxcode › Ошибки › Не обновляется баланс на сайте после оплаты через unitpay
- В этой теме 13 ответов, 2 участника, последнее обновление 3 года назад сделано
Евгений.
-
АвторСообщения
-
05.01.2020 в 10:17 #2290
Евгений
УчастникНе обновляется баланс на сайте после оплаты через unitpay
Всем привет, давно меня здесь не было)))
Есть проблемка:
Не обновляется баланс на сайте после оплаты через unitpay, что может быть?
Прописал в настройках обработчика платежей на сайте unitpay.ru http://сайт.ru/systpayment/unitpay/drpayment.php, при проверке вылетет ошибка {«error»:{«code»:-32000,»message»:»ошибка с данными»}} и поэтому не возможно сделать оплату…. но если в обработчике платежей убрать ссылку, оплата проходит, но при этом на моем сайте пользователю деньги не приходят, то есть баланс автоматически не обновляется, куда копать? Я полагаю, что проблема может быть в файле drpayment.php который в \www\systpayment\unitpay
Подскажите пожалуйста что и где его подправить. Версия доски 8.5Заранее спасибо за помощь.
\www\systpayment\unitpay\drpayment.php:
<pre class=»lang:php decode:true » ><?php
// файл
include_once(«../../config/config.php»);
include_once(«../init_work.php»);/*
$t = «данные GET: \r\n»;
if ( !empty( $_GET ) && sizeof($_GET) )
{
//foreach ( $_GET as $key => $value )
// $t.= $key . «=>».$value.»;\r\n»;
$t .= var_export($_GET, true);
}
db_error(«Скрипт оплаты услуг (unitpay). «,$t);
*/$mas_set = array(
array(«method»,»get»,»method»,»text»,true,true,»listv»,»check,pay»,false,false,»all»,0),//Индикатор предварительного запроса
/*
array(«params»,»post»,»params»,»text»,true,false,false,false,false,false,»all»,»»),//кошелек продавца
array(«LMI_PAYMENT_NO»,»post»,»LMI_PAYMENT_NO»,»text»,true,false,false,false,false,false,»all»,»0″),
array(«LMI_PAYMENT_AMOUNT»,»post»,»LMI_PAYMENT_AMOUNT»,»text»,true,false,false,false,false,false,»all»,»0″),//Сумма, которую заплатил покупатель. Дробная часть отделяется точкой.
array(«LMI_MODE»,»post»,»LMI_MODE»,»text»,true,false,false,false,false,false,»all»,»0″),
array(«LMI_PAYER_WM»,»post»,»LMI_PAYER_WM»,»text»,true,false,false,false,false,false,»all»,»0″),
array(«LMI_PAYER_PURSE»,»post»,»LMI_PAYER_PURSE»,»text»,true,false,false,false,false,false,»all»,»»),
array(«LMI_SYS_INVS_NO»,»post»,»LMI_SYS_INVS_NO»,»text»,true,false,false,false,false,false,»all»,»»),
array(«LMI_SYS_TRANS_NO»,»post»,»LMI_SYS_TRANS_NO»,»text»,true,false,false,false,false,false,»all»,»»),
array(«LMI_SYS_TRANS_DATE»,»post»,»LMI_SYS_TRANS_DATE»,»text»,true,false,false,false,false,false,»all»,»»),array(«LMI_HASH»,»post»,»LMI_HASH»,»text»,true,false,false,false,false,false,»all»,»»),
array(«comment»,»post»,»comment»,»text»,true,false,false,false,false,false,»all»,»»),
*/
);$mas_set_params = array(
array(«unitpayId»,»numeric»,false),
array(«account»,»text»,true),
array(«sum»,»numeric»,true),
array(«profit»,»numeric»,false),
array(«phone»,»text»,false),
array(«paymentType»,»text»,false),
array(«operator»,»text»,false),
array(«date»,»text»,false),
array(«sign»,»text»,true),);
$url_site = «http://».$_SERVER[«SERVER_NAME»].set_dir_from_path($_SERVER[«SCRIPT_NAME»],2).»/»;
$dbcnx=@$obj_baz->connectBaz($dbhost,$dbuser,$dbpasswd,$dbname);
if ( !$dbcnx ) write_answer_sp(1,»невозможно подключится к базе данных»);$rez_control_data=$obj_control_data->processing_one_group($mas_set);
$mas_inbox = $rez_control_data[3];
$mas_status = $rez_control_data[5];$get_params = array();
$data_params = array();
$is_check_data_params = false;if ( !empty($_GET[«params»]) && is_array($_GET[«params»]) && sizeof($_GET[«params»]) )
{
$get_params = $_GET[«params»];//var_dump($get_params);
$is_data = true;
foreach ( $mas_set_params as $one_init_v )
{
$v = false;
if ( isset($get_params[$one_init_v[0]]) )
$v = trim($get_params[$one_init_v[0]]);if ( !$v && $one_init_v[2] )
{
$is_data = false;
break;
}if ( $one_init_v[1] == «numeric» )
{
if ( $v === false || ( $v !== «» && !is_numeric($v) ) )
{
$is_data = false;
break;
}
}$data_params[$one_init_v[0]] = ($v === false ? «» : $v);
}
if ( $is_data ) $is_check_data_params = true;
}
if ( $rez_control_data[0] && !$rez_control_data[1] && $is_check_data_params )
{
//данные обнаружены$method = $mas_inbox[«method»];
$is_check_query = ( $method == «pay» ? false : true );$m = $get_params;
unset ($m[«sign»]);
ksort($m);$part1 = implode(«»,$m);
$part1 .= $masConfig[«SP_SECRET_KEY_UNITPAY»];$contr = md5( $part1 );
//$contr_test = md5( $part1 . $mas_inbox[«test»] . SECRET_KEY_A1LITE );
if ( $contr == $data_params[«sign»] )
{if ( !mb_strlen( $data_params[«account»] ) ) write_answer_sp(1,»не заданы идентификационные параметры»);
$d_order = explode(«:»,mb_strtolower($data_params[«account»]));
if ( !(sizeof($d_order) >= 2 ) ) write_answer_sp(1,»ошибка с инициализационными данными.»);$mas_data = $d_order;
unset($mas_data[0]);
$mas_data = array_values($mas_data);if ( $mas_data[0] == 7 )
$name_modul = «addmoney»;
else
{
$name_modul = work_init_moduls::get_name_modul($mas_data[0]);
if ( !$name_modul ) write_answer_sp(1,»ошибка с инициализацией модуля»);
}
$mas_data[0] = $name_modul;if ( !( sizeof( $mas_data ) > 0 && gen_methods_systpayment::check_name_modul($mas_data[0]) ) )
write_answer_sp(1,»ошибка с инициализационными данными.»);//echo($mas_data[0].» «.$mas_data[1]);
$path_dr_modul = gen_methods_systpayment::path_include_modul_sp($mas_data[0],»unitpay»);
if ( !$path_dr_modul )
{
write_answer_sp(1,»ошибка с платежным драйвером модуля.»);
}$payment_amount = $data_params[«sum»];//сумма оплаченная пользователем
$payment_num_order = $d_order[0];//номер заказаinclude($path_dr_modul);
//list($error,$error_text) = $obj_proc->operationServiceAdv($mas_data[0],$mas_data[1]);
}
else
{
write_answer_sp(1,»контрольные ключи не совпали»);
}}
else
{
write_answer_sp(1,»ошибка с данными»);
}write_answer_sp($error,$error_text);
function write_answer_sp($error,$error_text)
{
$answer=»»;if ($error==1)
{
db_error(«Скрипт оплаты услуг (unitpay)»,$error_text);$answer = ‘{«error»: {«code»: -32000, «message»: «‘.codeHtmlText($error_text).'»}}’;
//$answer.= «error»;//$error_text;
}
else
{$answer = ‘{«result»: {«message»: «Услуга успешно оказана!»}}’;
}echo($answer);
exit();
}-
Тема изменена 3 года назад пользователем
Евгений.
05.01.2020 в 15:03 #2292Евгений
УчастникКстати забыл написать, что проверял также на 10.1 проблема таже:
{«error»: {«code»: -32000, «message»: «ошибка с данными»}}
Магазин отклонил платеж: ошибка с даннымиЗначит проблема была изначально в 10.1.
Извините код тот, что выше спрятать под спойлер не смог.
05.01.2020 в 23:33 #2293sarkis
ХранительЗдравствуйте. Уточните, изменяли ли код , т.к на 10 версии данной проблемы я не увидел. Возможно вы что-то неверно настраиваете в админке
06.01.2020 в 05:32 #2294Евгений
УчастникЗдравствуйте, если речь о файле который лежит в systpayment\unitpay\drpayment.php, то нет я его не менял, это оригинал с 10.1 версии. Думал может с 8.5 несовместимо, но для теста я потом установил с нуля 10.1, настроил в админ-панели платежную систему и проблема с платежом один в один, но кстати на сайте unitpay.ru в личном кабенете при проверке ссылки http://сайт.ru/systpayment/unitpay/drpayment.php пишет ОК, но… при тестовом платеже уже вылетает ошибка {“error”: {“code”: -32000, “message”: “ошибка с данными”}}
И еще я обратил внимание на закомментированную 122ую строку — //$contr_test = md5( $part1 . $mas_inbox[«test»] . SECRET_KEY_A1LITE ); там указано A1LIT вместо UNITPAY видимо его криво исправили до этого. Такое ощущение что drpayment.php от платежки a1liteНастройки в админке:
Меню — Основные настройки — Изменить — Система оплаты unitpay.ru
Уникальный код формы оплаты системы платежей unitpay.ru — 112233-aadvv (PUBLIC KEY с unitpay.ru)
Секретный ключ в системе unitpay.ru — 435348r77ef65w67fitut4634874ttw (SECRET KEY с unitpay.ru)
Использование системы unitpay.ru для пополнения баланса пользователя — использоватьНастройки в unitpay.ru:
Обработчик платежей (ОК) — http://сайт.ru/systpayment/unitpay/drpayment.php
Переадресация — Fail URL — http://сайт.ru/fail_payment.html
Success URL — http://сайт.ru/success_payment.html
Проверка подписи при создании платежа отключена, хотя я ее включал тоже ничего не менялось.Всю голову сломал, был бы очень признателен за помощь, может есть пример рабочего файла для теста, что бы убедится что а проблема в нем.
06.01.2020 в 12:40 #2295sarkis
ХранительДо этого, на своей 8.5 версии вы использовали файл из 10 версии, или был другой файл ?
06.01.2020 в 13:52 #2299sarkis
ХранительЕсли вы просто перенесли файлы из 10й версии, то это не могло работать изначально. Метод интеграции 8.5 немного отличается от 10.1 (обычный перенос файлов вряд ли сработает).
Если вы намерены искать решение, то вам нужно обратить внимание на то, какие параметры передаются в unitpay и какие вы получаете от unitpay .
Далее, нужно входящие параметры сравнить с теми, которые указаны в файле drpayment.php.
Вот их список:-
method
unitpayId
account
sum
profit
phone
paymentType
operator
date
sign06.01.2020 в 14:01 #2300Евгений
Участникво как, куда делось мое сообщение?))))
нет нет, я НЕ переносил просто эти файлы.
В 8.5 все свои родные файлы не замененные из 10.1 в них правлен сам код для платежной системы unitpay, я в ручную каждый файл и код сравнивал и проверял. И тем более если брать в расчет установленную с нуля доску 10.1 в которой совсем нет файлов от 8.5, их просто там нет, то там же тоже не работает, 10.1 тоже не хочет в unitpay работать. поэтому и полагаю что проблема кроется в этом одном единственном файле drpayment.php06.01.2020 в 14:02 #2301Евгений
УчастникДо этого, на своей 8.5 версии вы использовали файл из 10 версии, или был другой файл ?
Продублирую еще раз:
До этого я пользовался только интеркассой, потом как они там прекратили принимать для оплаты карты, решил попробовать unitpay.На своей 8.5 использовал из 10ой версии файл, ну как использовал, он видимо и изначально был не рабочий, так как платежей на сайте не было с год или больше, я и не обращал внимания на это, и недавно на unitpay.ru решил сам протестировать оплату, ну и наткнулся на проблему.
Если на unitpay.ru в ЛК в «обработчике платежей» не указывать URL http://сайт.ru/systpayment/unitpay/drpayment.php то оплата с моего сайта проходит без проблем, но в доске объявлений баланс не обновляется так как не указан путь на URL http://сайт.ru/systpayment/unitpay/drpayment.php, а вот если это строку прописать то, после ввода номера карты для оплаты и нажатия кнопки «оплатить» выходит сообщение — «Магазин отклонил платеж: ошибка с данными».
Потом решил протестировать доску 10.1, установил ее с нуля, мало ли, настроил ее, настроил в админ-панеле систему оплаты unitpay.ru, и опять такая же проблема, ошибка при проверке drpayment.php из unitpay.ru с личного кабинета, сравнил ВСЕ абсолютно ВСЕ файлы в папках движков 8.5 и 10.1 (день потерял на это) и они все совершенно одинаковые там где в скриптах чтото связано с платежной системой unitpay. В общем на 10.1 проблема один в один, что на 8.5. вот как то так.
На скрине ниже видно, что сам файл drpayment.php проверку проходит, то есть зеленым написано «ОК», а при тестовом запросе вылазит ошибка, та, что на втором скрине. Так же ради эксперимента я подменял файл drpayment.php с исправлениями в коде для unitpay от других платежных систем например от интеркассы, но там сразу вместо зеленой «ОК» красным писалось об ошибке.
06.01.2020 в 14:13 #2302Евгений
УчастникЕсли вы просто перенесли файлы из 10й версии, то это не могло работать изначально. Метод интеграции 8.5 немного отличается от 10.1 (обычный перенос файлов вряд ли сработает).
Если вы намерены искать решение, то вам нужно обратить внимание на то, какие параметры передаются в unitpay и какие вы получаете от unitpay .
Далее, нужно входящие параметры сравнить с теми, которые указаны в файле drpayment.php.
Вот их список:-
method
unitpayId
account
sum
profit
phone
paymentType
operator
date
signВот проверил их, что в них не так? подскажите пожалуйста своим профессиональным глазом
$mas_set_params = array(
array(«unitpayId»,»numeric»,false),
array(«account»,»text»,true),
array(«sum»,»numeric»,true),
array(«profit»,»numeric»,false),
array(«phone»,»text»,false),
array(«paymentType»,»text»,false),
array(«operator»,»text»,false),
array(«date»,»text»,false),
array(«sign»,»text»,true),или вот так:
method
Line 25: array(«method»,»get»,»method»,»text»,true,true,»listv»,»check,pay»,false,false,»all»,0),//Индикатор предварительного запроса
Line 109: $method = $mas_inbox[«method»];
Line 110: $is_check_query = ( $method == «pay» ? false : true );
Line 145: if ( !( sizeof( $mas_data ) > 0 && gen_methods_systpayment::check_name_modul($mas_data[0]) ) )
Line 150: $path_dr_modul = gen_methods_systpayment::path_include_modul_sp($mas_data[0],»unitpay»);unitpayId
Line 44: array(«unitpayId»,»numeric»,false),account
Line 45: array(«account»,»text»,true),
Line 127: if ( !mb_strlen( $data_params[«account»] ) ) write_answer_sp(1,»не заданы идентификационные параметры»);
Line 129: $d_order = explode(«:»,mb_strtolower($data_params[«account»]));sum
Line 46: array(«sum»,»numeric»,true),
Line 157: $payment_amount = $data_params[«sum»];//сумма оплаченная пользователемprofit
Line 47: array(«profit»,»numeric»,false),phone
Line 48: array(«phone»,»text»,false),paymentType
Line 49: array(«paymentType»,»text»,false),operator
Line 50: array(«operator»,»text»,false),date
Line 35: array(«LMI_SYS_TRANS_DATE»,»post»,»LMI_SYS_TRANS_DATE»,»text»,true,false,false,false,false,false,»all»,»»),
Line 51: array(«date»,»text»,false),sign
Line 52: array(«sign»,»text»,true),
Line 113: unset ($m[«sign»]);
Line 124: if ( $contr == $data_params[«sign»] )-
Ответ изменён 3 года назад пользователем
Евгений.
06.01.2020 в 14:26 #2304sarkis
Хранительвы должны проверять данные, которые приходят от unitpay при обращении к скрипту drpayment.php и сравнивать с кодом. Пункт на скрине «Запрос к серверу».
06.01.2020 в 14:42 #2305Евгений
Участникспасибо, буду смотреть… но если не получится буду приставать еще)))
06.01.2020 в 21:28 #2306Евгений
УчастникВ общем задолбался я чтото )))
Проблему с ошибкой решил, оплата проходит, а вот на сайте баланс не обновляется, капец какой-то.
Психанул))), снес нафиг 8.5, установил 10.1, настроил, и такая же фигня, ошибки нет, оплата на unitpay проходит, а на сайте в ЛК баланс как был 0 руб. так и есть, т.е. не обновляется.Опять снес 10.1, скачал с офф. сайта boxcode.ru «Бесплатный скрипт интернет-магазина» чисто для теста установил, настроил, иииии там все работает, платеж проходит, баланс в ЛК обновляется сразу. Что за фигня не пойму.
Кстати ошибка в 8.5 и в 10.1 пропала только после исправления в файле drpayment.php 183 строки, а именно:
if ($error==0)
изначально там вместо нуля стояла единичка, в общем отключил я это дело.
Больше ничего не правил. И после этого проверка на unitpay.ru проходит без проблем:
{«result»:{«message»:»Услуга успешно оказана!»}}Подскажите пожалуйста какой файл отвечает за обновление баланса на сайте? Может его еще проверить, может он косячный?
Блин по логике ну в 10.1 всё своё, всё стандартно и по умолчанию после установки движка, по идее там то должен баланс обновляться после оплаты… почему же тоже тогда там не работает не понимаю.
06.01.2020 в 21:31 #2307sarkis
Хранительза баланс отвечает несколько файлов. Ваш нужно искать в цепочке, в которой проблема .
Первый файл лежит тут
systpayment\unitpay\addmoney.php-
Ответ изменён 3 года назад пользователем
sarkis.
06.01.2020 в 21:32 #2308Евгений
Участникспасибо за быстрый ответ, не ожидал прям
-
Тема изменена 3 года назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.