Open Api vkontakte и авторизация на своем сайте

Discussion in 'PHP' started by Grienders2, 6 May 2010.

  1. Grienders2

    Grienders2 New Member

    Joined:
    5 May 2010
    Messages:
    4
    Likes Received:
    1
    Reputations:
    0
    Я делаю авторизацию у себя на сайте через 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 - неправильная подпись. Сделан в виде консольного приложения

    Code:
    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" + "&timestamp=" + 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);
               }
    
            }
    
     
  2. Grienders2

    Grienders2 New Member

    Joined:
    5 May 2010
    Messages:
    4
    Likes Received:
    1
    Reputations:
    0