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. Подпись запроса не верна.
Все перерыл, не пойму как это исправить, помогите пожалуйста(
  • Вопрос задан
  • 2528 просмотров
Решения вопроса 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)
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы