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

Як зробити «вхід на сайт через контакт» або ВК OpenAPI?

Вітаю, дорогі друзі! Якось недавно мені треба було зробити на одному зі своїх сайтів вхід через «вконтакте». Це дуже зручно, так як немає необхідності в реєстрації на самому сайті, а відразу ж користуватися всіма його можливостями зі свого аккаунта «вконтакте». Довелося вникати в тонкощі для здійснення цього завдання. До речі, до слова сказати, в самій офіційній документації по ВК API написано небагато, та й все дуже заплутано.

Отже, для того щоб почати користуватися ВК API, нам потрібно створити новий додаток «Вконтакте». Робимо це так: переходимо за посиланням: http://vk.com/editapp?act=create , Вибираємо «веб-сайт», вводимо ім'я нашого застосування, а також адреса сайту, до якого воно прив'язане і базовий домен нашого сайту.

act=create   , Вибираємо «веб-сайт», вводимо ім'я нашого застосування, а також адреса сайту, до якого воно прив'язане і базовий домен нашого сайту

Після створення, нам стали відомі ID нашого створеного додатки, а також секретний код, який тому і «секретний» що не варто його публікувати, отже нижче написаний id і secret code вигадані. :)

ID: 3328234
Secret Code: Q5f2PSwkiFw23TysdDgr

Тепер починаємо «кодувати». Створюємо файл «vklogin.php», наприклад, в корені сайту. А шаблон або код вставляємо наступне посилання:

https://oauth.vk.com/authorize?client_id=3328234&scope=1&redirect_uri=http://www.mydomain.ru/vklogin.php&response_type=code

Це може бути текстове посилання на сайті, посилання-картинка або навіть переадресація з js скрипта. Головне, що натиснувши на неї, користувач перейшов по цьому адресу. Тепер про переданих параметрах: client_id - це ідентифікатор нашого застосування ВК, redirect_uri - адреса на нашому сайті, куди буде переадресовано користувач, після отримання прав «Вконтакте», response_type - це тип авторизації, який в нашому випадку з використання коду. Після переходу по даній посилання, користувач побачить наступну сторінку сайту «Вконтакте»:

Після переходу по даній посилання, користувач побачить наступну сторінку сайту «Вконтакте»:

Після того як користувач натисне «Дозволити», тим самим делегує права вашому сайту, він буде переадресовано на наш скрипт «vklogin.php». Далі привожу сам скрипт, пояснення пізніше.

<? Php $ VK_APP_ID = "3328234"; $ VK_SECRET_CODE = "Q5f2PSwkiFw23TysdDgr"; if (! empty ($ _ GET [ 'code'])) {$ vk_grand_url = "https://api.vk.com/oauth/access_token?client_id=".$VK_APP_ID."&client_secret=".$VK_SECRET_CODE."&code = ". $ _ GET [ 'code']." & redirect_uri = http: //www.mydomain.ru/vklogin.php "; // відправляємо запит на отримання access token $ resp = file_get_contents ($ vk_grand_url); $ Data = json_decode ($ resp, true); $ Vk_access_token = $ data [ 'access_token']; $ Vk_uid = $ data [ 'user_id']; // звертаємося до ВК Api, отримуємо ім'я, прізвище та ID користувача вконтакте // метод users.get $ res = file_get_contents ( "https://api.vk.com/method/users.get?uids=". $ Vk_uid. "& access_token =". $ vk_access_token. "& fields = uid, first_name, last_name, nickname, photo"); $ Data = json_decode ($ res, true); $ User_info = $ data [ 'response'] [0]; echo $ user_info [ 'first_name']. "". $ user_info [ 'last_name']. "
"; Echo" <img src = ' ". $ User_info [' photo ']."' Border = "0" /> ";}?>

Отже, зі змінними ID і Sercet Code думаю все ясно. Далі перевіряємо, чи передали нам ВК при редирект параметр «code», який ми додаємо до новоствореного url і знову звертаємося до «контакту», але вже безпосередньо з нашого скрипта. Для цього використовуємо функцію «file_get_contents».

На даному етапі, слід загострити увагу на кількох важливих зауваженнях:
1. Даний код врят-чи вийде тестувати на локальному сервері (наприклад, на «Дервере»), а також, на використовуваному сервері, в налаштування php.ini, директива «allow_url_fopen» повинна бути встановлена ​​в «1».
2. На використовуваному сервері повинен бути встановлено розширення json для PHP.
3. І саме підступне, на чому я спіткнувся. Параметри «redirect_uri» в обох запитах до API, повинні бути абсолютно однаковими.

Залишилося тільки згадати про саму роботу з ВК API. Як ви помітили, після другого запиту до ВК, ми отримали параметри «access_token» і «user_id». На даному етапі ми вже авторизовані на ВК і можемо звертатися до API, використовуючи 2 ці змінні.

В останньому запиті до ВК API, ми використовуючи метод «users.get», отримуємо ім'я користувача ВК, прізвище, а також ID користувача і просто виводимо їх. Для конкретної реалізації логіна на сайті через ВК, все залежить від використовуваної CMS. Якщо у Вас власноруч написана CMS, ви може надійти наступного чином. Наприклад, зберігати ID користувача в сесійних змінних $ _SESSION [ 'vk_id'] і $ _SESSION [ 'vk_login'] попередньо обнулила першу. І перевірять авторизацію користувача за значенням «vk_id».

Більш детально, про роботу з ВК API ви зможете прочитати, за наступними посиланнями:
Офіційна документація по ВК API: http://vk.com/developers.php
Авторизація через Вконтакте: http://habrahabr.ru/post/92518/

Проблему підключення авторизації до вашої CMS вам доведеться вирішувати самим. Моїм завданням було тільки направити Вас в потрібному напрямку. :) Удачі Вам!

Com/editapp?
Com/authorize?
Lt;?
Com/oauth/access_token?
Get?
Border = "0" /> ";}?