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

Авторизация одноклассники?

Делаю авторизацию через одноклассники и похоже там все ни так легко, как было это с Вконтакте.

// Параметры приложения
$OAuth_OK = ['uid' => '123456789', 'key' => 'PUBKEY', 'secret' => 'SECRETKEY', 'redirect' => 'http://yadro/sign-ok',];

// Формируем ссылку для авторизации
$okparams = array(
    'client_id'     => $OAuth_OK['uid'],
    'scope'         => 'VALUABLE_ACCESS,LONG_ACCESS_TOKEN,GET_EMAIL',
    'response_type' => 'token',
    'redirect_uri'  => $OAuth_OK['redirect']
);

// Получаем ссылку
echo '<a href="https://connect.ok.ru/oauth/authorize?'.urldecode(http_build_query($okparams)).'">Одноклассники</a>';


Если вконтакте получаем в ответе код и дальше с ним работаем, получая токен и т.д, то тут сразу получаем все....

// После успешной авторизации получаем code
if(isset($_GET['code'])){
  
  $params = array(
    'client_id'     => $clientId,
    'client_secret' => $clientSecret,
    'code'          => $_GET['code'],
    'redirect_uri'  => $redirectUri
);

$content = file_get_contents('https://oauth.vk.com/access_token?' . urldecodehttp_build_query($params)));

$response = json_decode($content);
 
 
$token = $response -> access_token; // Токен
$expiresIn = $response -> expires_in; // Время жизни токена
$userId = $response -> user_id; // ID  пользователя
$email = $response -> email; // EMAIL пользователя
 
  
$_SESSION['vkuid'] = $userId;
$_SESSION['token'] = $token;
$_SESSION['email'] = $email;

}


В ответе с ok.ru я получаю что то вроде этого:
access_token=gdfsgdfsgsdfgsfg&session_secret_key=dsffasfasfa&expires_in=1800

и как с этим дальше работать я не понимаю...

Очень интересно увидеть примеры на php, так как в официальной документации ее нет. Не подскажите как дальше мне работать? С Curl или можно так же как с вк?
  • Вопрос задан
  • 753 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
be_a_dancer
@be_a_dancer
Backend/Fullstack Developer
Для примера, есть либы в интернете. Это первый рандомный пример.
Ответ написан
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
разобрался в принципе, остался всего один вопрос:

я получаю ответ такого типа:
localhost/ok.php#access_token=1234567890&session_secret_key=1234567890&expires_in=1800

а нужно получить:
localhost/ok.php?access_token=1234567890&session_secret_key=1234567890&expires_in=1800

как мне это сделать?)))
---
С первым вариантом, у меня естественно нет данных, а со вторым все работает, но менять каждый раз при авторизации это бредятина.


Вы пытаетесь получить токен клиентской авторизации, а использовать как серверную.
spoiler
5cbf7ce0b4c1c002812322.png


Если я правильно помню то загвоздка в том что LONG_ACCESS_TOKEN не дают для серверов или какие-то другие права для некоторых методов апи.

Так вот это решается только headless браузером, либо получайте токен на фронте через JS.
Ответ написан
Ваш ответ на вопрос

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

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