EternalHaru

Untitled

Jun 16th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.49 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App\Http\Controllers;
  4.  
  5. use Illuminate\Http\Request;
  6. use Psy\Exception\ErrorException;
  7.  
  8. class HomeController extends Controller
  9. {
  10.     private $apiVersion = '5.78';
  11.  
  12.     private function getUserInformation(Request $request, $token) {
  13.         $url = 'https://api.vk.com/method/users.get';
  14.  
  15.         $params = [
  16.             'uid'          => $request->session()->get('user_id'),
  17.             'access_token' => $token,
  18.             'fields'       => 'first_name,last_name',
  19.             'version'      => $this->apiVersion
  20.         ];
  21.  
  22.         $userInfo = json_decode(file_get_contents($url . '?' . urldecode(http_build_query($params))), true);
  23.  
  24.         if(isset($userInfo['error'])){
  25.             throw new ErrorException('Превышено количество запросов в секунду или сервис недоступен. Попробуйте позже.');
  26.         } else {
  27.             return $userInfo['response'][0];
  28.         }
  29.     }
  30.  
  31.     private function getFriends(Request $request, $token, $count) {
  32.         $url = 'https://api.vk.com/method/friends.get';
  33.  
  34.         $params = [
  35.             'access_token' => $token,
  36.             'order'        => 'random',
  37.             'count'        => $count,
  38.             'offset'       => 3,
  39.             'fields'       => 'first_name,last_name',
  40.             'version'      => $this->apiVersion
  41.         ];
  42.  
  43.         $friends = json_decode(file_get_contents($url . '?' . urldecode(http_build_query($params))), true);
  44.  
  45.         if(isset($friends['error'])){
  46.             throw new ErrorException('Превышено количество запросов в секунду или сервис недоступен. Попробуйте позже.');
  47.         } else {
  48.             return $friends['response'];
  49.         }
  50.     }
  51.  
  52.     private  function getFiveValidFriends(Request $request, $token){
  53.         $friends = $this->getFriends($request, $token, 10);
  54.         $validFriends = [];
  55.         while(count($validFriends)<5){
  56.             $validFriends = array_filter($friends, function($friend){
  57.                 return isset($friend['deactivated']) ? false : true;
  58.             });
  59.             if(count($validFriends)<5){
  60.                 $friends = $this->getFriends($request, $token, 10);
  61.             }
  62.         }
  63.  
  64.         return array_slice($validFriends, 0, 5);
  65.     }
  66.  
  67.     public function index(Request $request) {
  68.         $clientId = 6605907;
  69.         $clientSecret = 'секретный ключ';
  70.         $redirectUri = 'http://u3835.red.elastictech.org/';
  71.         $display = 'page';
  72.         $scope = 'friends';
  73.         $responseType = 'code';
  74.  
  75.         $url = 'https://oauth.vk.com/authorize';
  76.  
  77.         $queryParams = [
  78.             'client_id'     => $clientId,
  79.             'redirect_uri'  => $redirectUri,
  80.             'display'       => $display,
  81.             'scope'         => $scope,
  82.             'response_type' => $responseType
  83.         ];
  84.  
  85.         $query = $url . '?' . urldecode(http_build_query($queryParams));
  86.  
  87.         if($request->session()->has('token')){
  88.             $token = $request->session()->get('token');
  89.             try {
  90.                 return view('auth', [
  91.                     'user_info' => $this->getUserInformation($request, $token),
  92.                     'friends' => $this->getFiveValidFriends($request, $token)
  93.                 ]);
  94.             } catch (ErrorException $ex){
  95.                 return view('welcome', [
  96.                 'error'             => 'Ошбика доступа',
  97.                 'error_description' => $ex->getRawMessage(),
  98.                 'query'             => '/',
  99.                 'button'            => 'Попробовать снова'
  100.             ]);
  101.             }
  102.         } else if ($request->has('code')) {
  103.             $url = 'https://oauth.vk.com/access_token';
  104.             $code = $request->input('code');
  105.  
  106.             $params = [
  107.                 'client_id'     => $clientId,
  108.                 'redirect_uri'  => $redirectUri,
  109.                 'client_secret' => $clientSecret,
  110.                 'code'          => $code
  111.             ];
  112.  
  113.             $query = $url . '?' . urldecode(http_build_query($params));
  114.             $resp = @json_decode(file_get_contents($query), true);
  115.             if($resp == false){
  116.                 return view('welcome', [
  117.                     'error'             => 'Ошибка авторизации',
  118.                     'error_description' => 'Ошибка получения токена. Неверный код.',
  119.                     'query'             => $query,
  120.                     'button'            => 'Авторизация'
  121.                 ]);
  122.             } else {
  123.                 $request->session()->put('token', $resp['access_token']);
  124.                 $request->session()->put('user_id', $resp['user_id']);
  125.                 return redirect('/');
  126.             }
  127.         } else if ($request->has("error")){
  128.             return view('welcome', [
  129.                 'error'             => 'Ошибка авторизации',
  130.                 'error_description' => $request->input("error_description"),
  131.                 'query'             => $query,
  132.                 'button'            => 'Авторизация'
  133.             ]);
  134.         } else {
  135.             return view('welcome', [
  136.                 'query'  => $query,
  137.                 'button' => 'Авторизация'
  138.             ]);
  139.         }
  140.     }
  141.  
  142.  
  143.     public function logout(Request $request){
  144.         $request->session()->flush();
  145.         return redirect('/');
  146.     }
  147. }
Advertisement
Add Comment
Please, Sign In to add comment