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

Refresh

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

Проблема: перестали зачисляться платежи на счета пользователей 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 КБ · Просмотры: 14
Вот у Оли версия поновее была (версия движка: 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 КБ · Просмотры: 2
Здравствуйте! Не подскажите как быть с этим кодом, ситуация такая же, не зачисляются платежи
Взять вон тот файлик, во вложениях от 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 за решение этой проблемы.
 
Для GameCMS 3.683. Не знаю подойдет для 3.68 или нет. Кидаю два файла в архиве
Index.php /models/purse/
YooMoney.php /inc/classes/gamecms/Merchants/
 

Вложения

кто может подкорректировать для версии 3.675?
 
кто может подкорректировать для версии 3.675?
Юмани, может повторять оповещения, если при ошибке отправлять код ответа 500.

Вот мой фикс. Без лишнего.
Поправлен код и автоматом Юмани раз в час повторит оповещения о платеже в этом случае, в текущем виде повтора не будет т.к код ответа 200 по дефолту.
P.S. Тест был на 665 версии, так что думаю и под твою подойдёт и остальные.
 

Вложения

  • index.zip
    index.zip
    5,5 КБ · Просмотры: 1

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

Назад
Верх