Перейти к содержимому


Фотография

Как получить токен личного профиля?

Форум ZiSMO.biz
2
Сообщений в теме: 2

OFFLINE Отправлено

YOU-TOP
Активный
  • Онлайн:8д 18ч 50м
88

Годами делал это через https://vkserv.ru/api/tokenно сегодня вк его забанил. Имею в виду Kate Mobile.

Мне нужен токен с возможность рассылать сообщения. Другие варианты не работают.

 

Может кто еще знает какой сайт? За помощь скину 500 рублей.


Администрация форума не имеет отношения к пользователям форума и к публикуемой ими информации. Пользовательское соглашение
    • 0
  • Наверх
  • Ответить

OFFLINE Отправлено

ceg
Продвинутый
  • Онлайн:35д 14ч 12м
519

Напиши свой скрипт.
Пример:

здесь открываем окно авторизации и делаем редирект на созданную тобой страничку, например, 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

bd067630f5a7a5e5881ebff576d77937.png

    • 1
  • Наверх
  • Ответить

OFFLINE Отправлено

ceg
Продвинутый
  • Онлайн:35д 14ч 12м
519

Я смотрю zismo чуть очистил знаки. В строках между переменными добавить знак ИЛИ (по две вертикальные палки вместо слова ИЛИ): 

if (!$code ИЛИ !$state ИЛИ !$device_id)

 

 if (!$client_id ИЛИ !$client_secret ИЛИ !$code_verifier)

 

 


Сообщение отредактировал ceg: 04 08 2026 - 15:34

bd067630f5a7a5e5881ebff576d77937.png

    • 0
  • Наверх
  • Ответить



Напишите сообщение


  



1