Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   Incorrect Signature. Помогите новичку в VK API! (http://www.flasher.ru/forum/showthread.php?t=142865)

ChromeUS 02.08.2010 07:22

Incorrect Signature. Помогите новичку в VK API!
 
Здравствуйте!
В AS3 я не новичок, занимаюсь им довольно долго, но вот с VK API у меня возникла проблема.
(знаю что тема не раз обсуждалась, но пожалуйста, не пинайте. Способы в существующих темах не помогли)
Привожу исходник всего приложения:
Код AS3:

package {
  import flash.display.Sprite;
 
  import flash.text.*;
  import flash.events.*;
  import flash.net.URLLoader;
  import flash.net.URLRequest;
  import flash.display.*;
  import vk.APIConnection;
  import vk.events.*;
  import vk.ui.VKButton;
  import utils.MD5;
 
  public class TestApp extends Sprite {
          private var api_id:Number = app_key; // id  приложения
      private var api_secret:String="app_secret"; // секретный ключ
      private var externalXML:XML;
      private var loader:URLLoader = new URLLoader();
      private var viewer_id:Number;
      private var sig:String;
      private var uid:String;
          private var method:String = "getUserInfo";
          private var test_mode:Number = 1;
          private var v:String = "2.0";
 
    public function TestApp() {
        var params:Object=LoaderInfo(root.loaderInfo).parameters;
        viewer_id = (params['viewer_id']) ? parseInt(params['viewer_id']) : 1;
                //getProfile(viewer_id);
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
    }
    private function init(e: Event = null): void {
//var strtosig:String = viewer_id+'api_id='+api_id+'fields=first_namemethod=getProfilesuids='+viewer_id+'v=2.0'+api_secret;
//sig=MD5.encrypt(strtosig);
//var request:URLRequest=new URLRequest("http://api.vkontakte.ru/api.php?api_id="+api_id+"&method=getProfiles&uids="+viewer_id+"&fields=first_name,last_name&v=2.0&sig="+sig);
sig=MD5.encrypt(viewer_id+'api_id='+api_id+'fields=bdate,photo_bigmethod=getProfilestest_mode=1uids='+uid+'v=2.0'+api_secret);
var request:URLRequest=new URLRequest("http://api.vkontakte.ru/api.php?api_id="+api_id+"&fields=bdate,photo_big&method=getProfiles&test_mode=0&uids="+uid+"&v=2.0&sig="+sig);
        loader.load(request);
        loader.addEventListener(Event.COMPLETE, init);
        externalXML=new XML(loader.data);
        var addApp: VKButton = new VKButton('Настройки приложения');
                addApp.x = 472;
                addApp.y = 8;
                addChild(addApp);
                var btn: VKButton = new VKButton('Посчитать');
            btn.x = 284;
            btn.y = 166;
                var uname = externalXML..furst_name;
            addChild(btn);
                hello.text = "Здравствуйте, " + uname;
            btn.addEventListener(MouseEvent.CLICK, function(e: Event):void{
                    MD1.text = MD5.encrypt(txt_Data.text);
            });
                addApp.addEventListener(MouseEvent.CLICK, function(e: Event):void{
                    VK.callMethod(showSettingsBox, 0);
            });
    }
  }
}

Выдает некорректную сигнатуру...
В чем может быть проблема?
Мое мнение: тут ведь вроде нужен хеш, а не сумма? Насколько я себе представляю - это разные вещи...:o
НО! Попробовал так:
Код AS3:

package {
  import flash.display.Sprite;
 
  import flash.text.*;
  import flash.events.*;
  import flash.net.URLLoader;
  import flash.net.URLRequest;
  import flash.display.*;
  import vk.APIConnection;
  import vk.events.*;
  import vk.ui.VKButton;
  import com.adobe.crypto.MD5;
 
  public class TestApp extends Sprite {
          private var api_id:Number = app_id; // id вашего приложения
      private var api_secret:String="app_secret"; // секретный ключ
      private var externalXML:XML;
      private var loader:URLLoader = new URLLoader();
      private var viewer_id:Number;
      private var sig:String;
      private var uid:String;
          private var method:String = "getUserInfo";
          private var test_mode:Number = 1;
          private var v:String = "2.0";
 
    public function TestApp() {
        var params:Object=LoaderInfo(root.loaderInfo).parameters;
        viewer_id = (params['viewer_id']) ? parseInt(params['viewer_id']) : 1;
                //getProfile(viewer_id);
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
    }
    private function init(e: Event = null): void {
sig=MD5.hash(viewer_id+'api_id='+api_id+'fields=last_name, furst_namecids=1method=getProfilestest_mode=1uids='+uid+'v=2.0'+api_secret);
var request:URLRequest=new URLRequest("http://api.vkontakte.ru/api.php?api_id="+api_id+"&fields=last_name, furst_name&cids=1&method=getProfiles&test_mode=0&uids="+uid+"&v=2.0&sig="+sig);
        loader.load(request);
        loader.addEventListener(Event.COMPLETE, init);
        externalXML=new XML(loader.data);
        var addApp: VKButton = new VKButton('Настройки приложения');
                addApp.x = 472;
                addApp.y = 8;
                addChild(addApp);
                var btn: VKButton = new VKButton('Посчитать');
            btn.x = 284;
            btn.y = 166;
                var uname = externalXML..furst_name;
            addChild(btn);
                hello.text = "Здравствуйте, " + uname;
            btn.addEventListener(MouseEvent.CLICK, function(e: Event):void{
                    MD1.text = MD5.hash(txt_Data.text);
            });
                addApp.addEventListener(MouseEvent.CLICK, function(e: Event):void{
                    VK.callMethod(showSettingsBox, 0);
            });
    }
  }
}

.......
Не помогло(((
Буду очень признателен за помощь :rolleyes:

Genzo 02.08.2010 13:15

параметры внутри хэша должны идти в алфовитном порядке!!

Код AS3:

private function generateSig():String
                {
                        var signature = "";
                        var params:Object = this.variables;
                        var sorted_array: Array = new Array();
                        for (var i: String in params) {
                                sorted_array.push(i + "=" + params[i]);
 
                        }
                        sorted_array.sort();
                        for (var key in sorted_array) {
                        signature += sorted_array[key];
                      }
 
                      signature = this.viewer_id + signature + this.secret_key;
                      return MD5.encrypt(signature);
                }


ChromeUS 02.08.2010 13:55

Незнаю почему, но опять ошибка!
Не работает.
Может я чего неверно сделал?
Код AS3:

package {
  import flash.display.Sprite;
 
  import flash.text.*;
  import flash.events.*;
  import flash.net.URLLoader;
  import flash.net.URLRequest;
  import flash.display.*;
  import vk.APIConnection;
  import vk.events.*;
  import vk.ui.VKButton;
  import vk.gui.*;
  //import com.adobe.crypto.MD5;
  import vk.api.MD5;
 
  public class TestApp extends Sprite {
          private var api_id:Number = 1915617; // id вашего приложения
      private var api_secret:String="4wCVuJQfxB"; // секретный ключ
      private var externalXML:XML;
      private var loader:URLLoader = new URLLoader();
      private var viewer_id:Number;
      private var sig:String;
      private var uid:String;
          private var method:String = "getUserInfo";
          private var test_mode:Number = 1;
          private var v:String = "2.0";
private function generateSig():String
                {
                        var signature = "";
                        var params:Object=LoaderInfo(root.loaderInfo).parameters;
                        var sorted_array: Array = new Array();
                        for (var i: String in params) {
                                sorted_array.push(i + "=" + params[i]);
 
        }
                        sorted_array.sort();
                        for (var key in sorted_array) {
                        signature += sorted_array[key];
    }
 
                      signature = this.viewer_id + signature + this.api_secret;
                      return MD5.encrypt(signature);
}
 
    public function TestApp() {
                sig = generateSig();
        var params:Object=LoaderInfo(root.loaderInfo).parameters;
        viewer_id = (params['viewer_id']) ? parseInt(params['viewer_id']) : 1;
                //getProfile(viewer_id);
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
    }
//      private function getProfile(uid):void { // функция получения профиля
//        sig=MD5.encrypt(viewer_id+"api_id="+api_id+"method="+method+"test_mode="+test_mode+"v="+v+api_secret);
//        var request:URLRequest=new URLRequest("http://api.vkontakte.ru/api.php?api_id="+api_id+"&method="+method+"&uid="+viewer_id+"&v=2.0&sig="+sig);
//        loader.load(request);
//        loader.addEventListener(Event.COMPLETE, init);
//      }
    private function init(e: Event = null): void {
//var strtosig:String = viewer_id+'api_id='+api_id+'fields=first_namemethod=getProfilesuids='+viewer_id+'v=2.0'+api_secret;
//sig=MD5.encrypt(strtosig);
//var request:URLRequest=new URLRequest("http://api.vkontakte.ru/api.php?api_id="+api_id+"&method=getProfiles&uids="+viewer_id+"&fields=first_name,last_name&v=2.0&sig="+sig);
//sig=MD5.hash(viewer_id+'api_id='+api_id+'fields=last_name, furst_namecids=1method=getProfilestest_mode=1uids='+uid+'v=2.0'+api_secret);
var request:URLRequest=new URLRequest("http://api.vkontakte.ru/api.php?api_id="+api_id+"&fields=last_name, furst_name&cids=1&method=getProfiles&test_mode=0&uids="+uid+"&v=2.0&sig="+sig);
        loader.load(request);
        externalXML=new XML(loader.data);
        var addApp: VKButton = new VKButton('Настройки приложения');
                addApp.x = 472;
                addApp.y = 8;
                addChild(addApp);
                var btn: VKButton = new VKButton('Посчитать');
            btn.x = 284;
            btn.y = 166;
                var uname = externalXML..furst_name;
            addChild(btn);
                hello.text = "Здравствуйте, " + uname;
            btn.addEventListener(MouseEvent.CLICK, function(e: Event):void{
                    MD1.text = MD5.encrypt(txt_Data.text);
                        //yy.text = "http://api.vkontakte.ru/api.php?api_id="+api_id+"&fields=last_name, furst_name&cids=1&method=getProfiles&test_mode=0&uids="+uid+"&v=2.0&sig="+sig;
            });
                addApp.addEventListener(MouseEvent.CLICK, function(e: Event):void{
                    callMethod("showSettingsBox");
            });
    }
  }
}


Genzo 02.08.2010 15:44

Код AS3:

var params:Object=LoaderInfo(root.loaderInfo).parameters;

это не правильно , ты параметрам передаешь URLVariables!

Код AS3:

public function VkRequest( action: String , viewer_id:int , params: Object = null)
                {
                        this.viewer_id = viewer_id;
                        this.variables = new URLVariables();
                        this.variables.method = action;
                        this.variables.api_id = this.api_id;
                        this.variables.v = "2.0";
 
                        this.variables.test_mode= "1";
 
                        for (var i: String in params) {
                                this.variables[i] = params[i];                               
                        }
 
                        this.variables.sig = generateSig();
 
                        request = new URLRequest( this.vk_url );
                        request.method = URLRequestMethod.POST;
                        request.data = this.variables;
 
                        loader = new URLLoader();
                }
                public function send()
                {
                        loader.addEventListener( Event.COMPLETE, onRequestComplete );
 
                        loader.addEventListener( ErrorEvent.ERROR, onRequestComplete );
                        loader.load( this.request );
                }
 
                private function generateSig():String
                {
                        var signature = "";
                        var params:Object = this.variables;
                        var sorted_array: Array = new Array();
                        for (var i: String in params) {
                                sorted_array.push(i + "=" + params[i]);
 
                        }
                        sorted_array.sort();
                        for (var key in sorted_array) {
                        signature += sorted_array[key];
                      }
 
                      signature = this.viewer_id + signature + this.secret_key;
                      return MD5.encrypt(signature);
                }
 
                public function onRequestComplete( e: Event )
                {
                        trace(e.target.data);
                }



Часовой пояс GMT +4, время: 07:17.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.