• Майская распродажа!

    Впереди теплые праздники, цены таят на глазах! Поздравляем вас и дарим вам специальный купон.
    Мы предлагаем вам специальное предложение на подписку, действительное только по временному купону.
    Обнови свой сервер с лучшими сборками, плагинами и картами!

    Купон
    MAY20
  • Мы теперь в Discord

    Мы рады объявить, что теперь у нас есть сервер Discord. В честь этого мы проводим розыгрыш!
    Теперь вы можете легко связаться с нами и другими участниками сообщества,
    обмениваться идеями и получать обновления о нашей деятельности.

  • EXCLUSIVE ⚡

    Гость, покупая подписку, ты увеличишь свои доходы в разы!
    Мы делаем самые актуальные сборки, переводим лучшие приватные плагины, а так-же обновляем их и фиксим любые ошибки.
    Дешевле, чем студии и другие разработчики!

  • Приветствуем тебя Гость!⁣

    Недавно на форуме? Не знаешь как можно скачивать ресурсы?
    Для этого нужно лишь зарегистрировать на форуме, и получать доступ к профессиональным плагинам, оптимизированным настройкам.
    Здесь только самое лучшее.

  • Обновленный «Mc-market.ru»

    Теперь у вас есть возможность продавать свои товары на Minecraft маркете.
    Это отличная возможность для вас начать зарабатывать на своих навыках и труде.
    Начни продавать сейчас!

  • Интеграция ChatGPT

    Администраторы Minecraft могут столкнуться с различными проблемами, связанными с работой серверов и кодом.
    Однако, благодаря инновационным технологиям, искусственный интеллект может помочь решить эти проблемы.
    Реши свою любую проблему сейчас!

This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Помощь с ошибкой 400: Подпись запроса не верна в UnitPay

Harroybay

Will be fine
DEVELOPER
Пользователь
21 Ноя 2020
616
44
28
Всем привет, создал эту тему только для тех, у кого ошибка: 400 В UnitPay

Касается это не только Авто-Донат движков, а вообще всех движков.

Эта статья может вам не помочь, если вы не криворукий, и всё поймёте в этой статье

Первое, что можно сделать, обратится в тех. поддержку UnitPay с просьбой отключить проверку цифровой подписи
Они могут вам отключить как на время, так и на всегда. Но могут и вообще не отключать. Всё зависит от вашего аккаунта в UnitPay.
Если вы отключите проверку, то ничего не сломается.

Второе, что можно сделать, вправлять код. С 1 апреля 2020 года UnitPay сменила свой API, а многие движки ещё не перешли на новое API, поэтому, вам придётся вправлять код самим.

Первый код: /application/donate.php (Зависит от движка)
Код с оформлением (BB-коды):
<?php

$secretKey = 'Секретный ключ проекта';
$publicKey = 'Публичный ключ проекта';

$tpl->LoadView( "donate" );

if ( isset( $_POST['act'] ) && $_POST['act'] == 'confirm' )
{
    function getFormSignature( $account, $currency, $desc, $sum, $secretKey )
    {
        return hash( 'sha256', $account . '{up}' . $currency . '{up}' . $desc . '{up}' . $sum . '{up}' . $secretKey );
    }

    $account = isset( $_POST['account'] ) ? $_POST['account'] : '';
    $currency = isset( $_POST['currency'] ) ? $_POST['currency'] : '';
    $desc = isset( $_POST['desc'] ) ? $_POST['desc'] : '';
    $sum = isset( $_POST['sum'] ) ? $_POST['sum'] : '';

    $tpl->Set( 'publicKey', $publicKey );
    $tpl->Set( 'account', $account );
    $tpl->Set( 'currency', $currency );
    $tpl->Set( 'desc', $desc );
    $tpl->Set( 'sum', $sum );
    $tpl->Set( 'signature', getFormSignature( $account, $currency, $desc, $sum, $secretKey ) );
    $tpl->Block( 'prepare', false );
    $tpl->Block( 'confirm' );
}
else
{
    $tpl->Block( 'prepare' );
    $tpl->Block( 'confirm', false );
}

$tpl->Build( "content" );

?>

Второй код: /templates/default/donate.tpl (Зависит от движка)
Код с оформлением (BB-коды):
[prepare]
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
    $(function ()
    {
        function calculateBonuses()
        {
            var coinPrice = parseFloat($('#unitpayForm #coinPrice').val());
            var coins = parseInt($('#unitpayForm #coins').val());
            if (isNaN(coins) || isNaN(coinPrice) || coins <= 0) {
                $('#unitpayForm #sum').val('');
                return;
            }
            var price = coins * coinPrice;
            if (price > 1) {
                price = 1;
            }
            $('#unitpayForm #sum').val(price);
        }
        $('#unitpayForm input#coins').keyup(function () {
            calculateBonuses();
        });
        calculateBonuses();
        $('#unitpayForm').submit(function(){
            var sum = parseFloat($('#unitpayForm #sum').val());
            if (isNaN(sum) || sum <= 0 || sum > 1) {
                alert('Неверная сумма платежа');
                return false;
            }
        });
    });
</script>
<form id="unitpayForm" action="/donate" method="post">
    <input type="hidden" name="act" value="confirm">
    <label for="account">Ник персонажа:</label> <input type="text" value="" name="account" required="required" id="account"><br>
    <label for="coins">Количество монет:</label>
    <input type="text" id="coins" name="coins" value="1" required="required"><br>
    <input type="hidden" id="sum" name="sum" value="">
    <input type="hidden" name="currency" value="RUB">
    <input type="hidden" id="coinPrice" name="coinPrice" value="1">
    <input type="hidden" name="desc" value="Покупка внутриигровой валюты">
    <input type="submit" class="btn" value="Оплатить">

</form>
[/prepare]
[confirm]
<form id="unitpayForm" action="https://unitpay.money/pay/{publicKey}/card" method="post">

    <label for="account">Ник персонажа: {account}</label><br>
    <label>Пожертвование: {sum} {currency}</label>
  
    <input type="hidden" name="account" value="{account}"><br>
    <input type="hidden" name="currency" value="{currency}">
    <input type="hidden" name="sum" value="{sum}">
    <input type="hidden" name="desc" value="{desc}">
    <input type="hidden" name="signature" value="{signature}">
    <input type="submit" class="btn" value="Подтвердить">

</form>
[/confirm]

Эти 2 кода, могут не совпадать с вашим движком, т.к написаны на TPL
Т.к он на tpl, и писался под GameCMS (Движок для игр VALVe) то вам придётся его вправлять.

Третий способ, как исправить данную ошибку, попробовать обновить SECRET KEY

Может быть у вас оно поможет, кто знает.

Дополнение к статье:

Исправление данной ошибки может повлиять данный скрипт, написанный на пыхе (php)
PHP:
function getFormSignature($account, $currency, $desc, $sum, $secretKey) {
    $hashStr = $account.'{up}'.$currency.'{up}'.$desc.'{up}'.$sum.'{up}'.$secretKey;
    return hash('sha256', $hashStr);
}

$sign = getFormSignature($name, $currency, $desc, $money, $secret_key);

$url = '[URL='https://unitpay.money/pay/.$public_key.?sum=.$money.&account=.$name.¤cy=.$currency.&desc=.$desc.&signature=.$sign;']https://unitpay.money/pay/'.$public_key.'?sum='.$money.'&account='.$name.'¤cy='.$currency.'&desc='.$desc.'&signature='.$sign;[/URL]

header('Location: '.$url);

Дополнение к статье:

Во многих случаях может быть это из-за того, что UnitPay не поддерживает символику по типу: #
Если вы зайдёте в конфиг UnitPay, и найдёте эту #, замените её на №
Например:
Не правильно: Оплата заказа #
Правильно: Оплата заказа №

Так-же это может быть из-за того, что не совпадают валюты, например у вас прописано RUB, а в ключе например $ Dollar, или Euro
Вам так-же надо будет это заменить на RUB.
Конечно, можно убрать эту строчку, и UnitPay сам подставит валюту (без значения RUB и т.д) Но, могут быть ошибки, так что лучше этого не делать. Если у вас $currency = 'RUB';
То можете попробовать убрать эту строчку, или заменить RUB на вашу валюту

Но, это не единственные решения данной проблемы.

Проблема может вызвана из-за отправки запроса не тем методом.
Например, у вас стоит GET, а надо POST


Ну, я всё объяснил понятно (я так думаю), если что-то не понятно, комментаторы в студию под эту статью.
 
Последнее редактирование: