Добавляем привязку аккаунта ВК на сайт. - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Sanoxxx, Alowir  
Добавляем привязку аккаунта ВК на сайт.
Radiance Дата: Вторник, 22.07.2014, 12:51 | Сообщение # 1
Боец
Сообщений: 209
Статус: Offline
Итак, есть задача - привязка аккаунта ВК к профилю на сайте.
Есть несколько методов - использование OAuth VK, через приложения, и собственные костыли.
Решил я предоставить вам этот самый костыль.
Итак, для начала, собственно, пошагово разберемся как это будет работать:
Цитата

1. Пользователь авторизуется на Вашем сайте.
2. При успешной авторизации извлекаем данные пользователя из таблицы, где эти данные хранятся и проверяем наличие заполнения столбца. Если VKID = 0 -> выбиваем мессагу о том, что необходимо прикрутить ID, если VKID из таблицы больше 0 -> пропускаем привязку и оперируем имеющимися данными дальше, как - вам виднее.
3. Если VKID = 0 выводим скрипт. который будет требовать с нашего юзверя, гада такого, ввести этот ID далее -> сверяемся с базой, если введённый ID уже имеется в базе - шлем его далеко и на долго и снова требуем ввода ID, если ID в базе нет - > переходим к шагу 4.
4. Генерируем уникальный код для проверки и просим пользователя отправить пост с этим кодом к себе на стену ВК.
5. С помощью VK API методом wall/get получаем самую свежую запись со стены пользователя, парсим до нужного нам места. Если текст со стены совпадает с нашим кодом -> заносим в базу VKID, если нет - пользователь, пока.

Итак, начнём. Для начала убедимся, работает ли наш сервер с PDO (что это - гуглите. Кратко - более современная библиотека для работы с базами данных.
Пытаемся подключиться к БД:
Код

<?php
try
{   // создаём подключение.
     $db = new PDO('mysql:host=хост_базы_данных;dbname=имя_базы','имя-пользователя','Пароль');
}
catch(PDOException $e)
{   // если при подключении произошли какие то траблы выдаём мессагу с текстом ошибки
     die("Error: ".$e->getMessage());
}
?>

Если сервер не ругается на синтаксис, и нет ошибок PDO - всё ок, продолжаем. Если нет - грусть и пичаль, устанавливайте либы PDO и читайте далее.
Итак, представим - юзер авторизовался на сайте, теперь устраиваем проверку - записан его ID или нет.
Приведу пример такой - в сессии есть переменная с именем login, в которой собственно и хранится логин пользователя.
Код

<?php
session_start();
if (empty($_SESSION['login'])){
echo 'Не авторизован жи!';
}else{
include 'pdoconnect.php'; // В файле код выше, т.е. коннект к базе.
  if  ($result = $db->prepare("SELECT * FROM `users` WHERE `login`=:lo")) // тут, думаю, всё понятно

   {  
         $lo = $_SESSION['login']; // присваиваем переменной $lo значение логина из сессии для последующей обработки
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // на всякий случай - выведет эрроры
          $result->bindParam(":ni",$ni,PDO::PARAM_STR);// благодаря этой строчке мы обрабатываем переменную $lo, приводя её к плейскодеру, что защищает нас от SQL INJ, приводим данные к строке
         $result->execute();  // выполняем запрос к базу
         $res = $result->fetch(PDO::FETCH_ASSOC); // результат преобразуем в ассоциативный массив
     }  
// далее будем проверять:
if ($res['vkid'] = 0){
echo ' Необходимо привязать ID VK';
// далее сгенерируем код для проверки, что именно туда пихать - дело ваше. Я просто помещу логин из сессии
$key = md5($_SESSION['login'];
$_SESSION['prov_key'] = $key; // поместили код в сессию
// здесь можно вывести форму для вставки ID
}else{
// что то там, если VK ID имеется и не равен 0
}
?>


Вот, собственно, проверка у нас уже есть. Теперь обрисуем наши действия, если ID равен 0:
Код

<p>Для привязки аккаунта ВК добавьте на стену пост с текстом: <? echo $_SESSION['prov_key']; ?>, заполните форму и нажмите "продолжить"</p>
<form action = "" method = "post">

<p>Введите ID </p>
<p><input type = "number" name = "vkid"></p>
<button type = "submit">Продолжить</button>
</form>
<?php
$vkid = $_POST[''vkid'];
if (empty($vkid)){
echo 'ID НЕ ВВЕДЁН!';
}else{
$qw = file_get_contents("https://api.vk.com/method/wall.get?v=5.3&filter=owner&owner_id=$vkid&count=1"); // запрос к апи
$json = json_decode($qw , true);// разбираем JSON, пришдший от вкапи

if ($json["response"]["items"][0]["text"] == $_SESSION['prov_key']){// проверяем, если код со стены такой же, что и в сессии, то
if ($result = $db->prepare("INSERT INTO `users`(`vkid`, `prov_key`) VALUES (?, ?)"))
{
     $id = $vkid;
     $prov_key = $_SESSION['prov_key'];
     $data = array ( $id, $prov_key); // помещаем данные в массив
     $result->execute($data); // отправляем
}
echo 'ID успешно привязан';
}else{
echo 'Ошибка, коды не совпадают!';
}
}
?>


Вот так всё просто,
Писалось на скорую руку, так что тапками не кидаемся, а принимаем на вооружение



Радик камбек :D

  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума