Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   error_msg: Incorrect signature (http://www.flasher.ru/forum/showthread.php?t=133767)

FW7 12.12.2009 14:30

error_msg: Incorrect signature
 
вот основной класс тестового приложения
Код AS3:

package  
{
        // путь до библиотеки мд5, для просчета сигнатуры запроса к АПИ
        import com.adobe.crypto.MD5;
 
        import flash.display.*;
        import flash.events.*;
        import flash.net.*;
 
        /**
        * Class TestAPI Тестовый запрос к АПИ ВКонтакте и вывод списка друзей пользователя
        * @author Yuriy (Mur4ik) Kulkoff
        * @version 0.1
        * @date 26.07.2009
        */

        public class testAPI extends Sprite
        {
                //ID приложения
                var apiID:String = "735931";
                //Секретный ключ приложения
                var secret:String = "SZvqkJwYoE";
                //режим тестирования(0-выключен,1-включен)
                var testMode:String = "1";
                // Юзер, список друзей которого нужно вывести
                // В данном случае берем юзера просматривающего рпиложение
                var viewerID:String = root.loaderInfo.parameters.viewer_id;
 
                private var friendsList:XML;
 
                public function testAPI()
                {
                        if (stage) getFriends(null);
                        else addEventListener(Event.ADDED_TO_STAGE, getFriends);
                }
 
                public function getFriends(event:Event):void
                {
                        var r:URLRequest = new URLRequest("http://api.vkontakte.ru/api.php");
                        var l:URLLoader = new URLLoader();
                        var v:URLVariables = new URLVariables();
                        // Необходимый метод изи АПИ
                        //var methodFromAPI:String = "getFriends";
                        var methodFromAPI:String = "audio.get";
                        // Для тестов не локально должно быть 0
 
                        v.api_id = apiID;
                        v.aids = "66160268";
                        v.v = "2.0"; // Версия АПИ
                        v.method = methodFromAPI;
                        v.aids = "62484093";
                        v.test_mode = testMode;
                        v.sig = MD5.hash(viewerID + 'api_id=' + apiID + 'method=' + methodFromAPI + 'test_mode=' + testMode + 'v=2.0' + secret);
 
                        r.data = v;
                        r.method = URLRequestMethod.GET;
 
                        l.load(r);
                        l.addEventListener(Event.COMPLETE, loader_completeHandler);
                }
 
                private function loader_completeHandler(event:Event):void
                {
                        friendsList = new XML(event.target.data);
 
                        // Выводим ID друзей
                        friendsList.*.( trace(name() + ": " + toString()) );
 
                }
        }
}

я хочу вывести ОДНУ аудиозапись,но выдается ошибка 4. если убрать строку v.aids = "66160268";,то все работает. что я не так делаю?

udaaff 12.12.2009 15:13

В подписи не все параметры. aids нужно добавить.

У меня чего-то testMode, вообще, отказывается работать в последние два дня. Не могу понять в чем проблема. Любой запрос возвращает ошибку 4 (неправильная сигнатура) и этот пример тоже, если заливаешь на хост, ничего при этом не меняя, то все начинает работать как положено.

FW7 12.12.2009 15:17

Цитата:

В подписи не все параметры. aids нужно добавить.
В каком смысле?я же написал v.aids = "62484093";

udaaff 12.12.2009 15:23

Код AS3:

v.sig = MD5.hash(viewerID + 'aids=' + '62484093' + 'api_id=' + apiID + 'method=' + methodFromAPI + 'test_mode=' + testMode + 'v=2.0' + secret);
//


FW7 12.12.2009 17:20

понял,спасибо. надо было мне документацию внимательней читать)))

sandy5 05.01.2010 02:17

так. не помню где это на форуме было, но хочу вернуться к прежней задаче: вывод в trace список друзей вконтакте. во первых у меня флешь CS4 ругается на эту строчку: 1172: Definition com.adobe.crypto:MD5 could not be found. (import com.adobe.crypto.MD5;)
а потом на это: 1061: Call to a possibly undefined method hash through a reference with static type Class.

вот исходный код:

Код AS3:

package
{
// путь до библиотеки мд5, для просчета сигнатуры запроса к АПИ
import com.adobe.crypto.MD5;
 
import flash.display.*;
import flash.events.*;
import flash.net.*;
 
/**
* Class TestAPI Тестовый запрос к АПИ ВКонтакте и вывод списка друзей пользователя
* @author Yuriy (Mur4ik) Kulkoff
* @version 0.1
* @date 26.07.2009
*/

public class TestAPI extends Sprite
{
private var friendsList:XML;
 
public function TestAPI()
{
if (stage) getFriends(null);
else addEventListener(Event.ADDED_TO_STAGE, getFriends);
}
 
public function getFriends(event:Event):void
{
var r:URLRequest = new URLRequest("http://api.vkontakte.ru/api.php");
var l:URLLoader = new URLLoader();
var v:URLVariables = new URLVariables();
 
// Юзер, список друзей которого нужно вывести
// В данном случае берем юзера просматривающего рпиложение
var viewerID:String = root.loaderInfo.parameters.viewer_id;
//ID приложения
var apiID:String = "1776421";
//Секретный ключ приложения
var secret:String = "4NvIhgWvkm";
// Необходимый метод изи АПИ
var methodFromAPI:String = "getFriends";
// Для тестов не локально должно быть 0
var testMode:String = "1";
 
v.api_id = apiID;
v.v = "2.0"; // Версия АПИ
v.method = methodFromAPI;
v.test_mode = testMode;
v.sig = MD5.hash(viewerID + 'api_id=' + apiID + 'method=' + methodFromAPI + 'test_mode=' + testMode + 'v=2.0' + secret);
 
r.data = v;
r.method = URLRequestMethod.POST;
 
l.load(r);
l.addEventListener(Event.COMPLETE, loader_completeHandler);
}
 
private function loader_completeHandler(event:Event):void
{
friendsList = new XML(event.target.data);
 
// Выводим ID друзей
friendsList.*.( trace(name() + ": " + toString()) );
 
// Далее по этим ID можно узнать более подробную информацию
// с помошью метода getProfiles из АПИ
}
}
}

ну эт еще ладно. я нашел решение(чисто не по человечески)

убрал строчку import com.adobe.crypto.MD5;
и исправил другую на v.sig = MD5.encrypt(viewerID + 'api_id=' + apiID + 'method=' + methodFromAPI + 'test_mode=' + testMode + 'v=2.0' + secret); , благо у меня есть файл MD5.as но мне почему то все равно флеш выдает ошибку error_code: 4
error_msg: Incorrect signature. кто нибудь может выложить исходник или хотя бы подсказать, почему неправильно?

Добавлено через 46 минут
ага. хоть как то разобрался с ошибкой import com.adobe.crypto.MD5;

теперь все вроде правильно, но пишет 1061: Call to a possibly undefined method hash through a reference with static type Class. никто не подскажет в чем я не прав?))

udaaff 05.01.2010 08:46

Где это файл (MD5.as) у вас лежит? И что это, вообще, за класс? com.adobe.crypto.MD5?

Wolsh 05.01.2010 13:33

1. Посмотрите package класса MD5.
2. Если он пустой (просто "package" и сразу фигурная скобка { ) - навряд ли это адобовский класс - проверьте, есть ли у него public static function hash().
Я, к примеру, долгое время пользовался другим классом MD5 и у него были совсем другие названия методов.
3. Если же package - адобовский com.adobe.crypto, то Вам надо в директории проекта создать соответствующую директорию com/adobe/crypto, в которую уже положить файл MD5.as, и снова написать импорт в начале пакета, как в приведенном здесь примере кода.

sandy5 05.01.2010 14:26

ответ udaaff'u: файло MD5 можно скачать отсюда: http://fsca.ru/flash/vkontakte/vksender/vksender.rar. в архиве возьми папку "com". оттуда и будет класс import com.adobe.crypto.MD5;

вопрос ко всем:
предисловие: ну хорошо. все разобрался. теперь он почему то только моих друзей показывает вконтакте.
сам вопрос: как сделать так, чтобы он и у других юзеров показывал друзей? когда я пишу var viewerID:Numer = (ид другого человека, который разрешил все действия приложению), то опять выдает ошибку неправильной сигнатуры

chabapok 06.01.2010 23:13

никак. запукать должно от имени того юзера, в кукисы должны быть того юзера и тд.
Узнать можно только друзей человека, от имени которого запущено приложение, если тот в настройках разрешил. Если все таки очень нужно -- через свой сервер в своей бд пересохранять эти списки.


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

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