Итак, решил кинуть статейку про авторизацию через социальные сети, думаю многим затейка должна понравиться… Данную статью расписал как можно подробнее, чтобы возникало меньше вопросов — как ей пользоваться и какие есть дополнительные параметры соц сетей. Скажу так, на данный момент по API можно вытянуть полностью Мой Мир и ВКонтакте.Итак, решил кинуть статейку про авторизацию через социальные сети, думаю многим затейка должна понравиться… Данную статью расписал как можно подробнее, чтобы возникало меньше вопросов — как ей пользоваться и какие есть дополнительные параметры соц сетей. Скажу так, на данный момент по API можно вытянуть полностью Мой Мир и ВКонтакте.
Код авторизации Мой Мир:
/////////////////////////////////////////////////////////////////////////////
/// Авторизация через соц. сеть 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>";
Итак, наша авторизация через Мой Мир готова и достаточно понятна, преступим к авторизации через ВКонтакте.
Код авторизации ВКонтакте:
/////////////////////////////////////////////////////////////////////////////
/// Авторизация через соц. сеть 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>';
Вот и все, наша авторизация готова, осталось только придумать идею к её применению и все…
Отправить комментарий
Вы должны быть зарегистрированы чтобы оставить комментарий.
Вы должны быть зарегистрированы чтобы оставить комментарий.