Скрипты для сайтов, на главную страницу Контакты Мобильная версия

Готовые скрипты и сайты под ключ - nevius.ru

Скрипты и сайты на заказ
Статьи
В статьях приводятся наглядные примеры скриптов, разбирается пошагово каждая команда, дается описание так, чтобы вы самостоятельно могли написать скрипт или сделать сайт.
Для начала нам необходимо создать новое приложение на сайте социальной сети. Для этого переходим по ссылке:
http://vk.com/editapp?act=create
В открывшейся форме введите название приложения, например «Авторизация вконтакте». выберите тип приложения – «Веб-сайт». В поле «Адрес сайта» введите адрес вашего сайта, точнее страницы, куда будет перенаправляться пользователь после авторизации. В нашем случает это страница autor.php, то есть адрес сайта будет выглядеть так:
http://site.ru/autor.php
В поле «Базовый домен» укажите домен вашего сайта.
После нажатия на кнопку «Подключить сайт» и ввода проверочного кода вам должна открыться следующая форма с настройками приложения.
Из данной формы нам понадобятся такие данные, как "ID приложения", "Защищённый ключ", "Адрес сайта". Запишем их в специальные переменные в файле авторизации.

<?
$vk_client_id = ''; // ID приложения
$vk_client_secret = ''; // Защищённый ключ
$vk_redirect_uri = 'http://site.ru/autor.php'; // Адрес сайта
?>

Теперь переходим непосредственно к скрипту. У нас за авторизацию на сайте будет отвечать файл autor.php. В самом верху этого файла пропишите три вышеуказанных переменных (можно вынести их в отдельный файл настроек). Далее создадим ссылки на авторизацию через социальную сеть. Как правило их делаю под основной формой авторизации.

<?
echo "Авторизация через социальные сети<br/><br/>";
$vk_url = 'http://oauth.vk.com/authorize';

// это адрес, где будет обработан наш запрос на вториазцию
$params = array(
'client_id' => $vk_client_id,
'redirect_uri' => $vk_redirect_uri,
'response_type' => 'code',
'state' => 'vk'
);

// ID клиента и адрес, на который будет совершен редирект в случае удачной авторизации. Параметр state указывает идентификатор соц. сети в случае, если у вас будет несколько разных авторизаций (facebook, одноклассники и т.п.).

echo $link = '<a href="' . $vk_url . '?' . urldecode(http_build_query($params)) . '&scope=email"><img src=socauth_vk.png border=0></a> ';

// тут непосредственно выводим ссылку на авторизацию. В качестве картики socauth_vk.png можете использовать значок контакта.
?>

Теперь напишем скрипт-обработчик. Его надо размещать в коде скрипта выше проверки, которую делаю ваш основной скрипт на то авторизирован пользователь или нет.

<?
if (isset($_GET['code']) and $_GET['state'] == 'vk') {

// если к нам пришла в адресной строке переменная code и идентификатор социальной сети «state», который мы сформировали в ссылке авторизации имеет значение “vk”, то выполняем проверку авторизации

$vk_url = 'http://oauth.vk.com/authorize';
$params = array(
'client_id' => $vk_client_id,
'redirect_uri' => $vk_redirect_uri,
'response_type' => 'code'
);
$result = false;
$params = array(
'client_id' => $vk_client_id,
'client_secret' => $vk_client_secret,
'code' => $_GET['code'],
'redirect_uri' => $vk_redirect_uri
);
$token = json_decode(file_get_contents('https://oauth.vk.com/access_token' . '?' . urldecode(http_build_query($params))), true);
if (isset($token['access_token'])) {
$params = array(
'uids' => $token['user_id'],
'email' => $token['email'],
'fields' => 'uid,first_name,last_name,email,screen_name,sex,bdate,photo_big',
'access_token' => $token['access_token']
);

// здесь мы передаем необходимые нам параметры. В данном случае передается ID пользователь вконтакте - user_id, email пользователя – email, а также ряд дополнительных параметров – ммя, фамилия, пол, дата рождения, аватарка и т.п. С полным списком параметров, которые можно получить из соц. сети можно посмотреть на сайте вконтакте в разделе для разработчиков.

$userInfo = json_decode(file_get_contents('https://api.vk.com/method/users.get' . '?' . urldecode(http_build_query($params))), true);
if (isset($userInfo['response'][0]['uid'])) {
$userInfo = $userInfo['response'][0];
$result = true;
}
}

if ($result) {
$socialemail=$token['email'];
$socialID=$userInfo['uid'];
$socialname=$userInfo['first_name'];
$socialname2=$userInfo['last_name'];

// произвольным переменным присваиваем значение переданных данных (email, ID пользователя, имя, фамилия)

$socialname=iconv('utf-8','windows-1251',$socialname);
$socialname2=iconv('utf-8','windows-1251',$socialname2);

// конвертируем параметры в кодировку windows-1251, если ваш скрипт в этой кодировке.

if ($socialemail == '') {$socialemail=$socialID;}

// Некоторые социальные сети запрещают передавать email через API. Поэтому, если у вас в качестве логина используется email, то переменной email присваиваем значение из переменной ID пользователя.

//echo "Социальный ID пользователя: " . $userInfo['uid'] . '<br />';
//echo "Email: " . $socialemail . '<br />';
//echo "Имя: $socialname";
// можно вывести пользователю полученные значения. В трех строчках выше, если их раскоментировать должно отобразиться после удачной авторизации три значения: ID пользователья в соц. сети, Email, Имя.

// далее проверям есть ли пользователь в базе данных. В нашем случае имя таблицы для авторизации $autortable и авторизация осуществляется по email и паролю. Если пользователя нет в базе, то добавляем его туда, а если есть, то заносим в сессию для авторизации.

$result_soctop = @mysql_query("SELECT * FROM $autortable WHERE email = '$socialemail'");
if (@mysql_num_rows($result_soctop) == 0)
{ // если пользователя с таким email нет в базе, то добавляем его в базу данных.
srand((double)microtime()*1000000);
$code_soc=md5(uniqid(rand()));
$code_soc=@substr($code_soc,1,12);

// генерируем пароль для пользователя
$result_top1=mysql_query("insert into $autortable (email,date,pass,ip,status,lastvisit,name) values ('$socialemail',now(),'$code_soc','','ok',now(),'$socialname $socialname2')");

// заносим пользователя в базу данных
$resultaut1 = @mysql_query("SELECT ID,email,pass FROM $autortable WHERE email='$socialemail'");
while ($myrow=mysql_fetch_array($resultaut1)) {
$_SESSION['sid']=$myrow["ID"];
$_SESSION['slogin']=$myrow["email"];
$_SESSION['spass']=$myrow["pass"];
//
$sid=$myrow["ID"];
$slogin=$myrow["email"];
$spass=$myrow["pass"];
}
} // нет пользователя

if (@mysql_num_rows($result_soctop) != 0)
{ // есть пользователь
$resultaut1 = @mysql_query("SELECT ID,email,pass FROM $autortable WHERE email='$socialemail'");
while ($myrow=mysql_fetch_array($resultaut1)) {
$_SESSION['sid']=$myrow["ID"];
$_SESSION['slogin']=$myrow["email"];
$_SESSION['spass']=$myrow["pass"];
$sid=$myrow["ID"];
$slogin=$myrow["email"];
$spass=$myrow["pass"];
}
} // есть пользователь

}
}
?>

Подобным образом делается авторизация через другие социальные сети: facebook, Одноклассники, Google, mail.ru

©Невежин Евгений
http://nevius.ru
15.12.2015

При перепечатке информации ссылка на сайт http://nevius.ru обязательна.