В статье C# POST. Отправляем запросы на адрес стороннего сервера я рассказал про метод, с помощью которого можно работать с различным API, принимающими POST запрос и возвращающими ответ в виде json или xml.
Сегодня я хочу написать, как я применял этот метод при работе с API ВКонтакте. Для примера возьму задачу получения через API списка групп, в которых состоит пользователь.
В первую очередь необходимо зарегистристрировать наш сайт как приложение ВКонтакте.
Заходим по ссылке http://vk.com/editapp?act=create&site=1 и подключаем наш сайт.
Дальше задача делится на две подзадачи, а именно: авторизация пользователя и обращение к API для получения списка групп.
Для авторизации мы пользователю предлагаем перейти по следующей ссылке:
http://api.vkontakte.ru/oauth/authorize? response_type=code&redirect_uri={0} &client_id={1} &scope={2} &display=page ,
redirect_uri - адрес страницы нашего сайта, куда будет возвращен пользователь после авторизации Вконтакте;
client_id - идентификатор нашего сайта, полученный при регистрации;
scope - уровень доступа, который мы запрашиваем у пользователя (подробно об уровнях доступа можно посмотреть по этой ссылке).
После того как пользователь перешел по ссылке и авторизовался ВКонтакте, он возвращается на наш сайт. При этом в обратном адресе содержится параметр code, который нам понадобится для получения Token-а.
Token - это уникальный ключ, с помощью которого мы будем делать запросы к API.
Для получения токена мы должны сделать запрос, используя метод C# POST.
Адрес, по которому мы будем обращаться: https://api.vkontakte.ru/oauth/access_token
В качестве параметров передаем:
string.Format("client_id={0}&client_secret={1}&code={2}", [идентификатор нашего сайта], [секретный ключ нашего сайта, полученный при регистрации], [код, полученный из параметра code])
Метод возвращает json строку. Я десериализую ее в класс TokenModel(создал для сериализации), в поле AccessToken содержится наш ключ.
Теперь все просто. Зная AccessToken мы можем делать любые запросы к API с одним условием: они должны удовлетворять уровню доступа, запрошенному у пользователя.
Для получения списка групп снова делаем запрос используя метод C# POST, теперь в качестве адреса указываем https://api.vkontakte.ru/method/getGroups
В качестве параметров передаем
string.Format("{uid={0}&access_token={1}", [идентификатор пользователя, чьи группы мы хотим получить], [полученный токен])
Как видите, ничего сложного. Следующий раз напишу про API Одноклассников.
Update: Пример взаимодействия с Odnoklassniki Rest API на C#
Update2: C# и API Facebook. Пример размещения записи на стене пользователя с помощью API.
Сегодня я хочу написать, как я применял этот метод при работе с API ВКонтакте. Для примера возьму задачу получения через API списка групп, в которых состоит пользователь.
В первую очередь необходимо зарегистристрировать наш сайт как приложение ВКонтакте.
Заходим по ссылке http://vk.com/editapp?act=create&site=1 и подключаем наш сайт.
Дальше задача делится на две подзадачи, а именно: авторизация пользователя и обращение к API для получения списка групп.
Для авторизации мы пользователю предлагаем перейти по следующей ссылке:
http://api.vkontakte.ru/oauth/authorize? response_type=code&redirect_uri={0} &client_id={1} &scope={2} &display=page ,
redirect_uri - адрес страницы нашего сайта, куда будет возвращен пользователь после авторизации Вконтакте;
client_id - идентификатор нашего сайта, полученный при регистрации;
scope - уровень доступа, который мы запрашиваем у пользователя (подробно об уровнях доступа можно посмотреть по этой ссылке).
После того как пользователь перешел по ссылке и авторизовался ВКонтакте, он возвращается на наш сайт. При этом в обратном адресе содержится параметр code, который нам понадобится для получения Token-а.
Token - это уникальный ключ, с помощью которого мы будем делать запросы к API.
Для получения токена мы должны сделать запрос, используя метод C# POST.
Адрес, по которому мы будем обращаться: https://api.vkontakte.ru/oauth/access_token
В качестве параметров передаем:
string.Format("client_id={0}&client_secret={1}&code={2}", [идентификатор нашего сайта], [секретный ключ нашего сайта, полученный при регистрации], [код, полученный из параметра code])
Метод возвращает json строку. Я десериализую ее в класс TokenModel(создал для сериализации), в поле AccessToken содержится наш ключ.
Теперь все просто. Зная AccessToken мы можем делать любые запросы к API с одним условием: они должны удовлетворять уровню доступа, запрошенному у пользователя.
Для получения списка групп снова делаем запрос используя метод C# POST, теперь в качестве адреса указываем https://api.vkontakte.ru/method/getGroups
В качестве параметров передаем
string.Format("{uid={0}&access_token={1}", [идентификатор пользователя, чьи группы мы хотим получить], [полученный токен])
Как видите, ничего сложного. Следующий раз напишу про API Одноклассников.
Update: Пример взаимодействия с Odnoklassniki Rest API на C#
Update2: C# и API Facebook. Пример размещения записи на стене пользователя с помощью API.
Денис, а нет такого универсального готового класса, с помощью которого можно было организовать авторизацию через соц.сети? это было бы очень удобно :)
ОтветитьУдалитьGurgen, большую работу в этом направлении сделали ребята из проекта http://www.dotnetopenauth.net/ Сейчас у них, если не ошибаюсь, помимо openId есть авторизация через twitter и facebook. Дальше можете расширять.
ОтветитьУдалитьПривет Денис!
ОтветитьУдалитьДелаю как ты пишешь, получаю код https://oauth.vk.com/authorize?client_id=3192659&redirect_uri=http://localhost:26672/API?provider=vkontakte&response_type=code
Потом передаю на https://api.vk.com/oauth/access_token POST данные: client_id={0}&client_secret={1}&code={2} по методике описанной здесь http://rudevelop.spb.ru/2012/02/c-post.html.
Доходит до (return request.GetResponse()) и выдает ошибку "Удаленный сервер возвратил ошибку: (400) Недопустимый запрос".
P.S. Пробовал и на хостинге, та же самая ошибка
Вячеслав, попробуйте вместо POST использовать GET метод. В качестве адреса использовать https://api.vk.com/oauth/access_token?client_id={0}&client_secret={1}&code={2}
ОтветитьУдалитьПро GET метод можно прочитать здесь.
Денис, авторизация пользователя происходит посредством браузера?
ОтветитьУдалитьДа, средствами браузера.
ОтветитьУдалитьДенис, пожалуйста подскажи, мне нужно такое:
ОтветитьУдалитьНа моем сайте посетитель вводит в форму сообщение и наживает отправить, затем эта запись появляется на стене пользователя в вконтакте.
Если нет возможности вконтакте публиковать, то можно и facebook.
Пожалуйста дай наводку.
Нашел в сети такое на php:
Удалитьapi(‘/’.$uid.’/feed’, ‘post’, array(
‘message’ => ‘Сообщение’,
‘name’ => ‘Имя’,
‘description’ => ‘Описание’,
‘caption’ => ‘Дополнительно’,
‘picture’ => ‘http://www.facebookapps.ru/fbp.jpg’,
‘link’ => ‘http://www.facebookapps.ru’
));
?>
Но не знаю (там инструкции нет) что куда вводить.
ВКонтакте закрыли возможность отправлять сообщение на стену через Веб, только через приложения. Раньше такая возможность была. Про Фейсбук смотри здесь http://rudevelop.spb.ru/2012/06/c-api-facebook-api.html
УдалитьДобрый день!
ОтветитьУдалитьТаки нельзя оставить запись на стене юзера, группы с веб-приложения asp.net mvc4 ???
А можно ли получить e-mail юзера?