Итак, как и обещал, продолжаю тему взаимодействия с различными API. В прошлый раз писал про API ВКонтакте, сегодня напишу про API Одноклассников.
Первое, что нам нужно сделать - это зарегистрироваться как разработчик на Одноклассниках.
Сделать это можно по следующей ссылке Форма регистрации разработчика приложений
Получив права разработчика, необходимо зарегистрировать сайт как приложение. Подробно как это сделать можно прочитать здесь
После того как сайт будет зарегистрирован придет письмо, содержащее:
Application ID: xxxxxx.
Публичный ключ приложения: xxxxxxxxxxxxxxxxxxxxxxxxx.
Секретный ключ приложения: xxxxxxxxxxxxxxxxxxxxxxxxx.
Ссылка на приложение: http://www.odnoklassniki.ru/games/xxxxx
Используя эти данные можно начать работу с API.
http://www.odnoklassniki.ru/oauth/authorize?client_id={0}&scope={1}&response_type=code&redirect_uri={2} , где
Первое, что нам нужно сделать - это зарегистрироваться как разработчик на Одноклассниках.
Сделать это можно по следующей ссылке Форма регистрации разработчика приложений
Получив права разработчика, необходимо зарегистрировать сайт как приложение. Подробно как это сделать можно прочитать здесь
После того как сайт будет зарегистрирован придет письмо, содержащее:
Application ID: xxxxxx.
Публичный ключ приложения: xxxxxxxxxxxxxxxxxxxxxxxxx.
Секретный ключ приложения: xxxxxxxxxxxxxxxxxxxxxxxxx.
Ссылка на приложение: http://www.odnoklassniki.ru/games/xxxxx
Используя эти данные можно начать работу с API.
Для выполнения запросов к API пользователь должен авторизоваться в Одноклассниках.
Добавляем на нашем сайте ссылку для авторизации пользователя:
client_id - Application ID;
scope - это уровень доступа к действиям пользователя, отделенный ';' (VALUABLE ACCESS;SET STATUS;PHOTO CONTENT);
redirect_uri - адрес нашего сайта, куда вернется пользователь после авторизации.
После авторизации пользователь возвращается на наш сайт. Следующее действие - это получение access_token, с помощью которого мы сможем выполнять запросы к API.
Для получения access_token нам потребуется параметр code, который передается как параметр в момент переадресации пользователя на наш сайт.
Итак, выполняем наш C# POST метод. В качестве адреса указываем http://api.odnoklassniki.ru/oauth/token.do, а в качестве параметров: client_id={0}&client_secret={1}&code={2}&redirect_uri={3},
где
client_id - Application ID;
client_secret - Секретный ключ приложения;
code - параметр, получаемый из запроса Request.QueryString["code"];
redirect_uri - адрес нашего сайта
Метод возвращает json, содержащий access_token. Json я десериализую в объект. Об этом писал здесь.
Теперь, зная access_token, можно делать запросы к API.
Допустим мы хотим обновить статус пользователя (не забываем для этого запросить уровень доступа SET STATUS).
Для выполнения запроса нам нужно сформировать цифровую подпись, являющуюся MD5Hash-ем от конкатенации двух строк: access_token и секретного ключа приложения.
var sigSecret = GetMD5Hash(string.Format("{0}{1}", access_token, client_secret ));
GetMD5Hash - метод получения Hash-a строки, о котором я писал ранее
Теперь выполняем полюбившийся уже нам C# POST метод. В качестве адреса указываем http://api.odnoklassniki.ru/fb.do, а в качестве параметров: access_token={0}&method=users.setStatus&status=Новый статус&sig={1}, где
sig - MD5Hash от следующей строки: method=users.setStatusstatus=Новый статусsigSecret (sigSecret - значение, полученное ранее)
Параметры выполнения других методов API можете посмотреть в документации.
где
client_id - Application ID;
client_secret - Секретный ключ приложения;
code - параметр, получаемый из запроса Request.QueryString["code"];
redirect_uri - адрес нашего сайта
Метод возвращает json, содержащий access_token. Json я десериализую в объект. Об этом писал здесь.
Теперь, зная access_token, можно делать запросы к API.
Допустим мы хотим обновить статус пользователя (не забываем для этого запросить уровень доступа SET STATUS).
Для выполнения запроса нам нужно сформировать цифровую подпись, являющуюся MD5Hash-ем от конкатенации двух строк: access_token и секретного ключа приложения.
var sigSecret = GetMD5Hash(string.Format("{0}{1}", access_token, client_secret ));
GetMD5Hash - метод получения Hash-a строки, о котором я писал ранее
Теперь выполняем полюбившийся уже нам C# POST метод. В качестве адреса указываем http://api.odnoklassniki.ru/fb.do, а в качестве параметров: access_token={0}&method=users.setStatus&status=Новый статус&sig={1}, где
sig - MD5Hash от следующей строки: method=users.setStatusstatus=Новый статусsigSecret (sigSecret - значение, полученное ранее)
Параметры выполнения других методов API можете посмотреть в документации.
Денис, спасибо за познавательный пост. В доках Одноклассников без поллитра не разобраться...
ОтветитьУдалитьНе подскажете что вообще дает добавление приложения в Одноклассники? Добавлю я его туда, сделаю oAuth через них, что дальше? Покажут ли они мое приложение где-то в каталогах? Есть ли у них партнерки из разряда регистрируется пользователь в приложении, покупает что-то через него (допустим игра), они получают за это процент и продвигают приложение в топах? Я что-то такое слышал, но по их документации разобраться невозможно. Может быть подскажете где почитать или может вы уже об этом писали?
Александр,
intel_nu@mail.ru
Александр, в моем случае я добавлял приложение в Одноклассниках только для того, чтобы получить Application ID, Публичный ключ приложения и Секретный ключ приложения. С помощью этих данных я могу на своем сайте (а не на сайте Одноклассников) работать с данными пользователя и выполнять действия от лица пользователя. Как отображается мое приложение в каталогах Одноклассников я не смотрел, но подозреваю что они его не выводят. Так как оно пустое само по себе.
ОтветитьУдалитьСпасибо, буду копать дальше.
ОтветитьУдалитьДобрый день Денис! Я сейчас занимаюсь разработкой WPF клиента для Одноглазников, используя REST API. Реализовав архитектуру ядра я столкнулся с проблемой аутентификации.
ОтветитьУдалитьПроблема в генерации sig. Я так и не понял, какие поля нужно конкатенировать и для первой аутентификации для получения полного доступа приложения ко всем данным пользователя.
В чём разница между OAuth и auth.login
Arnezami, у меня авторизация пользователя идет через веб, возможно для настольных приложений принцип авторизации другой.
ОтветитьУдалитьЗдравствуйте, делаю все как написано, но в результате получаю ошибку
ОтветитьУдалитьPARAM_SIGNATURE : Invalid signature f4b047153b5fb46fd07ff3f4d0f62159, calculated by string application_key=CBAPHDGGABABABABAmethod=users.getCurrentUser********SECRET KEY*******
в чем может быть проблема?
кодировка, регистр бук нужно определенный указывать?
Спасибо.
Кодировка UTF8 используется в методе GetMD5Hash Регистр не менял.
ОтветитьУдалитьПроверьте последовательность действий. Сначала получаем
var sigSecret = GetMD5Hash(string.Format("{0}{1}", access_token, client_secret ));
Затем полученный sigSecret используем для получения контрольной подписи. Для моего примера контрольная подпись:
sig - MD5Hash от следующей строки: method=users.setStatusstatus=Новый статусsigSecret (sigSecret - значение, полученное ранее)
Денис, спасибо за быстрый ответ, всему виной моя невнимательность.
ОтветитьУдалитьДоброго времени суток
ОтветитьУдалитьТут ошибка, url от facebook
" В качестве адреса указываем https://graph.facebook.com/oauth/access_token, а в качестве параметров: client_id={0}&client_secret={1}&code={2}&redirect_uri={3},
где...."
should be http://api.odnoklassniki.ru/oauth/token.do
УдалитьДобрый вечер
ОтветитьУдалитьВ вызове функции
var response = PostMethod("client_id=AppID&client_secret=SECRET&code=CODE&redirect_uri=http://localhost:8990/odno.aspx", "http://api.odnoklassniki.ru/oauth/token.do");
на строке
return (HttpWebResponse)request.GetResponse();
я получаю ошибку
System.Net.WebException: The remote server returned an error: (417) Expectation failed.
Что не так? покапался в гугле, нужно отключить
request.ProtocolVersion = HttpVersion.Version10;
но после этого получаю ошибку 400 bad request
подскажите, что я делаю не так?
Спасибо заранее
Gugren, попробуйте выполнить рекомендации, которые описаны здесь.
ОтветитьУдалитьСпасибо, на сервере все работает, ошибка вероятно выдавалась из-за прокси сервера локального компа...
УдалитьПри получении токена надо еще указывать grant_type=authorization_code. Иначе 400 Bad Request
ОтветитьУдалитьКак все же отправить:
ОтветитьУдалитьПосле авторизации пользователь возвращается на наш сайт. Следующее действие - это получение access_token, с помощью которого мы сможем выполнять запросы к API.
Для получения access_token нам потребуется параметр code, который передается как параметр в момент переадресации пользователя на наш сайт.
Итак, выполняем наш C# POST метод. В качестве адреса указываем http://api.odnoklassniki.ru/oauth/token.do, а в качестве параметров: client_id={0}&client_secret={1}&code={2}&redirect_uri={3},
где
client_id - Application ID;
client_secret - Секретный ключ приложения;
code - параметр, получаемый из запроса Request.QueryString["code"];
redirect_uri - адрес нашего сайта
можно по подробнее, ничего не могу понять как?
И всетаки хотелось бы увидеть полный пример вызова (любого) - то что написано тут в комментариях меня только запутало ((( + совсем непонятно, как делать разбор полученного от сервера ответа (((
ОтветитьУдалитьСпасибо!
ОтветитьУдалить