gikami
@gikami
web программист

Ошибка 400. Подпись запроса не верна UnitPay, как решить?

Никак не могу понять в чем ошибка в формировании ссылки и подписи, может кто сталкивался с данной проблемой у этой платежной системы?
Вот код генерации ссылки и подписи (Не добавлял ключи из аккаунта).
private function getUrl($sum, $user_id, $order_id)
    {
		$account = $user_id;
		$secretKey = 'Ключ для подписи';
		$desc = 'Оплата заказа ' . $order_id;
		$currency = 'RUB';
		$hashStr = hash('sha256', $account.'{up}'.$currency.'{up}'.$desc.'{up}'.$sum.'{up}'.$secretKey);
        return 'https://unitpay.ru/pay/111111-11111/card?sum=' . $sum . '&account=' . $account . '&desc=' . $desc . '&signature=' . $hashStr;
    }

Формируется ссылка типа того: https://unitpay.ru/pay/111111-11111/card?sum=500&a...
При переходе вылезает ошибка Ошибка 400. Подпись запроса не верна.
Все перерыл, не пойму как это исправить, помогите пожалуйста(
  • Вопрос задан
  • 2474 просмотра
Решения вопроса 1
gikami
@gikami Автор вопроса
web программист
В общем, компался я и копался, в итоге решил свою проблему, было еще куча ошибок, но вроде исправил.
Дело было 1. Из-за того что в ссылке было указано RUB а в ключе нет.
2. Порядок добавления параметров.
3. Описание заказа, # <- символ не пропускала платежка эта, пришлось заменить на №. Пробовал шифровать, но не получалось с первым символом.
Все, вот рабочий код:
private function getUrl($sum, $user_id, $order_id)
    {
		
		$desc = 'Оплата заказа №' . $order_id;

		$hashStr = hash('sha256', $order_id.'{up}'.$desc.'{up}'.$sum.'{up}'.Config::SECRET_KEY);
        return 'https://unitpay.ru/pay/'.Config::PUBLIC_KEY.'/card?account=' . $order_id . '&desc=' . $desc . '&sum=' . $sum . '&signature=' . $hashStr;
    }
Я тут вывожу ссылку на форму, вы можете по своему переделать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@KuznetsovK
Fullstack developer
Не знаю как у конкретно этой системы, но при формировании подписи запроса, обычно важен порядок аргументов ( в алфовитном порядке ).

К тому же, 400 ошибка может быть из за того, что запрос отправляете не тем методом (GET вместо POST)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы