Страница 1 из 2
Подскажите, что неправильно (getUserBalance)
Добавлено: 08 авг 2010, 13:35
Alf162
Я только начинаю изучать эти вещи, вроде все делаю правильно, а баланс не показывает
Код: Выделить всё
package { import flash.net.*; import flash.display.*; import flash.events.*; import flash.text.*; import vk.VkApiNode; public class Main extends Sprite { private var api_id:Number=1918008;// id вашего приложения private var api_secret:String="q2U86USN75";// секретный ключ private var api:VkApiNode; private var viewer_id; private var server_url; private var url_loader:URLLoader; private var url_request:URLRequest; private var query:String; public function Main():void { viewer_id=LoaderInfo(root.loaderInfo).parameters.viewer_id; // определяем адрес сервиса API (vkontakte.ru или vk.com) server_url = LoaderInfo(root.loaderInfo).parameters.api_url + '?';// server_url = "vkontakte.ru?"; // создаем и выполняем запрос api=new VkApiNode(viewer_id,api_id,api_secret,false,'XML','2.0',server_url); query=api.getUserBalance(); url_request=new URLRequest(query); url_loader=new URLLoader ; url_loader.addEventListener(Event.COMPLETE,friendsLoaded); url_loader.load(url_request); } public function friendsLoaded(event:Event):void { // обрабатываем полученный ответ var responseFriends:XML=new XML(url_loader.data); for each (var user:XML in responseFriends.*) { friends_tf.text='Ваш баланс=' + user.balance; } } }}
Re: Подскажите, что неправильно (getUserBalance)
Добавлено: 08 авг 2010, 13:43
Александр
Меняй вот такие вот названия "responseFriends" на соответствующие. Потом же сам запутаешься.
Код: Выделить всё
public function friendsLoaded(event:Event):void { // обрабатываем полученный ответ var responseFriends:XML=new XML(url_loader.data); friends_tf.text='Ваш баланс=' + responseFriends.balance; }
Почитай в интернете про работу с XML в AS3.
Re: Подскажите, что неправильно (getUserBalance)
Добавлено: 08 авг 2010, 13:48
Alf162
Это я взял с другого исходника.
То есть здесь проблема только с выводом полученной информации?
И еще вопрос: как создается подпись запроса? Написано:
Параметр sig равен md5 от контактенации следующих строк:
viewer_id – id текущего пользователя, переданный приложению посредством flashVars/GET запроса.
пар "parameter_name=parameter_value", расположенных в порядке возрастания имени параметра (по алфавиту).
секрета secret полученного через flashVars / GET запрос, или, если метод вызывается с сервера - секрета приложения api_secret (секрет Вы можете менять при редактировании страницы приложения).
Что необходимо записать вот сюда:
parameter_name=parameter_value
Т.е. какие именно параметры?
Вот это правильный запрос?
Код: Выделить всё
sig=MD5.encrypt(viewer_id+'api_id='+api_id+'method=getUserBalancev=2.0'+api_secret); var request:URLRequest=new URLRequest("http://api.vkontakte.ru/api.php?api_id="+api_id+"&method=getUserBalance&v=2.0&sig="+sig);
Re: Подскажите, что неправильно (getUserBalance)
Добавлено: 08 авг 2010, 13:55
Александр
Alf162
Без разницы с какого исходника) Сразу не заменишь - забудешь и будешь путаться. Но мне на самом деле всё равно) Только читать такой код не очень хочется...
Я не проверял твой код, но то что выводило бы не правильно - это я увидел.
Ты используешь Вконтакте API 2.0, поэтому читай
инструкцию по этой версии, а не по 3.0.
С библиотекой vkApi, которую ты используешь, не нужно заботиться о parameter_name=parameter_value, параметры передаются в функции и обрабатываются библиотекой как надо.
Re: Подскажите, что неправильно (getUserBalance)
Добавлено: 08 авг 2010, 14:01
Alf162
А почему выводило бы неправльно?
исправил названия:
Код: Выделить всё
package { import flash.net.*; import flash.display.*; import flash.events.*; import flash.text.*; import vk.VkApiNode; public class Main extends Sprite { private var api_id:Number=1918008;// id вашего приложения private var api_secret:String="q2U86USN75";// секретный ключ private var api:VkApiNode; private var viewer_id; private var server_url; private var url_loader:URLLoader; private var url_request:URLRequest; private var query:String; public function Main():void { viewer_id=LoaderInfo(root.loaderInfo).parameters.viewer_id; // определяем адрес сервиса API (vkontakte.ru или vk.com) server_url = LoaderInfo(root.loaderInfo).parameters.api_url + '?';// server_url = "vkontakte.ru?"; // создаем и выполняем запрос api=new VkApiNode(viewer_id,api_id,api_secret,false,'XML','2.0',server_url); query=api.getUserBalance(); url_request=new URLRequest(query); url_loader=new URLLoader; url_loader.addEventListener(Event.COMPLETE,balanc); url_loader.load(url_request); } public function balanc(event:Event):void { // обрабатываем полученный ответ var bl:XML=new XML(url_loader.data); for each (var user:XML in bl.*) { friends_tf.text='Ваш баланс=' + user.balance; } } }}
Re: Подскажите, что неправильно (getUserBalance)
Добавлено: 08 авг 2010, 14:09
Александр
Alf162
Потому что читай про то как работать с XML!
Вот такой ответ тебе возвратит запрос:
Код: Выделить всё
<?xml version="1.0" encoding="utf-8"?><response><balance>350</balance></response>
То есть единственное что нужно вытащить это balance = 350. Зачем в этом случае использовать for each ? Если знаешь что это такое, то нелогично, правда?
Ты попробуй как я тебе написал. И подробней описывай проблему: просто ничего не выводит или ошибки пишет?
Re: Подскажите, что неправильно (getUserBalance)
Добавлено: 08 авг 2010, 14:13
Alf162
Понятно, что совсем необязательно здесь for each, но ведь по идее должно работать, а на экране просто: "Ваш баланс" и все
Re: Подскажите, что неправильно (getUserBalance)
Добавлено: 08 авг 2010, 14:21
Александр
Alf162
Если знать как работать с XML с использованием for each, то и на практике работать будет.
Код: Выделить всё
for each (var user:XML in bl) { friends_tf.text='Ваш баланс=' + user.balance; }
А если только думать что по идее должно работать, и надеяться, то сложно в программировании будет. Еще раз напишу, что почитай про работу с XML в AS3. Если собираешь продолжать делать приложения, то эти знания очень пригодятся.
Re: Подскажите, что неправильно (getUserBalance)
Добавлено: 08 авг 2010, 14:29
Alf162
Все равно не работает. Я переделал:
Код: Выделить всё
public function balanc(event:Event):void { // обрабатываем полученный ответ externalXML = new XML(url_loader.data);friends_tf.text = externalXML.toXMLString(); }
В ответ получил:
<error>
<error_code>500</error_code>
<error_msg>Permission denied. You must enable votes processing in application settings</error_msg>
<request_params list="true">
<param>
<key>api_id</key>
<value>1918008</value>
</param>
<param>
<key>format</key>
<value>XML</value>
</param>
<param>
<key>method</key>
Получается где-то в запросе ошибка?
Re: Подскажите, что неправильно (getUserBalance)
Добавлено: 08 авг 2010, 15:08
alexei
Для приличия надо включить систему платежей в приложении.