Годами делал это через https://vkserv.ru/api/tokenно сегодня вк его забанил. Имею в виду Kate Mobile.
Мне нужен токен с возможность рассылать сообщения. Другие варианты не работают.
Может кто еще знает какой сайт? За помощь скину 500 рублей.
Отправлено 04 08 2026 - 14:15
Годами делал это через https://vkserv.ru/api/tokenно сегодня вк его забанил. Имею в виду Kate Mobile.
Мне нужен токен с возможность рассылать сообщения. Другие варианты не работают.
Может кто еще знает какой сайт? За помощь скину 500 рублей.
Отправлено 04 08 2026 - 15:29
Напиши свой скрипт.
Пример:
здесь открываем окно авторизации и делаем редирект на созданную тобой страничку, например, vk/oauth_callback. $client_id, $client_secret пишем свои.
$code_verifier = bin2hex(random_bytes(32));
$code_challenge = rtrim(strtr(base64_encode(hash('sha256', $code_verifier, true)), '+/', '-_'), '=');
$state = bin2hex(random_bytes(32));
$_SESSION['vk_oauth_client_id'] = $client_id;
$_SESSION['vk_oauth_client_secret'] = $client_secret;
$_SESSION['vk_code_verifier'] = $code_verifier;
$_SESSION['vk_oauth_state'] = $state;
$redirect_uri = 'https://example.com/vk/oauth_callback';
$scope = 'wall photos video groups';
$auth_url = 'https://id.vk.ru/authorize?' . http_build_query([
'client_id' => $client_id,
'redirect_uri' => $redirect_uri,
'response_type' => 'code',
'scope' => $scope,
'code_challenge' => $code_challenge,
'code_challenge_method' => 'S256',
'state' => $state,
]);
header('Location: ' . $auth_url);
exit();
на страничке vk/oauth_callback пишем обработку для получения токена
$code = $_GET['code'] ?? null;
$state = $_GET['state'] ?? null;
$device_id = $_GET['device_id'] ?? null;
if (!$code !$state !$device_id) {
$error = 1; $errorText = 'Не удалось получить код авторизации от VK ID';
} else {
if (!isset($_SESSION['vk_oauth_state']) $state !== $_SESSION['vk_oauth_state']) {
$error = 1; $errorText = 'Несоответствие state (CSRF)';
} else {
$client_id = $_SESSION['vk_oauth_client_id'] ?? 0;
$client_secret = $_SESSION['vk_oauth_client_secret'] ?? '';
$code_verifier = $_SESSION['vk_code_verifier'] ?? '';
unset($_SESSION['vk_oauth_client_id'], $_SESSION['vk_oauth_client_secret'], $_SESSION['vk_code_verifier'], $_SESSION['vk_oauth_state']);
if (!$client_id !$client_secret !$code_verifier) {
$error = 1; $errorText = 'Отсутствуют параметры в сессии';
} else {
$redirect_uri = 'https://example.com/vk/oauth_callback';
$token_url = 'https://id.vk.ru/oauth2/auth';
$params = [
'grant_type' => 'authorization_code',
'client_id' => $client_id,
'client_secret' => $client_secret,
'code' => $code,
'code_verifier' => $code_verifier,
'device_id' => $device_id,
'redirect_uri' => $redirect_uri,
'state' => $state,
];
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $token_url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/x-www-form-urlencoded'],
CURLOPT_POSTFIELDS => http_build_query($params),
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode !== 200) {
$error = 1; $errorText = 'Ошибка обмена кода на токены';
} else {
$token_data = json_decode($response, true);
if (isset($token_data['access_token']) && isset($token_data['refresh_token'])) {
$access_token = $token_data['access_token'];
$refresh_token = $token_data['refresh_token'];
} else {
$error = 1; $errorText = 'В ответе нет access_token или refresh_token';
}
}
}
}
}
Сообщение отредактировал ceg: 04 08 2026 - 15:31
Отправлено 04 08 2026 - 15:34
Я смотрю zismo чуть очистил знаки. В строках между переменными добавить знак ИЛИ (по две вертикальные палки вместо слова ИЛИ):
if (!$code ИЛИ !$state ИЛИ !$device_id)
if (!$client_id ИЛИ !$client_secret ИЛИ !$code_verifier)
Сообщение отредактировал ceg: 04 08 2026 - 15:34
