Разработка доски объявлений под ключ Boxcode Ошибки Не обновляется баланс на сайте после оплаты через unitpay

В этой теме 13 ответов, 2 участника, последнее обновление Евгений Евгений 1 месяц, 2 нед. назад.

Просмотр 14 сообщений - с 1 по 14 (из 14 всего)
  • Автор
    Сообщения
  • #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();
    }

    • Эта тема была изменена 1 месяц, 2 нед. назад пользователем Евгений Евгений.
    #2292
    Евгений
    Евгений
    Участник

    Кстати забыл написать, что проверял также на 10.1 проблема таже:
    {“error”: {“code”: -32000, “message”: “ошибка с данными”}}
    Магазин отклонил платеж: ошибка с данными

    Значит проблема была изначально в 10.1.

    Извините код тот, что выше спрятать под спойлер не смог.

    #2293
    sarkis
    sarkis
    Хранитель

    Здравствуйте. Уточните, изменяли ли код , т.к на 10 версии данной проблемы я не увидел. Возможно вы что-то неверно настраиваете в админке

    #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
    Проверка подписи при создании платежа отключена, хотя я ее включал тоже ничего не менялось.

    Всю голову сломал, был бы очень признателен за помощь, может есть пример рабочего файла для теста, что бы убедится что а проблема в нем.

    #2295
    sarkis
    sarkis
    Хранитель

    До этого, на своей 8.5 версии вы использовали файл из 10 версии, или был другой файл ?

    #2299
    sarkis
    sarkis
    Хранитель

    Если вы просто перенесли файлы из 10й версии, то это не могло работать изначально. Метод интеграции 8.5 немного отличается от 10.1 (обычный перенос файлов вряд ли сработает).

    Если вы намерены искать решение, то вам нужно обратить внимание на то, какие параметры передаются в unitpay и какие вы получаете от unitpay .

    Далее, нужно входящие параметры сравнить с теми, которые указаны в файле drpayment.php.
    Вот их список:

      method
      unitpayId
      account
      sum
      profit
      phone
      paymentType
      operator
      date
      sign
    #2300
    Евгений
    Евгений
    Участник

    во как, куда делось мое сообщение?))))
    нет нет, я НЕ переносил просто эти файлы.
    В 8.5 все свои родные файлы не замененные из 10.1 в них правлен сам код для платежной системы unitpay, я в ручную каждый файл и код сравнивал и проверял. И тем более если брать в расчет установленную с нуля доску 10.1 в которой совсем нет файлов от 8.5, их просто там нет, то там же тоже не работает, 10.1 тоже не хочет в unitpay работать. поэтому и полагаю что проблема кроется в этом одном единственном файле drpayment.php

    #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 от других платежных систем например от интеркассы, но там сразу вместо зеленой “ОК” красным писалось об ошибке.

    скрин 1
    скрин 2

    #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”] )

    • Этот ответ был изменен 1 месяц, 2 нед. назад от Евгений Евгений.
    #2304
    sarkis
    sarkis
    Хранитель

    вы должны проверять данные, которые приходят от unitpay при обращении к скрипту drpayment.php и сравнивать с кодом. Пункт на скрине “Запрос к серверу”.

    #2305
    Евгений
    Евгений
    Участник

    спасибо, буду смотреть… но если не получится буду приставать еще)))

    #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 всё своё, всё стандартно и по умолчанию после установки движка, по идее там то должен баланс обновляться после оплаты… почему же тоже тогда там не работает не понимаю.

    #2307
    sarkis
    sarkis
    Хранитель

    за баланс отвечает несколько файлов. Ваш нужно искать в цепочке, в которой проблема .
    Первый файл лежит тут
    systpayment\unitpay\addmoney.php

    • Этот ответ был изменен 1 месяц, 2 нед. назад от sarkis sarkis.
    #2308
    Евгений
    Евгений
    Участник

    спасибо за быстрый ответ, не ожидал прям

Просмотр 14 сообщений - с 1 по 14 (из 14 всего)

Для ответа в этой теме необходимо авторизоваться.