Итак, решил кинуть статейку про авторизацию через социальные сети, думаю многим затейка должна понравиться... Данную статью расписал как можно подробнее, чтобы возникало меньше вопросов - как ей пользоваться и какие есть дополнительные параметры соц сетей. Скажу так, на данный момент по 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.'
';
echo 'Email '.$xmlc->user->email.'
';
echo 'first name '.$xmlc->user->first_name.'
';
echo 'last name '.$xmlc->user->last_name.'
';
echo 'My link '.$xmlc->user->link.'
';
echo 'nick '.$xmlc->user->nick.'
';
echo 'Avatar '.$xmlc->user->pic.'
';
echo 'Big avatar '.$xmlc->user->pic_big.'
';
echo 'My id '.$xmlc->user->uid.'
';
echo 'sess_key '.$sess_key.'
';
echo 'refresh_token '.$refresh_token.'
';
echo 'code '.$codes.'
';
// Ссылка на авторизацию и получения пользовательских данных
echo "Авторизация";
/////////////////////////////////////////////////////////////////////////////
/// Авторизация через соц. сеть 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.'
';
echo 'Email '.$xmlc->user->email.'
';
echo 'first name '.$xmlc->user->first_name.'
';
echo 'last name '.$xmlc->user->last_name.'
';
echo 'My link '.$xmlc->user->link.'
';
echo 'nick '.$xmlc->user->nick.'
';
echo 'Avatar '.$xmlc->user->pic.'
';
echo 'Big avatar '.$xmlc->user->pic_big.'
';
echo 'My id '.$xmlc->user->uid.'
';
echo 'sess_key '.$sess_key.'
';
echo 'refresh_token '.$refresh_token.'
';
echo 'code '.$codes.'
';
// Ссылка на авторизацию и получения пользовательских данных
echo "Авторизация";
Итак, наша авторизация через Мой Мир готова и достаточно понятна, преступим к авторизации через ВКонтакте.
Код авторизации ВКонтакте:
<?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 '
';
echo 'ID '.$xml_data->user->uid;
echo '
';
echo 'Name '.$xml_data->user->first_name;
echo '
';
echo 'last name '.$xml_data->user->last_name;
echo '
';
// Получаем аватар пользователя (Документация = 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 '
';
// Ссылка на авторизацию и получения пользовательских данных
echo 'Autch site';
/////////////////////////////////////////////////////////////////////////////
/// Авторизация через соц. сеть 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 '
';
echo 'ID '.$xml_data->user->uid;
echo '
';
echo 'Name '.$xml_data->user->first_name;
echo '
';
echo 'last name '.$xml_data->user->last_name;
echo '
';
// Получаем аватар пользователя (Документация = 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 '
';
// Ссылка на авторизацию и получения пользовательских данных
echo 'Autch site';
Вот и все, наша авторизация готова, осталось только придумать идею к её применению и все...
Теги
6 комментарии
0 загрузки
Детали
- Первый релиз 10 авг 2012
- Последнее обновление 03 авг 2026
- Документация Есть
- Содержимое файлов Исходные файлы
- Всего товаров 8
- Рейтинг (0)
- Регистрация 05 апр 2011
- Уровень 0
- Пользователь подтверждён Да
- Телефон подтверждён Нет
- Email подтверждён Нет

kirill
- 22 сен 2012bizze, мне реально пох*й на тебя и на твою политику, мне это не интересно, просто о чем я говорю, это то что вы за*ли уже использовать сторонние сервизы, и данные свои и свою ключи по разным серверам оставлять, если ты реально мега прогер "Аля" то ты должен понимать риск таких сервизов как Логинза
bizze
- 22 сен 2012kirill,
эмм, я что-то говорил про стенку, если нужна стена, данные и тд, то блять коню понятно что логинза не подойдет. Уже даже только потому, что она ЛОГИНза. И доки читал, и какие только соц.сети не подключал годы назад, да вот понял, что для моих задач "дешевле" будет логинзу поставить. АПИ для всех одинаковое, и на столько разжевано оно у ВК, что даже не знаю, над чем там можно задуматься, и в чем заключается смышленость, конкретно твоя.
Да ты что? Правда что ли? А то я вот думал уже тебя винить в том, что у меня просто нет цели в жизни читать то, что мне никоим образом не может быть нужным.
kirill
- 09 сен 2012bizze, Да куй ей даже стенку вытянешь! Это АПИ для смышленых) если лень читать что в ссылках (Доках) то я тут не виноват))
bizze
- 02 сен 2012Да, кстати, Логинза вещь нужная и полезная: экономия времени и нервов, а на выходе - удобство.
Scrin
- 26 авг 2012Окей, не буду мешать больше...