Просмотр полной версии : [Вконтакте] error_msg: Incorrect signature
вот основной класс тестового приложения
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";,то все работает. что я не так делаю?
В подписи не все параметры. aids нужно добавить.
У меня чего-то testMode, вообще, отказывается работать в последние два дня. Не могу понять в чем проблема. Любой запрос возвращает ошибку 4 (неправильная сигнатура) и этот пример тоже, если заливаешь на хост, ничего при этом не меняя, то все начинает работать как положено.
В подписи не все параметры. aids нужно добавить.
В каком смысле?я же написал v.aids = "62484093";
v.sig = MD5.hash(viewerID + 'aids=' + '62484093' + 'api_id=' + apiID + 'method=' + methodFromAPI + 'test_mode=' + testMode + 'v=2.0' + secret);
//
понял,спасибо. надо было мне документацию внимательней читать)))
так. не помню где это на форуме было, но хочу вернуться к прежней задаче: вывод в 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.
вот исходный код:
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. никто не подскажет в чем я не прав?))
Где это файл (MD5.as) у вас лежит? И что это, вообще, за класс? com.adobe.crypto.MD5?
1. Посмотрите package класса MD5.
2. Если он пустой (просто "package" и сразу фигурная скобка { ) - навряд ли это адобовский класс - проверьте, есть ли у него public static function hash().
Я, к примеру, долгое время пользовался другим классом MD5 и у него были совсем другие названия методов.
3. Если же package - адобовский com.adobe.crypto, то Вам надо в директории проекта создать соответствующую директорию com/adobe/crypto, в которую уже положить файл MD5.as, и снова написать импорт в начале пакета, как в приведенном здесь примере кода.
ответ 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
никак. запукать должно от имени того юзера, в кукисы должны быть того юзера и тд.
Узнать можно только друзей человека, от имени которого запущено приложение, если тот в настройках разрешил. Если все таки очень нужно -- через свой сервер в своей бд пересохранять эти списки.
У меня тоже не получается правильно вычислить сигнатуру, я новичок в апи вконтакта. Для метода getProfiles вычисляю так:
var sig=MD5.hash("мой_айдиapi_id=ади_приложенияmethod=getProfilesv=2.0секрет");
var request:URLRequest = new URLRequest("http://api.vkontakte.ru/api.php?api_id=айди_приложения&v=2.0&method=getProfiles&uids=мой_айди&sig="+sig);
var loader:URLLoader = new URLLoader();
loader.load(request);
loader.addEventListener(Event.COMPLETE, onComplete);
//и так далее
в результате получаю что-то такое:
<?xml version="1.0" encoding="utf-8"?>
<error>
<error_code>4</error_code>
<error_msg>Incorrect signature</error_msg>
<request_params list="true">
<param>
<key>api_id</key>
<value>айди_приложения</value>
</param>
<param>
<key>v</key>
<value>2.0</value>
</param>
<param>
<key>method</key>
<value>getProfiles</value>
</param>
<param>
<key>uids</key>
<value>мой_айди</value>
</param>
<param>
<key>sig</key>
<value>5a3cf0ab0ee7b70ce56eeadaf9b89645</value>
</param>
</request_params>
</error>
секрет беру со страницы редактирования, а не платежей.
если поменять api.vkontakte.ru/api.php на api.vk.com/api.php, то вообще выдаёт ошибку 5 (ошибка авторизации).
вроде всё по их документации. что я делаю неправильно?:(
Читайте про то, как правильно подпись формировать http://vkontakte.ru/pages.php?o=-1&p=%C2%E7%E0%E8%EC%EE%E4%E5%E9%F1%F2%E2%E8%E5%20%EF%F0%E8%EB%EE%E6%E5%ED%E8%FF%20%F1%20API
Так дело в том, что я отсюда же и брал. viewer_id и api_id получаю из flashVars (проверял, получаются какие надо). Далее размещаю всё в порядке, как там написано
var met:String="getProfiles";
var skey:String="ключ";
var sig=MD5.hash(viewerID+'api_id='+apiID+'method='+met+'v=2.0'+skey);
результат тот же..
(при этом, я так понял, при формировании запроса порядок переменных кроме апи_айди и сиг не важен? запрос такой:
"http://api.vkontakte.ru/api.php?api_id="+aipID+"&v=2.0&method="+met+"&uids="+viewerID+"&sig="+sig)
В запросе конечно же не важен.
Далее размещаю всё в порядке, как там написано
Не всё. uids'a нету в подписи.
Да, помогло. Потом до меня даже безболезненно дошло, что если добавляю fields в запрос, то нужно его добавить и в подпись. За что Вам большое спасибо:)
а мне не помогло.. уже все документацию до дыр протерла, но никак не выходит получить getUserInfoEx.
:( не понимаю что не так делаю( вроде все по правилам.
посылаю запрос в адресной строке браузера и в ответ вместо желаемого XML выводится сообщение об ошибке с неправильной сигнатурой.
<error_msg>Incorrect signature</error_msg>
а может дело в том, что обязательно нужно запрашивать методы из самого приложения? :wacko: подскажите пожалуйста!
пс-моя ссылка для получения getUserInfoEx :umnik2:
"http://api.vkontakte.ru/api.php?api_id="+id приложения+"&v=2.0&method=getUserInfoEx&sig="+MD5[мой id+"api_id="+id приложения+"method=getUserInfoExv=2.0secret"]
HotIceCream
13.05.2010, 07:24
Yamaha , раз говорит о неправильной сигнатеру, то покажите как вы ее формируете.
формирую сигнатуру с помощью этого сайта http://www.kontrolnaya-rabota.ru/s/online-calculators/md5/ там онлайн md5 генератор
записываю такую строку:
МОЙАЙДИВКОНТАКТЕapi_id=АЙДИМОЕГОПРИЛОЖЕНИЯmethod=getUserInfoExv=2.0secret
с виду же правильно.. :o так как в навконтактовой документации написано:
sig = md5(viewer_idname1=value1name2=value2secret)
В данном случае sig равен md5("6492api_id=4method=getFriendsv=2.0secret")
то есть b499ce268e9995a08b2f2aebff2488be
(из вконтакта)
:wacko:
Параметр sig равен md5 от конкатенации следующих строк:
* пар "parameter_name=parameter_value", расположенных в порядке возрастания имени параметра (по алфавиту).
Вот на этот пункт ты не обратил внимания.
Нет, всё правильно.
Вот на этот пункт ты не обратил внимания.
но у меня все по алфавиту же..
1.МОЙАЙДИВКОНТАКТЕ
2.api_id=АЙДИМОЕГОПРИЛОЖЕНИЯ
3.method=getUserInfoEx
4.v=2.0
5.secret
попробовала сделать запрос из примера вконтакта, с целью получить getFriends. то же самое :(
http://api.vkontakte.ru/api.php?api_id=АЙДИАПИ&method=getFriends&v=2.0&sig=7df24b447d350b7377920a9ce3b74bcf
где 7df24b447d350b7377920a9ce3b74bcf== md5(МОЙАЙДИapi_id=АЙДИАПИmethod=getFriendsv=2.0secret)
может приложение нужно как то особо настраивать?
ПС-оно у меня в настройках "включено и доступно всем", повторюсь ссылку вписываю в адресную строку браузера, не из моего флеш-приложения
Добавлено через 7 часов 50 минут
Вот на этот пункт ты не обратил внимания.
Нет, всё правильно.
:wacko: так в чем же дело..
вечно у меня ничего не работает.. :(
где 7df24b447d350b7377920a9ce3b74bcf== md5(МОЙАЙДИapi_id=АЙДИАПИmethod=getFriendsv=2.0secret)
меня смутило "МОЙАЙДИ". имеется ввиду viewer_id или как?
3.method=getUserInfoExэтот метод хоть поддерживается ещё?:confused:
ПС-оно у меня в настройках "включено и доступно всем", повторюсь ссылку вписываю в адресную строку браузера, не из моего флеш-приложения
Если бы было выключено, то выдало бы Application is disabled. Enable your application or use test mode.
Запрос составлен правильно. Строка браузера тут не причем также. Неправильная подпись значит. Ключ может не тот вставляете.
меня смутило "МОЙАЙДИ". имеется ввиду viewer_id или как?
этот метод хоть поддерживается ещё?:confused:
да, я имею ввиду viewer_id.. а узнаю я его из моего приложения. оно форычем выводит все флэш варсы.. ну и потом это ж мой айдишник вконтакте..
пс - омг ну этот метод числится в устаревших.. но что он от этого уже не работает?
ну я еще пробовала с getFriends.. такая же ошибка.. :( может md5 на сайте криво формируется.. уже так долго неполучается осилить этот затык :wacko:
Добавлено через 2 минуты
Если бы было выключено, то выдало бы Application is disabled. Enable your application or use test mode.
да я помню такую ошибку - поэтому приложение включила в настройках. пробовала при выключенном делать и добавлять test_mode=1 но та же ошибка была с инкорректной сигнатурой.
Добавлено через 4 часа 3 минуты
Итак, нашла вконтакте простое приложение
http://vkontakte.ru/app743131
добавила его на свою страницу, в настройках разрешила доступ ко всему.
попыталась получить (на основе его айдишника) список своих аудиозаписей. то же самое. некорректная сигнатура.
http://api.vkontakte.ru/api.php?api_id=743131&method=audio.get&v=2.0&sig=d5f99a3835c024eafcd428b2c8e4c61a
где d5f99a3835c024eafcd428b2c8e4c61a = MD5 от строки
******api_id=743131method=audio.getv=2.0secret
ну ****** тут - это мой viewer_id
возвращает <error_msg>Incorrect signature</error_msg> со всеми вытекающими..
как говорится, It drives me crazy.. :wacko:
В конце у тебя "secret".
Ты заменяешь его на секретный ключ приложения?
В конце у тебя "secret".
Ты заменяешь его на секретный ключ приложения?
ой :eek: спасибо, какая то я невнимательная :umnik2: на автомате писала слово secret..)
но я не нашла где там в редактировании приложение можно вводить секретный ключ?
есть только Ключ приложения и Защищенный ключ..
Добавлено через 3 минуты
на автомате писала слово secret..)
Ну вот :)
Secret - это "ключ приложения".
Добавлено через 3 минуты
Ну вот :)
Secret - это "ключ приложения".
о.. оооооооооо!!! большое спасибо! заработало!!! :victory: фуф.. :)
премного благодарю!!!
У меня следующая проблема.
Посчу на стену, (фото загружается ок), далее делаю запрос wall.savePost.
При попытке отправить кириллицу в message, получаю сабж. Пробовал в различных комбинациях (мыслимых и немыслимых) использовать escape/encodeURI(), в ответе вместе с сообщением об ошибке приходит то нормальное message, то кракозябры (!).
Вопрос, как правильно заэнкодить и отправить всё это дело?
в sig подставляйте просто message, в запрос escapeMultiByte(message)
Спасибо. Но не работает. Может быть класс MD5 левый... Вы каким пользуетесь, из corelib?
И точно левый был. Из Corelib взял - всё ок)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.