Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Http\Controllers;
- use Illuminate\Http\Request;
- use Psy\Exception\ErrorException;
- class HomeController extends Controller
- {
- private $apiVersion = '5.78';
- private function getUserInformation(Request $request, $token) {
- $url = 'https://api.vk.com/method/users.get';
- $params = [
- 'uid' => $request->session()->get('user_id'),
- 'access_token' => $token,
- 'fields' => 'first_name,last_name',
- 'version' => $this->apiVersion
- ];
- $userInfo = json_decode(file_get_contents($url . '?' . urldecode(http_build_query($params))), true);
- if(isset($userInfo['error'])){
- throw new ErrorException('Превышено количество запросов в секунду или сервис недоступен. Попробуйте позже.');
- } else {
- return $userInfo['response'][0];
- }
- }
- private function getFriends(Request $request, $token, $count) {
- $url = 'https://api.vk.com/method/friends.get';
- $params = [
- 'access_token' => $token,
- 'order' => 'random',
- 'count' => $count,
- 'offset' => 3,
- 'fields' => 'first_name,last_name',
- 'version' => $this->apiVersion
- ];
- $friends = json_decode(file_get_contents($url . '?' . urldecode(http_build_query($params))), true);
- if(isset($friends['error'])){
- throw new ErrorException('Превышено количество запросов в секунду или сервис недоступен. Попробуйте позже.');
- } else {
- return $friends['response'];
- }
- }
- private function getFiveValidFriends(Request $request, $token){
- $friends = $this->getFriends($request, $token, 10);
- $validFriends = [];
- while(count($validFriends)<5){
- $validFriends = array_filter($friends, function($friend){
- return isset($friend['deactivated']) ? false : true;
- });
- if(count($validFriends)<5){
- $friends = $this->getFriends($request, $token, 10);
- }
- }
- return array_slice($validFriends, 0, 5);
- }
- public function index(Request $request) {
- $clientId = 6605907;
- $clientSecret = 'секретный ключ';
- $redirectUri = 'http://u3835.red.elastictech.org/';
- $display = 'page';
- $scope = 'friends';
- $responseType = 'code';
- $url = 'https://oauth.vk.com/authorize';
- $queryParams = [
- 'client_id' => $clientId,
- 'redirect_uri' => $redirectUri,
- 'display' => $display,
- 'scope' => $scope,
- 'response_type' => $responseType
- ];
- $query = $url . '?' . urldecode(http_build_query($queryParams));
- if($request->session()->has('token')){
- $token = $request->session()->get('token');
- try {
- return view('auth', [
- 'user_info' => $this->getUserInformation($request, $token),
- 'friends' => $this->getFiveValidFriends($request, $token)
- ]);
- } catch (ErrorException $ex){
- return view('welcome', [
- 'error' => 'Ошбика доступа',
- 'error_description' => $ex->getRawMessage(),
- 'query' => '/',
- 'button' => 'Попробовать снова'
- ]);
- }
- } else if ($request->has('code')) {
- $url = 'https://oauth.vk.com/access_token';
- $code = $request->input('code');
- $params = [
- 'client_id' => $clientId,
- 'redirect_uri' => $redirectUri,
- 'client_secret' => $clientSecret,
- 'code' => $code
- ];
- $query = $url . '?' . urldecode(http_build_query($params));
- $resp = @json_decode(file_get_contents($query), true);
- if($resp == false){
- return view('welcome', [
- 'error' => 'Ошибка авторизации',
- 'error_description' => 'Ошибка получения токена. Неверный код.',
- 'query' => $query,
- 'button' => 'Авторизация'
- ]);
- } else {
- $request->session()->put('token', $resp['access_token']);
- $request->session()->put('user_id', $resp['user_id']);
- return redirect('/');
- }
- } else if ($request->has("error")){
- return view('welcome', [
- 'error' => 'Ошибка авторизации',
- 'error_description' => $request->input("error_description"),
- 'query' => $query,
- 'button' => 'Авторизация'
- ]);
- } else {
- return view('welcome', [
- 'query' => $query,
- 'button' => 'Авторизация'
- ]);
- }
- }
- public function logout(Request $request){
- $request->session()->flush();
- return redirect('/');
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment