|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Aug 2010
Адрес: Асбест
Сообщений: 2
|
Incorrect Signature. Помогите новичку в VK API!
Здравствуйте!
В AS3 я не новичок, занимаюсь им довольно долго, но вот с VK API у меня возникла проблема. (знаю что тема не раз обсуждалась, но пожалуйста, не пинайте. Способы в существующих темах не помогли) Привожу исходник всего приложения: 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); }); } } } В чем может быть проблема? Мое мнение: тут ведь вроде нужен хеш, а не сумма? Насколько я себе представляю - это разные вещи... НО! Попробовал так: 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); }); } } } Не помогло((( Буду очень признателен за помощь Последний раз редактировалось ChromeUS; 02.08.2010 в 07:24. Причина: Забыл еще знак "=", но все равно не робит |
|
|||||
параметры внутри хэша должны идти в алфовитном порядке!!
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); } |
|
|||||
Регистрация: Aug 2010
Адрес: Асбест
Сообщений: 2
|
Незнаю почему, но опять ошибка!
Не работает. Может я чего неверно сделал? 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"); }); } } } |
|
|||||
это не правильно , ты параметрам передаешь URLVariables!
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, время: 06:27. |
|
« Предыдущая тема | Следующая тема » |
Теги |
4 error , vk |
Опции темы | |
Опции просмотра | |
|
|