• Время улучшать сервер! Аккаунт EXCLUSIVE ⚡ навсегда - можно купить за 589 рублей!⁣

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

    Улучшить аккаунт

  • Аккаунт Premium+ теперь можно купить навсегда!⁣

    Гость, заплати всего один, раз и получай самый новые Сборки и Обновленные плагины одним из первых. ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ ⁣ Помогайте развивать форум донатами, и уникальным контентом. Продавай свои сборки, зарабатывай, учись, ты можешь все!

    Улучшить аккаунт

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

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

    Зарегистрироваться

  • Мы теперь Вконтакте

    Если вы ведете свою страницу в социальной сети, вам необходимо подписать на нашу группу, здесь будут все анонсы новых платных и бесплатных сборок,плагинов, скриптов. Здесь вы сможете найти, спонсоров, и просто друзей!

    Присоединиться в группу

  • Русскоязычный "MarketPlace"

    Не хватает денег? Или просто хочешь подзаработать? Или купить качественные товары с обновлениеми? Настоящие профессионалы создали идеальные условия. (Сайт находится в режиме тестирования)

    [Перейти на сайт]

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

Harroybay

Will be fine
DEVELOPER
Пользователь
Регистрация
21 Ноя 2020
Сообщения
560
Оценка реакций
41
Баллы
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
1610697317626.png
Может быть у вас оно поможет, кто знает.

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

Исправление данной ошибки может повлиять данный скрипт, написанный на пыхе (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


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

Помочь проекту!

Собрано
"12,160.00" ₽
Цель
"15,000.00" ₽

Новые сообщения

Последние ресурсы