Донецкий техникум промышленной автоматики

VK API. Авторизація для сайту

Для того, щоб не писати сильно велику статтю я скоротив код лише до необхідного мінімуму. Тобто ніяких перевірок, потужних фільтрів на помилки і іншого. Тільки те, що безпосередньо необхідно для авторизації, для розуміння того, що відбувається. Так само, стаття розрахована, що ви володієте хоча-б базовими знаннями PHP і HTML. Деталі будуть описані тільки функції і прийоми які дуже рідко зустрічаються.

Перед тим, як почати, хочу трохи пояснити алгоритм.

  1. Створюємо додаток на офф сайті вк
  2. Отримуємо його ID
  3. Робимо на сайті посилання, в якій відправляємо запит вк-серверу
  4. Отримуємо code у відповідь
  5. Робимо ще один запит, в якому вставляємо ід додатки, захищений ключ і якраз цей code
  6. Отримуємо access_token, потрібний для подальшого використання API. З цього моменту можна вважати, що користувач авторизований. Невірного користувачеві токен не дають
  7. ???
  8. профіт !!! 11

Для початку потрібно створити «додаток». Це можна зробити ось тут: com/editapp?act=create> https://vk.com/editapp?act=create

Все просто. Ставимо тичинки навпаки веб-сайту і заповнюємо інфу.
Так, серйозно, локальні хости (localhost) теж можна вказувати і вони працюють цілком справно.

Після створення, все що необхідно, це відкрити налаштування програми і скопіювати id додатки і захищений ключ абикуди. Незабаром вони нам знадобляться.

Наступним кроком можна приступити до частини коду. Я створю новий файл з посиланням, нехай це буде authreg.php. Так само, я створю інший файл, який буде обробляти все інше. Назву його auth_vk.php.

Відкриваємо authreg.php. У ньому буде лежати просто посилання.

&lt;? Php $ id_app = 'ВАШ ID'; // Айді додатки $ url_script = 'https: //localhost/auth_vk.php'; // посилання на скрипт auth_vk.php?> <A href = '&lt;? Php echo' https://oauth.vk.com/authorize?client_id='.$id_app.'&redirect_uri='.$url_script.'&amp;response_type= code '; ?> '> Вхід через ВК </a> </ p>

Усе. Цей файл більше нам не знадобиться.

Відкриємо auth_vk.php.

У цьому прикладі я збережу все авторизовані дані в сесії. Ви ж можете зробити інакше.
Насамперед я відкрию невелике умова на перевірку прийшов до нас в GET від сервера ВК значення code.
Слідом ми відправимо сервера ВК прийшло значення code + захищений ключ і id додатки щоб отримати access_token, а так само відразу його використовуємо, отримавши ім'я і прізвище того, хто у нас натиснув на кнопку. Запишемо в сесію весь результат і відправимо користувача на іншу сторінку сайту. На практиці я б порекомендував доопрацювати цей скрипт і записати нового користувача в бд і так далі.

Трохи про те, як повинні виглядати запити до апі вк

Для того щоб викликати метод API ВКонтакте, Вам необхідно здійснити POST або GET запит по протоколу HTTPS за вказаним URL:

https://api.vk.com/method/'''METHOD_NAME'''?'''PARAMETERS'''&access_token='''ACCESS_TOKEN '' '

METHOD_NAME - назва методу зі списку функцій API,
PARAMETERS - параметри відповідного методу API,
ACCESS_TOKEN - ключ доступу, отриманий в результаті успішної авторизації додатка.

(С) З офіційної документації

[Згорнути]

&lt;? Php session_start (); if (! empty ($ _ GET [ 'code'])) {$ id_app = 'ВД ДОДАТКИ'; // Айді додатки $ secret_app = 'Захищений ключ'; // Захищений ключ. Можна дізнатися там же де і айди $ url_script = 'https: //localhost/auth_vk.php'; // посилання на цей скрипт $ token = json_decode (file_get_contents ( 'https://oauth.vk.com/access_token?client_id='.$id_app.'&client_secret='.$secret_app.'&code='.$_GET [' code '].' & redirect_uri = '. $ url_script), true); $ Fields = 'first_name, last_name'; $ Uinf = json_decode (file_get_contents ( 'https://api.vk.com/method/users.get?uids='.$token [' user_id '].' & Fields = '. $ Fields.' & Access_token = '. $ token [ 'access_token']. '& v = 5.80'), true); $ _SESSION [ 'name'] = $ uinf [ 'response'] [0] [ 'first_name']; $ _SESSION [ 'name_family'] = $ uinf [ 'response'] [0] [ 'last_name']; $ _SESSION [ 'uid'] = $ token [ 'user_id']; $ _SESSION [ 'access_token'] = $ token [ 'access_token']; header ( "Location: /mypage.php"); }?>

Функція file_get_contents тут використовується для того, щоб отримати відповідь від GET в php без перезавантаження сторінки. Відразу в змінну. Зручно.
Функція json_decode дозволяє декодувати JSON-рядки.

Трохи про JSON. Для довідки.

JSON-рядки виглядають приблизно ось так:

{ "Response": [{ "cid": 1, "name": "Москва"}]}

[Згорнути]

У змінну fields можна додати ще інші речі, які дозволяє використовувати даний метод. З ім'ям і прізвищем можна отримати так само аватарку, онлайн, місто, стать і багато іншого.
Детальніше про метод users.get: https://vk.com/dev/users.get
Детальніше про параметр fields: https://vk.com/dev/fields

Власне, все. Авторизація вже здійснена. Проте, для того щоб упевнитися в тому, що все як треба, пропоную ще створити mypage.php, туди ми вирушаємо в кінці скрипта і для перевірки виведемо на екран там все з сесій, що ми отримали.
Вміст mypage.php:

&lt;? Php session_start (); echo 'user id ='. $ _ SESSION [ 'uid']. '<br>'; echo 'access token ='. $ _ SESSION [ 'access_token']. '<br>'; echo 'username ='. $ _ SESSION [ 'name']. '<br>'; echo 'name family ='. $ _ SESSION [ 'name_family']. '&lt;br>'; ?>

Накидав на швидку руку. При якихось помилках або раптом будуть потрібні подробиці - пишіть в цій темі, відповім як тільки зможу.

Com/editapp?
Lt;?
Php?
Com/authorize?
Amp;response_type= code '; ?
Com/method/'''METHOD_NAME'''?
Lt;br>'; ?