Сайт поддержки администраторов САР, у нас вы можете скачать скрипты буксов, ферм и т.д, а также обсудить все это на форуме

Авторизация через Мой Мир & Вконтакте по 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>';

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


Рубрика: Информация » Программирование   |   Автор: kirill   |   Просмотры: 7707
Комментариев: 6
Публикаций: 0
ICQ: 649540764
  Автор: max95   |   Группа: Пользователи   |   Дата: 10 августа 2012  
что то новое
Комментариев: 7
Публикаций: 0
ICQ: --
  Автор: DarkGrek   |   Группа: Пользователи   |   Дата: 10 августа 2012  
)) ну ну )) добавь facebook будет вооще круто =)
Комментариев: 90
Публикаций: 2
ICQ: 656527
  Автор: NGS   |   Группа: Пользователи   |   Дата: 10 августа 2012  
Прощше использовать сервис типа Loginza, там сразу все существующие социалки)
Комментариев: 47
Публикаций: 0
ICQ: 602930609
  Автор: zorro   |   Группа: Пользователи   |   Дата: 10 августа 2012  
Да интересно wink
Комментариев: 64
Публикаций: 8
ICQ: 959098
  Автор: kirill   |   Группа: Программисты   |   Дата: 10 августа 2012  
NGS, там не прямое Апи а тут прямое разницу чувствуешь?))
Тут можно и стену и все что угодно вытянуть)
Комментариев: 105
Публикаций: 2
ICQ: --
  Автор: ZICKFREED   |   Группа: Пользователи   |   Дата: 10 августа 2012  
а регу как через социалки добавить, или эта фишка авторизирует и регистрирует пользака?
Комментариев: 64
Публикаций: 8
ICQ: 959098
  Автор: kirill   |   Группа: Программисты   |   Дата: 10 августа 2012  
ZICKFREED, Это только авторизация, можно её хоть под что на любой сайт сделать, + она получает ключики для других превелегий smile

Если какие то определенные заказы делать, то сам понимаешь там уже бюджет нужен.
Комментариев: 218
Публикаций: 6
ICQ: 573235722
  Автор: VELIK505   |   Группа: Программисты   |   Дата: 10 августа 2012  
Логинза для нубасов
Комментариев: 90
Публикаций: 2
ICQ: 656527
  Автор: NGS   |   Группа: Пользователи   |   Дата: 11 августа 2012  
VELIK505 тоесть яндекс зря её (Логинзу) купил?
Комментариев: 64
Публикаций: 8
ICQ: 959098
  Автор: kirill   |   Группа: Программисты   |   Дата: 11 августа 2012  
NGS, нет сервис просто для ленивых и кто вообще не шарит
Комментариев: 4
Публикаций: 0
ICQ: --
  Автор: Anton-writer   |   Группа: Пользователи   |   Дата: 13 августа 2012  
Не надо ля-ля! Логизна отличная штука! winked
Комментариев: 123
Публикаций: 2
ICQ: 567777707
  Автор: Forceman   |   Группа: Пользователи   |   Дата: 16 августа 2012  
Кстати могу с авторизацией на вашем ресурсе с помощью Twitter.
Комментариев: 7
Публикаций: 0
ICQ: --
  Автор: advertwm   |   Группа: Пользователи   |   Дата: 17 августа 2012  
Классная вещь. Админ, Модераторы, почему я забанен на форуме, не могу зайти на страницу форума, будьте так добры убрать блок.)
Комментариев: 123
Публикаций: 2
ICQ: 567777707
  Автор: Forceman   |   Группа: Пользователи   |   Дата: 17 августа 2012  
есть инфа что ты кидало. Или я путаю.
Комментариев: 52
Публикаций: 2
ICQ: 207679
  Автор: Scrin   |   Группа: Пользователи   |   Дата: 21 августа 2012  
Я тут кое-что проверяю)
Комментариев: 123
Публикаций: 2
ICQ: 567777707
  Автор: Forceman   |   Группа: Пользователи   |   Дата: 21 августа 2012  
Я тоже тут и тоже проверяю! Не мешай мне проверять.
Комментариев: 52
Публикаций: 2
ICQ: 207679
  Автор: Scrin   |   Группа: Пользователи   |   Дата: 24 августа 2012  
Цитата: Forceman
Я тоже тут и тоже проверяю! Не мешай мне проверять.

Ты чё проверял? Я смотрел как на длешке отправка на аяксе сделана)
Комментариев: 123
Публикаций: 2
ICQ: 567777707
  Автор: Forceman   |   Группа: Пользователи   |   Дата: 25 августа 2012  
Ты чё проверял? Я смотрел как на длешке отправка на аяксе сделана)


Я искал здесь аномальную зону. Но не нашел.
Полагаю потому, что ты помешал мне проверять магнитное поле.

О_о
Комментариев: 52
Публикаций: 2
ICQ: 207679
  Автор: Scrin   |   Группа: Пользователи   |   Дата: 26 августа 2012  
Цитата: Forceman
Я искал здесь аномальную зону. Но не нашел.
Полагаю потому, что ты помешал мне проверять магнитное поле.

Окей, не буду мешать больше...
Комментариев: 158
Публикаций: 10
ICQ: 407464816
  Автор: bizze   |   Группа: V.I.P.   |   Дата: 02 сентября 2012  
Да, кстати, Логинза вещь нужная и полезная: экономия времени и нервов, а на выходе - удобство.
Комментариев: 64
Публикаций: 8
ICQ: 959098
  Автор: kirill   |   Группа: Программисты   |   Дата: 09 сентября 2012  
bizze, Да куй ей даже стенку вытянешь! Это АПИ для смышленых) если лень читать что в ссылках (Доках) то я тут не виноват))
Комментариев: 158
Публикаций: 10
ICQ: 407464816
  Автор: bizze   |   Группа: V.I.P.   |   Дата: 22 сентября 2012  
kirill,
эмм, я что-то говорил про стенку, если нужна стена, данные и тд, то блять коню понятно что логинза не подойдет. Уже даже только потому, что она ЛОГИНза. И доки читал, и какие только соц.сети не подключал годы назад, да вот понял, что для моих задач "дешевле" будет логинзу поставить. АПИ для всех одинаковое, и на столько разжевано оно у ВК, что даже не знаю, над чем там можно задуматься, и в чем заключается смышленость, конкретно твоя.
Цитата: kirill
если лень читать что в ссылках (Доках) то я тут не виноват))

Да ты что? Правда что ли? А то я вот думал уже тебя винить в том, что у меня просто нет цели в жизни читать то, что мне никоим образом не может быть нужным.
Комментариев: 64
Публикаций: 8
ICQ: 959098
  Автор: kirill   |   Группа: Программисты   |   Дата: 22 сентября 2012  
bizze, мне реально пох*й на тебя и на твою политику, мне это не интересно, просто о чем я говорю, это то что вы за*ли уже использовать сторонние сервизы, и данные свои и свою ключи по разным серверам оставлять, если ты реально мега прогер "Аля" то ты должен понимать риск таких сервизов как Логинза
Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.