| Grienders2 |
06.05.2010 19:58 |
Open Api vkontakte и авторизация на своем сайте
Я делаю авторизацию у себя на сайте через Open Api vkontakte. У меня есть тестовое приложение, оно - не iфрейм, и флэш, оно создано только для тестирования возможности авторизация через вконтакт у меня на сайте - http://vkontakte.ru/app1862027_51966464.
На сайте на странице логина как и положено: App_Init, окошко для авторизации и т.д.
Код HTML:
<div id="vk_api_transport"></div>
<div id="vk_login_button" onclick="loginUser()"></div>
<script src="http://vkontakte.ru/js/api/openapi.js" type="text/javascript" charset="windows-1251"></script>
<script type="text/javascript">
VK.init({
apiId: 1862027,
nameTransportPath: "/xd_receiver.html"
});
VK.UI.button('vk_login_button');
function vk_login() {
VK.Auth.login(vk_login_callback);
return false;
}
function vk_login_callback(response) {
if (response.status == "connected") {
getInitData();
}
};
function getInitData() {
var code;
code = 'return {'
code += 'me: API.getProfiles({uids: API.getVariable({key: 1280}), fields: "photo"})[0]';
code += '};';
VK.Api.call('execute', { 'code': code }, onGetInitData);
}
function onGetInitData(data) {
var r;
if (data.response) {
// alert('da1');
r = data.response;
if (r.me) {
document.write(r.me.first_name + ' ' + r.me.last_name + '<br/><a href="http://vkontakte.ru/id' + r.me.uid + '"><img width="50" height ="50" src="' + r.me.photo + '"/>');
}
} else {
alert('no');
}
}
function loginUser() {
vk_login();
onGetInitData();
}
</script>
Вот только не пойму: если мне нужно будет получить ну например данные пользователя (API.getProfiles()) уже авторизованного пользователя н е из html страницы, а из кода asp.net (или php, не важно), то есть на серверной стороне то как мне это сделать?
Вот пример, который возвращает ошибку 5 - пользователь не авторизован или 4 - неправильная подпись. Сделан в виде консольного приложения
Код:
public class MyVkTester
{
public Random rnd = new Random();
public string MD5(string instr)
{
string strHash = string.Empty;
foreach (byte b in new MD5CryptoServiceProvider().ComputeHash(Encoding.UTF8.GetBytes(instr)))
{
strHash += b.ToString("x2").ToLower();
}
return strHash;
}
public int UnixTime()
{
TimeSpan ts;
ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0));
return (int)ts.TotalSeconds;
}
public string SendRequest()
{
string apiid =
"?????";
string userid = "51966464";
string appSecureKey =
"?????????????????";
string version = "2.0";
int time = UnixTime();
int unique = rnd.Next(50000);
string sig = MD5("api_id="+apiid + "method=getGroupsrandom=" +
unique +"test_mode=1"+"timestamp=" + time + "v=2.0" + appSecureKey);
string xml = @"http://api.vkontakte.ru/api.php?api_id=" + apiid + "&method=getGroups&random=" + unique + "&test_mode=1" + "×tamp=" + time + "&sig=" + sig;
return xml;
}
}
class Program
{
static void Main(string[] args)
{
MyVkTester test = new MyVkTester();
string a =test.SendRequest();
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(a);
req.Method = "GET";
var response = (HttpWebResponse)req.GetResponse();
using (var stream = new StreamReader(response.GetResponseStream()))
{
var result = stream.ReadToEnd();
Console.WriteLine(result);
}
}
|