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

  • Автор темы 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
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
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
pligin
Участник
Сообщения
3.654
Реакции
1.336
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
  • #10
MaxWatson написал(а):
зачем декодировать то, что должно быть передано в URL? обычно используют urlencode()
 
pligin
Участник
Сообщения
3.654
Реакции
1.336
  • #12
Проблема заключалась в использовании Standalone-приложения.
Для этих целей нужно создавать "Веб-сайт"
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху