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

Статус
В этой теме нельзя размещать новые ответы.

MaxWatson

Местный
Всем привет, кто делал авторизацию на сайте через ВК? Посмотрите пожалуйста.
Вообщем, токен не получаю , а получаю {"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
 

pligin

Команда форума
Администратор
Еще раз отправьте запрос на авторизацию.
Если ситуация повторится, то скрипт не получает CODE от ВК.
он получает CODE (в URL видно)
Код:
https://oauth.vk.com/access_token?client_id=7013609&client_secret=mBqng5M0F9zBrdqz7P20&code=eda417aabf55f953e2&redirect_uri=https://www.seosam.ru/login
 

MaxWatson

Местный
временный я получаю, да.
Но не понимаю почему, он не идёт дальше 36 строчки в коде.
Всё прописано,приложение настроено.
 

pligin

Команда форума
Администратор
urldecode(https_build_query($vk_params)))
http_build_query — Генерирует URL-кодированную строку запроса (НЕ https!!! )
urldecode — Декодирование URL-кодированной строки
1. ошибка в синтаксисе
2. сначала кодируешь, потом декодируешь и на выхлопе то, что было первоначально
 

MaxWatson

Местный
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

Команда форума
Администратор
Проблема заключалась в использовании Standalone-приложения.
Для этих целей нужно создавать "Веб-сайт"
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху