Задать вопрос
@Deman1

Как сделать проверку цифровой подписи приложения ВКонтакте?

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

Мне нужно сгенерировать цифровую подпись, и вк даёт на пример кода который не работает Пример
$sign = ""; 

foreach ($request->getParams() as $key => $param) { 

    if ($key == 'hash' || $key == 'sign') continue; 

    $sign .=$param; 

} 

$secret = 'SECRET_KEY'; 

$sig = $secret ? hash_hmac('sha256', $sign, $secret) : "";

Но к сожалению php не знает что за функция getParams() и $request null
Ошибка: Fatal error: Uncaught Error: Call to a member function getParams() on null in index.php:4 Stack trace: #0 {main} thrown in index.php on line 4

Порывшись в инете я не фига нормального не нашел кроме этого кода
$url = "https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$parsed_url = parse_url($url, PHP_URL_QUERY);   
parse_str($parsed_url,$request);

$sign = ""; 
foreach ($request as $key => $param) { 

    if ($key == 'hash' || $key == 'sign') continue; 

    $sign .=$param; 

} 
$secret = 'Защищенный_Ключ'; 
$sig = $secret ? hash_hmac('sha256', $sign, $secret) : ""; 
$result = ($sig === $_GET['sign']) ? "Сходятся" : "Не сходятся";

Человек который сделал его у него получилось но он оказался опять же не рабочий или он его скинул не весь, так как $_GET['sign'] имеет null и не передаётся вк по этому я решил проверять с $sign но там код который содержит 326 символов, а ключ который генерируется в $sig он 64 символов.

Прошу помогите это решить, пожалуйста дайте рабочий код который сгенерирует мне правильный код для проверки цифровой подписи.
  • Вопрос задан
  • 260 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега PHP
♬♬
замените
foreach ($request->getParams() as $key => $param) {

на
foreach ($_REQUEST as $key => $param) {

Пример моего кода, который сейчас проверил, подписи совпадают:
$sign = "";
	
	foreach($_REQUEST AS $key => $param) {
	
	    if ($key == 'hash' || $key == 'sign') continue;
	
	    $sign .=$param;
	
	}
	
	$secret = '3iiyZNDFaXgR6yZMxK'; // Настройки приложения – Защищённый ключ
	
	$sig = $secret ? hash_hmac('sha256', $sign, $secret) : ""; 
	
	if( $sig === $_REQUEST['sign']) {
		echo "Подписи совпали.";
	} else {
		echo "Разные подписи, не хорошо.";
	}
Ответ написан
Ваш ответ на вопрос

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

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