Исправление работы GameCMS + ЮМани после 18.05.2026

Refresh

Скриптер
Участник
Сообщения
51
Реакции
13
Здравствуйте! В раздел веб не дает выложить, может кому-то будет полезно.

Проблема: перестали зачисляться платежи на счета пользователей GameCMS.

1779722259775.png


Я пофиксил для ЮМани. Во вложении сам файл (index.php), его нужно заменить по адресу /modules/purse/.

Сами изменения (с 99 строки):

Изменения:
++if(empty($_POST["amount"]) || empty($_POST["operation_id"]) || empty($_POST["label"]) || empty($_POST["sign"]) || empty($_POST["unaccepted"])) {
--if(empty($_POST["amount"]) || empty($_POST["operation_id"]) || empty($_POST["label"]) || empty($_POST["sha1_hash"]) || empty($_POST["unaccepted"])) {
        $Pm->paymentLog($payMethod, "empty data", pdo(), 0, 2);
        exit('Error: [empty data]');
    }

$amount    = clean($_POST['withdraw_amount'], 'float');
$payNumber = clean($_POST["label"], 'int');
$userId    = (int)clean(substr($payNumber, 0, 7), 'int');
++
++   $notificationParams = $_POST;
++   $sign = $notificationParams['sign'];
++    unset($notificationParams['sign']);
++    ksort($notificationParams, SORT_STRING);
++
++    $dataString = '';
++    foreach ($notificationParams as $key => $value) {
++        $encodedValue = rawurlencode($value);
++        if (strlen($dataString)) {
++            $dataString .= '&';
++        }
++        $dataString .= $key . '=' . $encodedValue;
++    }

++    $calculatedSign = hash_hmac('sha256', $dataString, $merchantsSettings->ya_key);

    if(
++        $sign != $calculatedSign

--        //sha1(
--        //    $_POST['notification_type']
--        //    . '&' . $_POST['operation_id']
--        //    . '&' . $_POST['amount']
--        //    . '&' . $_POST['currency']
--        //    . '&' . $_POST['datetime']
--        //    . '&' . $_POST['sender']
--        //    . '&' . $_POST['codepro']
--        //    . '&' . $merchantsSettings->ya_key
--        //    . '&' . $_POST["label"]
--        //) != $_POST['sign']
--
    ) {
 

Вложения

Последнее редактирование:
Здравствуйте! В раздел веб не дает выложить, может кому-то будет полезно.

Проблема: перестали зачисляться платежи на счета пользователей GameCMS.

Посмотреть вложение 1554

Я пофиксил для ЮМани. Во вложении сам файл (index.php), его нужно заменить по адресу /modules/purse/.

Сами изменения (с 99 строки):

Изменения:
++if(empty($_POST["amount"]) || empty($_POST["operation_id"]) || empty($_POST["label"]) || empty($_POST["sign"]) || empty($_POST["unaccepted"])) {
--if(empty($_POST["amount"]) || empty($_POST["operation_id"]) || empty($_POST["label"]) || empty($_POST["sha1_hash"]) || empty($_POST["unaccepted"])) {
        $Pm->paymentLog($payMethod, "empty data", pdo(), 0, 2);
        exit('Error: [empty data]');
    }

$amount    = clean($_POST['withdraw_amount'], 'float');
$payNumber = clean($_POST["label"], 'int');
$userId    = (int)clean(substr($payNumber, 0, 7), 'int');
++
++   $notificationParams = $_POST;
++   $sign = $notificationParams['sign'];
++    unset($notificationParams['sign']);
++    ksort($notificationParams, SORT_STRING);
++
++    $dataString = '';
++    foreach ($notificationParams as $key => $value) {
++        $encodedValue = rawurlencode($value);
++        if (strlen($dataString)) {
++            $dataString .= '&';
++        }
++        $dataString .= $key . '=' . $encodedValue;
++    }

++    $calculatedSign = hash_hmac('sha256', $dataString, $merchantsSettings->ya_key);

    if(
++        $sign != $calculatedSign

--        //sha1(
--        //    $_POST['notification_type']
--        //    . '&' . $_POST['operation_id']
--        //    . '&' . $_POST['amount']
--        //    . '&' . $_POST['currency']
--        //    . '&' . $_POST['datetime']
--        //    . '&' . $_POST['sender']
--        //    . '&' . $_POST['codepro']
--        //    . '&' . $merchantsSettings->ya_key
--        //    . '&' . $_POST["label"]
--        //) != $_POST['sign']
--
    ) {
спасибо (y)
 
Здравствуйте! В раздел веб не дает выложить, может кому-то будет полезно.

Проблема: перестали зачисляться платежи на счета пользователей GameCMS.

Посмотреть вложение 1554

Я пофиксил для ЮМани. Во вложении сам файл (index.php), его нужно заменить по адресу /modules/purse/.

Сами изменения (с 99 строки):

Изменения:
++if(empty($_POST["amount"]) || empty($_POST["operation_id"]) || empty($_POST["label"]) || empty($_POST["sign"]) || empty($_POST["unaccepted"])) {
--if(empty($_POST["amount"]) || empty($_POST["operation_id"]) || empty($_POST["label"]) || empty($_POST["sha1_hash"]) || empty($_POST["unaccepted"])) {
        $Pm->paymentLog($payMethod, "empty data", pdo(), 0, 2);
        exit('Error: [empty data]');
    }

$amount    = clean($_POST['withdraw_amount'], 'float');
$payNumber = clean($_POST["label"], 'int');
$userId    = (int)clean(substr($payNumber, 0, 7), 'int');
++
++   $notificationParams = $_POST;
++   $sign = $notificationParams['sign'];
++    unset($notificationParams['sign']);
++    ksort($notificationParams, SORT_STRING);
++
++    $dataString = '';
++    foreach ($notificationParams as $key => $value) {
++        $encodedValue = rawurlencode($value);
++        if (strlen($dataString)) {
++            $dataString .= '&';
++        }
++        $dataString .= $key . '=' . $encodedValue;
++    }

++    $calculatedSign = hash_hmac('sha256', $dataString, $merchantsSettings->ya_key);

    if(
++        $sign != $calculatedSign

--        //sha1(
--        //    $_POST['notification_type']
--        //    . '&' . $_POST['operation_id']
--        //    . '&' . $_POST['amount']
--        //    . '&' . $_POST['currency']
--        //    . '&' . $_POST['datetime']
--        //    . '&' . $_POST['sender']
--        //    . '&' . $_POST['codepro']
--        //    . '&' . $merchantsSettings->ya_key
--        //    . '&' . $_POST["label"]
--        //) != $_POST['sign']
--
    ) {
спасибо
 

Вложения

  • index.zip
    index.zip
    5,7 КБ · Просмотры: 7
Вот у Оли версия поновее была (версия движка: 3.665) ..

Во вложении, ее файлик для 3.665. А в первом сообщении было от нашей CMS (версия движка: 3.66)
Здравствуйте! Не подскажите как быть с этим кодом, ситуация такая же, не зачисляются платежи
Код:
if(isset($_GET['result_ya']) && $_GET['result_ya'] == 'get') {
    $payMethod = 'ya';

    if(empty($_POST["amount"]) || empty($_POST["operation_id"]) || empty($_POST["label"]) || empty($_POST["sign"]) || empty($_POST["unaccepted"])) {
        $Pm->paymentLog($payMethod, "empty data", $pdo, 0, 2);
        exit('Error: [empty data]');
    }

    $amount    = clean($_POST['withdraw_amount'], 'float');
    $payNumber = clean($_POST["label"], 'int');
    $userId    = (int)clean(substr($payNumber, 0, 7), 'int');

    if(
        sha1(
            $_POST['notification_type']
            . '&' . $_POST['operation_id']
            . '&' . $_POST['amount']
            . '&' . $_POST['currency']
            . '&' . $_POST['datetime']
            . '&' . $_POST['sender']
            . '&' . $_POST['codepro']
            . '&' . $bankConf->ya_key
            . '&' . $_POST["label"]
        ) != $_POST['sign']
    ) {
        $Pm->paymentLog($payMethod, "bad sign", $pdo, $payNumber, 2);
        exit("bad sign\n");
    } else {
        $userInfo = $Pm->getUser($pdo, $userId);
        if(empty($userInfo->id)) {
            $Pm->paymentLog($payMethod, "unknown user", $pdo, $userId, 2);
            exit('Error: [User does not exist]');
        } else {
            if($Pm->issetPay($pdo, $payMethod, $payNumber)) {
                exit('OK');
            }

            $playground = new Playground(pdo(), $conf);

            if($playground->is_bonuses()):
                $playground->add_bonuses($userInfo->id, $amount);
            endif;

            $Pm->doPayAction($pdo, $userInfo, $amount, $conf->bank, $payMethod, $payNumber, $messages['RUB']);
            exit('OK');
        }
    }
}
 

Вложения

  • index.txt
    index.txt
    28,6 КБ · Просмотры: 0
Здравствуйте! Не подскажите как быть с этим кодом, ситуация такая же, не зачисляются платежи
Взять вон тот файлик, во вложениях от 3.66 или 3.665. И скопировать абзац целиком


Код:
if(isset($_GET['result_ya']) && $_GET['result_ya'] == 'get') {
...
}
 
Насколько мне известно, стоит просто обновить движок и никаких проблем не будет =)
 
Взять вон тот файлик, во вложениях от 3.66 или 3.665. И скопировать абзац целиком


Код:
if(isset($_GET['result_ya']) && $_GET['result_ya'] == 'get') {
...
}
так и было сделано, но выдает ошибку в логах о неверной подписи и не начисляет на баланс аккаунта.
Версия движка: 6.0.4 (UNIGameCMS)
код:
if(isset($_GET['result_ya']) && $_GET['result_ya'] == 'get') {
    $payMethod = 'ya';

    if(empty($_POST["amount"]) || empty($_POST["operation_id"]) || empty($_POST["label"]) || empty($_POST["sign"]) || empty($_POST["unaccepted"])) {
        $Pm->paymentLog($payMethod, "empty data", $pdo, 0, 2);
        exit('Error: [empty data]');
    }

    $amount    = clean($_POST['withdraw_amount'], 'float');
    $payNumber = clean($_POST["label"], 'int');
    $userId    = (int)clean(substr($payNumber, 0, 7), 'int');

    if(
        sha1(
            $_POST['notification_type']
            . '&' . $_POST['operation_id']
            . '&' . $_POST['amount']
            . '&' . $_POST['currency']
            . '&' . $_POST['datetime']
            . '&' . $_POST['sender']
            . '&' . $_POST['codepro']
            . '&' . $bankConf->ya_key
            . '&' . $_POST["label"]
        ) != $_POST['sign']
    ) {
        $Pm->paymentLog($payMethod, "bad sign", $pdo, $payNumber, 2);
        exit("bad sign\n");
    } else {
        $userInfo = $Pm->getUser($pdo, $userId);
        if(empty($userInfo->id)) {
            $Pm->paymentLog($payMethod, "unknown user", $pdo, $userId, 2);
            exit('Error: [User does not exist]');
        } else {
            if($Pm->issetPay($pdo, $payMethod, $payNumber)) {
                exit('OK');
            }

            $playground = new Playground(pdo(), $conf);

            if($playground->is_bonuses()):
                $playground->add_bonuses($userInfo->id, $amount);
            endif;

            $Pm->doPayAction($pdo, $userInfo, $amount, $conf->bank, $payMethod, $payNumber, $messages['RUB']);
            exit('OK');
        }
    }
}
 
так и было сделано, но выдает ошибку в логах о неверной подписи и не начисляет на баланс аккаунта.
Версия движка: 6.0.4 (UNIGameCMS)
код:
if(isset($_GET['result_ya']) && $_GET['result_ya'] == 'get') {
    $payMethod = 'ya';

    if(empty($_POST["amount"]) || empty($_POST["operation_id"]) || empty($_POST["label"]) || empty($_POST["sign"]) || empty($_POST["unaccepted"])) {
        $Pm->paymentLog($payMethod, "empty data", $pdo, 0, 2);
        exit('Error: [empty data]');
    }

    $amount    = clean($_POST['withdraw_amount'], 'float');
    $payNumber = clean($_POST["label"], 'int');
    $userId    = (int)clean(substr($payNumber, 0, 7), 'int');

    if(
        sha1(
            $_POST['notification_type']
            . '&' . $_POST['operation_id']
            . '&' . $_POST['amount']
            . '&' . $_POST['currency']
            . '&' . $_POST['datetime']
            . '&' . $_POST['sender']
            . '&' . $_POST['codepro']
            . '&' . $bankConf->ya_key
            . '&' . $_POST["label"]
        ) != $_POST['sign']
    ) {
        $Pm->paymentLog($payMethod, "bad sign", $pdo, $payNumber, 2);
        exit("bad sign\n");
    } else {
        $userInfo = $Pm->getUser($pdo, $userId);
        if(empty($userInfo->id)) {
            $Pm->paymentLog($payMethod, "unknown user", $pdo, $userId, 2);
            exit('Error: [User does not exist]');
        } else {
            if($Pm->issetPay($pdo, $payMethod, $payNumber)) {
                exit('OK');
            }

            $playground = new Playground(pdo(), $conf);

            if($playground->is_bonuses()):
                $playground->add_bonuses($userInfo->id, $amount);
            endif;

            $Pm->doPayAction($pdo, $userInfo, $amount, $conf->bank, $payMethod, $payNumber, $messages['RUB']);
            exit('OK');
        }
    }
}
поддержки UNI нет на форуме,пишите разработчику.
 
Насколько мне известно, стоит просто обновить движок и никаких проблем не будет =)
При обновлении движка, обновляется часть файлов, которые у нас , к примеру, сильно модифицированы. Обновлять и потом переделывать каждый файл, даже с помощью нейронок - это огромная потеря времени.
Поэтому большое спасибо Сергею refresh за решение этой проблемы.
 

Кто просматривает тему

Назад
Верх