Esempio n. 1
0
 public function UserLoginCode()
 {
     global $code, $access_token, $debugLog, $debugMode, $vkApi_id, $vkApi_key, $valid_user, $uid, $first_name, $last_name, $screen_name, $photo_50, $photo_200;
     $tempDebugMode = $debugMode;
     // Сохранение глобального значения во временную переменную
     $debugMode = false;
     // Внутренний вкл/выкл. режима отладки
     static $funcName = 'VkApi::LoginCode';
     // Название функции для логов
     Debug::Addlog($funcName, 'Начало работы функции.');
     //if (!empty($code)) { // Получен код авторизации
     if (!empty($_GET['code'])) {
         // Получен код авторизации
         $code = $_GET['code'];
         Debug::Addlog($funcName, 'code » Получен код авторизации.');
         Debug::Addlog($funcName, 'code » Выполняем запрос к серверу ВК.');
         $json = file_get_contents("https://oauth.vk.com/access_token?client_id={$vkApi_id}&client_secret={$vkApi_key}&code={$code}&redirect_uri=" . $_SERVER['SCRIPT_URI']);
         if ($json) {
             // Получен корректный ответ от сервера ВК
             Debug::Addlog($funcName, 'code » Код авторизации корректный.');
             Debug::Addlog($funcName, 'code » Получен ответ от сервера ВК.');
             $obj = json_decode($json);
             // Получаем токен
             $access_token = $obj->{'access_token'};
             Debug::Addlog($funcName, 'code » Получен токен доступа.');
             $apiResponse = VkApi::api("users.get", "fields=photo_200,photo_50,screen_name");
             Debug::Addlog($funcName, 'code » Получены данные пользователя.');
             $valid_user = $apiResponse->response[0];
             $uid = $apiResponse->response[0]->uid;
             $first_name = $apiResponse->response[0]->first_name;
             $last_name = $apiResponse->response[0]->last_name;
             $screen_name = $apiResponse->response[0]->screen_name;
             $photo_50 = $apiResponse->response[0]->photo_50;
             $photo_200 = $apiResponse->response[0]->photo_200;
             // Регистрируем пользователя в сессии
             Debug::Addlog($funcName, 'code » Регистрируем пользователя в сессии.');
             unset($_SESSION['valid_user']);
             unset($_SESSION['uid']);
             unset($_SESSION['first_name']);
             unset($_SESSION['last_name']);
             unset($_SESSION['screen_name']);
             unset($_SESSION['photo_50']);
             unset($_SESSION['photo_200']);
             unset($_SESSION['access_token']);
             $_SESSION['valid_user'] = $valid_user;
             $_SESSION['uid'] = $uid;
             $_SESSION['first_name'] = $first_name;
             $_SESSION['last_name'] = $last_name;
             $_SESSION['screen_name'] = $screen_name;
             $_SESSION['photo_50'] = $photo_50;
             $_SESSION['photo_200'] = $photo_200;
             $_SESSION['access_token'] = $access_token;
             // Регистрируем пользователя в куках на 10 лет
             Debug::Addlog($funcName, 'code » Регистрируем пользователя в куках.');
             setcookie("uid", $uid, time() + 315360000, '/', $_SERVER['HTTP_HOST']);
             setcookie("first_name", $first_name, time() + 315360000, '/', $_SERVER['HTTP_HOST']);
             setcookie("last_name", $last_name, time() + 315360000, '/', $_SERVER['HTTP_HOST']);
             setcookie("screen_name", $screen_name, time() + 315360000, '/', $_SERVER['HTTP_HOST']);
             setcookie("photo_50", $photo_200, time() + 315360000, '/', $_SERVER['HTTP_HOST']);
             setcookie("photo_200", $photo_200, time() + 315360000, '/', $_SERVER['HTTP_HOST']);
             setcookie("access_token", $access_token, time() + 315360000, '/', $_SERVER['HTTP_HOST']);
             Debug::Addlog($funcName, 'code » Обновление страницы...<br>');
             $debugMode = $tempDebugMode;
             // Возвращение переменной глобального значения
             http_redirect($_SERVER['SCRIPT_URI']);
         } else {
             // Некорректный код авторизации
             Debug::Addlog($funcName, '!code » Ошибка! » Некорректный код авторизации. Завершение работы.<br>');
             $debugMode = $tempDebugMode;
             // Возвращение переменной глобального значения
             return false;
         }
     } elseif (!empty($_COOKIE['access_token']) && !empty($_COOKIE['uid'])) {
         // Получены регистрационные данные из куков
         $access_token = $_COOKIE['access_token'];
         Debug::Addlog($funcName, 'cookie » Получены регистрационные данные из куков.');
         Debug::Addlog($funcName, 'cookie » Посылаем запрос на сервер ВК для проверки актуальности рег.данных.');
         $apiResponse = VkApi::api("users.get", "fields=photo_200,photo_50,screen_name");
         //$apiResponse = VkApi::curlPost("https://api.vk.com/method/users.get?fields=photo_200,screen_name&access_token=$access_token");
         //$cookiecheck = json_decode($apiResponse);
         if (isset($apiResponse->error)) {
             // Куки устарели
             Debug::Addlog($funcName, '!cookie » Ошибка! » Регистрационные данные устарели. Завершение работы.<br>');
             $debugMode = $tempDebugMode;
             // Возвращение переменной глобального значения
             http_redirect("https://oauth.vk.com/authorize?client_id=" . $vkApi_id . "&scope=photos,groups,offline,stats,audio,video,wall,docs&redirect_uri=" . $_SERVER['SCRIPT_URI'] . "&response_type=code&v=5.27");
             //return $apiResponse;
         } else {
             // Куки актуальны
             Debug::Addlog($funcName, 'cookie » Регистрационные данные актуальны.');
             $valid_user = $apiResponse->response[0];
             $uid = $apiResponse->response[0]->uid;
             $first_name = $apiResponse->response[0]->first_name;
             $last_name = $apiResponse->response[0]->last_name;
             $screen_name = $apiResponse->response[0]->screen_name;
             $photo_50 = $apiResponse->response[0]->photo_50;
             $photo_200 = $apiResponse->response[0]->photo_200;
             // Регистрируем пользователя в сессии
             Debug::Addlog($funcName, 'cookie » Регистрируем пользователя в сессии.');
             unset($_SESSION['valid_user']);
             unset($_SESSION['uid']);
             unset($_SESSION['first_name']);
             unset($_SESSION['last_name']);
             unset($_SESSION['screen_name']);
             unset($_SESSION['photo_50']);
             unset($_SESSION['photo_200']);
             unset($_SESSION['access_token']);
             $_SESSION['valid_user'] = $valid_user;
             $_SESSION['uid'] = $uid;
             $_SESSION['first_name'] = $first_name;
             $_SESSION['last_name'] = $last_name;
             $_SESSION['screen_name'] = $screen_name;
             $_SESSION['photo_50'] = $photo_50;
             $_SESSION['photo_200'] = $photo_200;
             $_SESSION['access_token'] = $access_token;
             // Регистрируем пользователя в куках на 10 лет
             Debug::Addlog($funcName, 'cookie » Обновляем рег. данные в куках.');
             setcookie("uid", $uid, time() + 315360000, '/', $_SERVER['HTTP_HOST']);
             setcookie("first_name", $first_name, time() + 315360000, '/', $_SERVER['HTTP_HOST']);
             setcookie("last_name", $last_name, time() + 315360000, '/', $_SERVER['HTTP_HOST']);
             setcookie("screen_name", $screen_name, time() + 315360000, '/', $_SERVER['HTTP_HOST']);
             setcookie("photo_50", $photo_200, time() + 315360000, '/', $_SERVER['HTTP_HOST']);
             setcookie("photo_200", $photo_200, time() + 315360000, '/', $_SERVER['HTTP_HOST']);
             setcookie("access_token", $access_token, time() + 315360000, '/', $_SERVER['HTTP_HOST']);
             Debug::Addlog($funcName, 'cookie » Завершение работы функции.<br>');
             $debugMode = $tempDebugMode;
             // Возвращение переменной глобального значения
             return true;
         }
     } else {
         // Просмотр страницы без регистрации
         //Debug::Addlog($funcName,'!code & !cookie » Отсутствует код авторизации.');
         Debug::Addlog($funcName, '!code & !cookie » Работа в неавторизованном режиме. Завершение работы.<br>');
         $debugMode = $tempDebugMode;
         // Возвращение переменной глобального значения
         return false;
     }
 }