РЕШЕНО Авторизация через ВК

  • Автор темы MaxWatson
  • Дата начала
Статус
В этой теме нельзя размещать новые ответы.
MaxWatson
Местный
Сообщения
33
Реакции
1
Всем привет, кто делал авторизацию на сайте через ВК? Посмотрите пожалуйста.
Вообщем, токен не получаю , а получаю {"error":"invalid_grant","error_description":"Code is invalid or expired."}.
Сам сайт указывает на строчку в файле 36. вот она
$token = json_decode(file_get_contents('https://oauth.vk.com/access_token' . '?' . urldecode(https_build_query($vk_params))), true);
PHP:
<?php

if (!empty($_SESSION['user'])) {
    header("Location: /account/earn/links");
}

$time = time();
$data = array();

$config = new config();

$ip = func::clear($_SERVER['REMOTE_ADDR']);
$meta =func::clear($_SERVER['HTTP_USER_AGENT']);

$vk_url = 'http://oauth.vk.com/authorize';

$vk_params = array(
    'client_id' => $config->vk_client_id,
    'redirect_uri' => $config->vk_redirect_uri,
    'scope' => 'email,photos',
    'response_type' => 'code'
);

$data['vk_auth'] = $vk_url . "?" . urldecode(http_build_query($vk_params));

if (isset($_GET['code'])) {
    $result = false;

    $vk_params = array(
        'client_id' => $config->vk_client_id,
        'client_secret' => $config->vk_client_secret,
        'code' => $_GET['code'],
        'redirect_uri' => $config->vk_redirect_uri
    );
      //ВОТ ДО СЮДА ДОХОДИТ, А ДАЛЬШЕ НЕ ИДЁТ***
    $token = json_decode(file_get_contents('https://oauth.vk.com/access_token' . '?' . urldecode(https_build_query($vk_params))), true);

    if (isset($token['access_token'])) {
        $vk_params = array(
            'user_ids' => $token['user_id'],
            'fields' => 'user_id,first_name,last_name,photo_100',
            'access_token' => $token['access_token']
        );

        $userInfo = json_decode(file_get_contents('https://api.vk.com/method/users.get?&v=5.0' . '?' . urldecode(http_build_query($vk_params))), true);
        if (isset($userInfo['response'][0]['id'])) {
            $userInfo = $userInfo['response'][0];
            $result = true;
        }
    }

    if ($result) {

        $uid = $userInfo['id'];
        $email = $token["email"];
        $first_name = $userInfo['first_name'];
        $last_name = $userInfo['last_name'];
        $screen_name = $first_name . ' ' . $last_name;
        $photo_100 = $userInfo['photo_100'];

        $ref_1 = 0;
 

        $db->Query("SELECT * FROM users WHERE uid = '{$uid}'");
        $user_data = $db->FetchArray();
        
 
        if($user_data['ban'] == '2'){
            die(header('location: /ban'));
        }
        $db->Query("SELECT * FROM lider WHERE id = '1'");
$lider_data = $db->FetchArray();
$lider = $lider_data['user_id'];


$ref_1 = $lider;
$ref_2 = 0;
$ref_3 = 0;
        if (isset($_COOKIE['referer']) && !empty($_COOKIE['referer'])) {
            $ref = func::clear($_COOKIE['referer'], 'int');

            $db->Query("SELECT * FROM users WHERE id = '{$ref}'");
            if ($db->NumRows() > 0) {
                $db->Query("SELECT * FROM users_ref WHERE user_id = '{$ref}'");
                $ref_dat = $db->FetchArray();
                
                
                    $ref_1 = $ref;
                
                
                $db->Query("UPDATE users SET refs = refs + 1 WHERE id = '{$ref_1}'");
            }
        }

        $db->Query("SELECT id, uid FROM users WHERE uid = {$uid}");
        if ($db->NumRows() > 0) {
            $user = $db->FetchArray();
            $id = $user['id'];
            $_SESSION['user'] = $id;
            $db->Query("INSERT INTO auth (user_id,ip,time,meta) VALUES ('{$id}','{$ip}','{$time}','{$meta}')");
            $db->Query("UPDATE users SET email = '{$email}', screen_name = '{$screen_name}', photo_100 = '{$photo_100}', ip = '{$ip}' WHERE id = '{$id}'");
            header('location: /account/earn/links');
        } else {
            if (isset($_COOKIE['httpref'])) {
                $httpref = func::clear($_COOKIE['httpref']);
            } else $httpref = '0';
            
            
            $db->Query("INSERT INTO users (uid,email,screen_name,photo_100,ip,date_reg)
        VALUES ('{$uid}','{$email}','{$screen_name}','{$photo_100}','{$ip}','{$time}')");
            $id = $db->LastInsert();
            $db->Query("INSERT INTO users_conf (user_id,httpref) VALUES ('{$id}','{$httpref}')");
            $db->Query("INSERT INTO users_ref (user_id,ref_1,to_ref_1)
        VALUES ('{$id}','{$ref_1}','0')");
            $_SESSION['user'] = $id;

            $db->Query("INSERT INTO auth (user_id,ip,time,meta) VALUES ('{$id}','{$ip}','{$time}','{$meta}')");

            header('location: /account/earn/links');
        }
    }
}

$ok_url = 'http://www.odnoklassniki.ru/oauth/authorize';
$ok_params = array(
    'client_id'     => $config->ok_client_id,
    'response_type' => 'code',
    'redirect_uri'  => $config->ok_redirect_uri
);

$data['ok_auth'] = $ok_url . '?' . urldecode(http_build_query($ok_params));

$fb_url = 'https://www.facebook.com/v2.11/dialog/oauth';

$fb_params = array(
    'client_id'     => $config->fb_client_id,
    'redirect_uri'  => $config->fb_redirect_uri,
    'response_type' => 'code',
    'scope'         => 'email'
);

$data['fb_auth'] = $fb_url.'?'.urldecode(http_build_query($fb_params));

new gen('login', $data);
Warning: file_get_contents(https://oauth.vk.com/access_token?client_id=7013609&client_secret=mBqng5M0F9zBrdqz7P20&code=eda417aabf55f953e2&redirect_uri=https://www.seosam.ru/login): failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized in /home/c/co18383/SeoSam/public_html/controllers/_loginCtrl.php on line 36
 
APTEMOH
Участник
Сообщения
889
Реакции
256
Telegram
APTEMOH
MaxWatson написал(а):
"error_description":"Code is invalid or expired."
Еще раз отправьте запрос на авторизацию.
Если ситуация повторится, то скрипт не получает CODE от ВК.
 
pligin
Участник
Сообщения
3.654
Реакции
1.336
Telegram
pligin
APTEMOH написал(а):
Еще раз отправьте запрос на авторизацию.
Если ситуация повторится, то скрипт не получает CODE от ВК.
он получает CODE (в URL видно)
MaxWatson написал(а):
Код:
https://oauth.vk.com/access_token?client_id=7013609&client_secret=mBqng5M0F9zBrdqz7P20&code=eda417aabf55f953e2&redirect_uri=https://www.seosam.ru/login
 
MaxWatson
Местный
Сообщения
33
Реакции
1
временный я получаю, да.
Но не понимаю почему, он не идёт дальше 36 строчки в коде.
Всё прописано,приложение настроено.
 
pligin
Участник
Сообщения
3.654
Реакции
1.336
Telegram
pligin
MaxWatson написал(а):
urldecode(https_build_query($vk_params)))
http_build_query — Генерирует URL-кодированную строку запроса (НЕ https!!! )
urldecode — Декодирование URL-кодированной строки
1. ошибка в синтаксисе
2. сначала кодируешь, потом декодируешь и на выхлопе то, что было первоначально
 
MaxWatson
Местный
Сообщения
33
Реакции
1
pligin написал(а):
http_build_query — Генерирует URL-кодированную строку запроса (НЕ https!!! )
urldecode — Декодирование URL-кодированной строки
1. ошибка в синтаксисе
2. сначала кодируешь, потом декодируешь и на выхлопе то, что было первоначально
PHP:
 $token = json_decode(file_get_contents('https://oauth.vk.com/access_token' . '?' . urldecode(http_build_query($vk_params))), true);
Всё ровно не пашет=(
 
pligin
Участник
Сообщения
3.654
Реакции
1.336
Telegram
pligin
pligin
Участник
Сообщения
3.654
Реакции
1.336
Telegram
pligin
pligin написал(а):
2. сначала кодируешь, потом декодируешь и на выхлопе то, что было первоначально
нахрен я это писал...
 
MaxWatson
Местный
Сообщения
33
Реакции
1
pligin написал(а):
и
PHP:
$token = json_decode(file_get_contents('https://oauth.vk.com/access_token' . '?' . http_build_query($vk_params)), true);
тоже?
Тоже, не робит.
 
pligin
Участник
Сообщения
3.654
Реакции
1.336
Telegram
pligin
  • #10
MaxWatson написал(а):
зачем декодировать то, что должно быть передано в URL? обычно используют urlencode()
 
pligin
Участник
Сообщения
3.654
Реакции
1.336
Telegram
pligin
  • #12
Проблема заключалась в использовании Standalone-приложения.
Для этих целей нужно создавать "Веб-сайт"
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху