Авторизация через Мой Мир & Вконтакте по API

Итак, решил кинуть статейку про авторизацию через социальные сети, думаю многим затейка должна понравиться… Данную статью расписал как можно подробнее, чтобы возникало меньше вопросов – как ей пользоваться и какие есть дополнительные параметры соц сетей. Скажу так, на данный момент по API можно вытянуть полностью Мой Мир и ВКонтакте.Итак, решил кинуть статейку про авторизацию через социальные сети, думаю многим затейка должна понравиться… Данную статью расписал как можно подробнее, чтобы возникало меньше вопросов – как ей пользоваться и какие есть дополнительные параметры соц сетей. Скажу так, на данный момент по API можно вытянуть полностью Мой Мир и ВКонтакте.

Код авторизации Мой Мир:

<?PHP
      /////////////////////////////////////////////////////////////////////////////
      /// Авторизация через соц. сеть mail.ru                                  
      /// Для начала работы вам необходимо добавить свой сайт и получить ключи
      /// Ссылка http://api.mail.ru/sites/my/add/                              
      /// Документацию можно посмотреть тут                                    
      /// Ссылка http://api.mail.ru/docs/guides/restapi/                        
      /////////////////////////////////////////////////////////////////////////////

      // Думаю понятно;)
      error_reporting(0);

      ////////////////////////////////////////////////////////////////////
      $mailru_apps   = ''; // ID
      $mailru_secret = ''; //Secret Key
      $mailru_derect = 'http://site.kz/authorization.php'; // URL сайта который получит GET код
      ////////////////////////////////////////////////////////////////////

      // Выводим полученное значение GET
      $codes = $_GET["code"];

      //Собираем все данные и формируем отправку POST
      $params = array(
          "client_id" => $mailru_apps,
          "client_secret" => $mailru_secret,
          "grant_type" => "authorization_code",
          "scope" => "stream",
          "code" => $codes,
          "redirect_uri" => $mailru_derect,
        );
      $post = http_build_query($params);;
      $url = "https://connect.mail.ru/oauth/token";
      $headers = array("POST /oauth/token HTTP/1.1
                       Host: connect.mail.ru
                       Accept: */*
                       Content-Length: ".strlen($post)."
                       Content-Type: application/x-www-form-urlencoded");
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
      curl_setopt($ch, CURLOPT_TIMEOUT, 60);
      curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
      $result = curl_exec($ch);
      curl_close($ch);

      // Получаем JSON и начнем его обрабатывать
      $obj = json_decode($result);

      // Полученные данные
      $muid = $obj->{'x_mailru_vid'}; // ID сессии пользователя
      $sess_key = $obj->{'access_token'}; // Полученный access token (24 часа действует)
      $refresh_token = $obj->{'refresh_token'}; // refresh token для обновления ключа access token
      $expires_in = $obj->{'expires_in'}; // Время жизни ключа access token в секундах

      // Формируем подпись SING
      function sign_server_server(array $request_params, $secret_key) {
          ksort($request_params);
          $params = '';
          foreach ($request_params as $key => $value) {
              if ($key!='sig') {
                  $params .= "$key=$value";
                }
            }
         return md5($params.$secret_key);
        }

       // Формируем запрос данных users.getInfo
       $params = array(
          "format" => "xml", // xml or json
          "method" => "users.getInfo",
          "app_id" => $mailru_apps,
          "session_key" => $sess_key,
          "uids" => $muid,
          "secure" => "1"
        );

      // Получаем данные
      $url = "http://www.appsmail.ru/platform/api?".http_build_query($params)."&sig=".sign_server_server($params,$mailru_secret);
      $response = file_get_contents($url);
      $xmlc = simplexml_load_string($response);

      // Выводим данные
      echo 'birthday '.$xmlc->user->birthday.'<br>';
      echo 'Email '.$xmlc->user->email.'<br>';
      echo 'first name '.$xmlc->user->first_name.'<br>';
      echo 'last name '.$xmlc->user->last_name.'<br>';
      echo 'My link '.$xmlc->user->link.'<br>';
      echo 'nick '.$xmlc->user->nick.'<br>';
      echo 'Avatar '.$xmlc->user->pic.'<br>';
      echo 'Big avatar '.$xmlc->user->pic_big.'<br>';
      echo 'My id '.$xmlc->user->uid.'<br>';
      echo 'sess_key '.$sess_key.'<br>';
      echo 'refresh_token '.$refresh_token.'<br>';
      echo 'code '.$codes.'<br>';

      // Ссылка на авторизацию и получения пользовательских данных
      echo "<a href='https://connect.mail.ru/oauth/authorize?client_id={$mailru_apps}&response_type=code&scope=stream&redirect_uri={$mailru_derect}'>Авторизация</a>";


Итак, наша авторизация через Мой Мир готова и достаточно понятна, преступим к авторизации через ВКонтакте.

Код авторизации ВКонтакте:

<?PHP
      /////////////////////////////////////////////////////////////////////////////
      /// Авторизация через соц. сеть vk.com                                    
      /// Для начала работы вам необходимо добавить свой сайт и получить ключи  
      /// Ссылка http://vk.com/editapp?act=create                              
      /////////////////////////////////////////////////////////////////////////////

      // Думаю понятно;)
      error_reporting(0);

      ////////////////////////////////////////////////////////////////////
      $vk_apps   = ''; // ID
      $vk_secret = ''; //Secret Key
      $vk_scope  = 'notify,offline,wall,friends,photos'; // Указываем нужные нам превелегии
      $vk_derect = 'http://site.kz/authorization.php'; // URL сайта который получит GET код
      ////////////////////////////////////////////////////////////////////

      // Отправка запроса на авторизацию
      $url = "https://oauth.vkontakte.ru/access_token?client_id={$vk_apps}&client_secret={$vk_secret}&code=".$_GET['code'];
      $curl = curl_init();
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
      $out = curl_exec($curl);
      curl_close($curl);

      // Получаем JSON и начнем его обрабатывать
      $obj_vk = json_decode($out);

      // Полученные данные
      $sid = $obj_vk->{'access_token'}; // Полученный access token
      $id = $obj_vk->{'user_id'}; // ID пользователя

      // Класс для работы с API
      class vkapi {
          var $api_secret;
          var $app_id;
          var $api_url;
            function vkapi($app_id, $api_secret, $api_url = 'api.vk.com/api.php') {
              $this->app_id = $app_id;
              $this->api_secret = $api_secret;
              if (!strstr($api_url, 'http://')) $api_url = 'http://'.$api_url;
              $this->api_url = $api_url;
            }    
          function api($method,$params=false, $fields) {
              if (!$params) $params = array();
              $params['api_id'] = $this->app_id;
              $params['v'] = '3.0';
              $params['method'] = $method;
              $params['timestamp'] = time();
              $params['format'] = 'xml'; //xml or json
              $params['random'] = rand(0,10000);
              //////////////////////////////////
              if($fields){
                   // Дополнительные параметры
                  $params['fields'] = $fields;
                }
              //////////////////////////////////
              ksort($params);
              $sig = '';
              foreach($params as $k=>$v) {
                  $sig .= $k.'='.$v;
                }
              $sig .= $this->api_secret;
              $params['sig'] = md5($sig);
              $query = $this->api_url.'?'.$this->params($params);
              $res = file_get_contents($query);
              return $res;
            }
          function params($params) {
              $pice = array();
              foreach($params as $k=>$v) {
                  $pice[] = $k.'='.urlencode($v);
                }
              return implode('&',$pice);
            }
        }

      // Создаем класс для начала работы
      $VK = new vkapi($vk_apps, $vk_secret);

      // Получаем данные пользователя
      $data_user = $VK->api('getProfiles', array('uids'=>$id));
      $xml_data = simplexml_load_string($data_user);

      // Данные
      echo 'access_token '.$sid;
      echo '<br>';
      echo 'ID '.$xml_data->user->uid;
      echo '<br>';
      echo 'Name '.$xml_data->user->first_name;
      echo '<br>';
      echo 'last name '.$xml_data->user->last_name;
      echo '<br>';

      // Получаем аватар пользователя (Документация = http://vk.com/developers.php?oid=-1&p=users.get )
      $additionally = $VK->api('users.get', array('uids'=>$id), 'photo_medium');
      $xml_additionally = simplexml_load_string($additionally);

      // Выводим аватар
      echo 'Photo '.$xml_additionally->user->photo_medium;
      echo '<br>';

      // Ссылка на авторизацию и получения пользовательских данных
      echo '<a href="http://oauth.vkontakte.ru/authorize?client_id='.$vk_apps.'&scope='.$vk_scope.'&redirect_uri='.$vk_derect.'&response_type=code">Autch site</a>';


Вот и все, наша авторизация готова, осталось только придумать идею к её применению и все…

Автор публикации

не в сети 9 лет

kirill

Комментарии: 0Публикации: 8Регистрация: 05-04-2011

Понравилась статья? Поделись в соц. сетях:

Похожие новости

Добавить комментарий

Авторизация
*
*
Регистрация
*
*
*
Генерация пароля