пятница, 2 ноября 2012 г.

OAuth vk.com API и использование методов


Описание создания авторизации Oauth vk.com api

Файл index.php

<? require_once("config.php");
 if(isset($_SESSION['access_token'])) {
    $uid = $_SESSION['user_id'];
    // получим профиль пользователя
    $resp = file_get_contents('https://api.vkontakte.ru/method/getProfiles?uids='.$uid.'&fields=uid,first_name,last_name,nickname,photo_big,photo_rec,sex&access_token='.$_SESSION['access_token']);
    $data = json_decode($resp, true);
print_r($data);
} else {
    require_once("redirect.php");
}?>

Файл config.php
<?
// id приложения
define("CLIENT_ID", "ID_ПРИЛОЖЕНИЯ");
// защищенный ключ
define("SECRET", "СЕКРЕТНЫЙ_КЛЮЧ");
// куда перенаправим пользователя после авторизации
define("OAUTH_CALLBACK", "callback.php");
// настройки доступа
define("SCOPE", "groups,friends");
// путь к папке со скриптами
define("PATH", "http://ДОМЕН/ПУТЬ/ДО/СКРИТПОВ/");
define("GID", "ID_ПРИЛОЖЕНИЯ");
// включим сессию
session_start();
?> 
Файл login.php
<?require_once("config.php");
$link = 'http://api.vk.com/oauth/authorize?client_id='.CLIENT_ID.'&redirect_uri='.PATH.OAUTH_CALLBACK.'&display=popup&scope='.SCOPE.'&response_type=code';
?>
<button onclick="location.href='<? echo $link ?>';" style="padding:10px; font-size:14pt;">Войти ВКонтакте</button>
<br />
Файл redirect.php
<?
require_once("config.php");
//перенаправляем на авторизацию
//header('Location: http://api.vk.com/oauth/authorize?clien ... type=code');
header('Location: '.PATH.'login.php');
?> 
Файл callback.php
<?
require_once("config.php");
// получили параметр code
if($_REQUEST['code']) {
    // получаем access_token
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_POST, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 15);
    curl_setopt($ch, CURLOPT_USERAGENT, "Opera/9.80 (J2ME/MIDP; Opera Mini/5.0.3521/886; U; en) Presto/2.4.15");
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_URL, "https://oauth.vk.com/access_token?client_id=".CLIENT_ID."&code=".$_REQUEST['code']."&client_secret=".SECRET."&redirect_uri=".PATH."callback.php");
    $answer = json_decode(curl_exec($ch), true);
    if (curl_errno($ch) != 0)
        die('curl error:' . curl_error($ch));
    $text_answer = print_r($answer, true);
    /*if (isset($answer['error_description']))
        echo '<p style="color:red;display:inline;">' . $answer['error'] . ': ' . $answer['error_description'] . '</p><br>';
    else
        echo '<p style="color:green;display:inline;">token: ' . $answer['access_token'] . '</p><br>';
    echo "Debug:<br><textarea cols=100 rows=10>" . $text_answer . "</textarea>";
*/
    if($answer['access_token']){
        // запишем данные в сессию
        $_SESSION['access_token'] = $answer['access_token'];
        $_SESSION['user_id'] = $answer['user_id'];
        // переадресуем пользователя на нужную страницу
        header('Location: '.PATH.'index.php');
        exit();
    }
}
?>