Скрипт для списывания голосов secure.withdrawvotes

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в Flash-приложениях (ActionScript)
Ответить
fedos
Сообщения: 18
Зарегистрирован: 22 дек 2010, 00:09

Скрипт для списывания голосов secure.withdrawvotes

Сообщение fedos »

Всем доброго времени суток! В AS:

Код: Выделить всё

 setwin.golosa_vk.addEventListener(MouseEvent.CLICK, fl_ClickToShowPaymentBox);          function fl_ClickToShowPaymentBox(event:MouseEvent):void    {VK.callMethod("showPaymentBox");VK.addEventListener('onBalanceChanged', onBalanceChanged);apiConnection.addEventListener('onBalanceChanged', onBalanceChanged);}var MyLoader:URLLoader=new URLLoader;  function onBalanceChanged(e: CustomEvent): void { var balance = e.params[0]; var request:URLRequest=new URLRequest("хост поддерживает пхп/golosa.php");request.method=URLRequestMethod.POST;var vars:URLVariables=new URLVariables  ;var params:Object=LoaderInfo(root.loaderInfo).parameters;vars['viewer_id']=params['viewer_id'];vars['auth_key']=params['auth_key'];request.data=vars;MyLoader.load(request);}
В php файле:

Код: Выделить всё

<?php// http://flapps.ru/forum/ - форум о создании приложений В Контактеrequire('VkApi.class.php');$UserID = $_POST['UserID']; $auth_key = $_POST['auth_key'];$app_id = 'тут вписан ид прилы';$api_secret = 'тут вписан защищенный ключ:';$real_key = md5($app_id."_".$UserID."_".$api_secret);if ($auth_key == $real_key){function get_url($query) {$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $query);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_TIMEOUT, 10);return curl_exec($ch);curl_close($ch);}$api = new VkApiNode($app_id, $api_secret);$query = $api->getBalance($UserID);$user_balance = new SimpleXMLElement(get_url($query));if ($user_balance->balance >=100) {get_url($query = $api->withdrawVotes($UserID, 100));}}?>  
Рядом лежит VkApi.class.php, но все равно не работает. Этот скрипт уже не актуален или в чем ошибка? В этом деле, я плохо разбираюсь, но стараюсь учиться. Заранее благодарен.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Скрипт для списывания голосов secure.withdrawvotes

Сообщение Александр »

fedos
Используй API 3.0 и официальный класс для работы. Старая версия работает, но если ты учишься, то лучше учись сразу новому, оно не сложнее.
В AS код будет такой же, в php немного другой.
Примеры php кода для API 3.0 http://flapps.ru/forum/topic2308.html и http://flapps.ru/forum/topic2683.html
fedos
Сообщения: 18
Зарегистрирован: 22 дек 2010, 00:09

Re: Скрипт для списывания голосов secure.withdrawvotes

Сообщение fedos »

Поменял php скрипт на http://flapps.ru/forum/topic2683.html, но все равно не списывает голоса. Почему же? 0о
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Скрипт для списывания голосов secure.withdrawvotes

Сообщение Александр »

fedos
После

Код: Выделить всё

$resp = $VK->api('secure.withdrawVotes', array('uid'=>$viewer_id, 'votes'=>$votes));
Сделай

Код: Выделить всё

print_r($resp);
Попробуй выяснить в каком месте возникает ошибка: делай вывод переменных, смотри что не так.
Используй Charles.
Doszhan
Сообщения: 9
Зарегистрирован: 05 фев 2012, 16:13

Re: Скрипт для списывания голосов secure.withdrawvotes

Сообщение Doszhan »

Кажется, остался последний рубеж на пути к созданию моего первого приложения во вконтактах.

Прочитал документацию, остались вопросы. sig, говорится, надо передавать обязательно, если приложение запускается не на серверной стороне. Мое приложение находится на хостинге, приложение открывается через iFrame. Поэтому мне не приходилось передавать это значение в обращениях к API.

Но возникли сложности со списыванием со счета. Делал как всегда:

Код: Выделить всё

function getBalance(x){    console.log(x);    var foo = new Date();    var unixtime_ms = foo.getTime();    var unixtime = parseInt(unixtime_ms / 1000);    alert(unixtime);    VK.api("secure.withdrawVotes", {timestamp: unixtime, random: Math.floor(Math.random()*101), uid: viewer_id, votes: x}, function(data) {        if (data.response) {                    } else {            document.getElementById('warning').innerHTML = 'Ошибка! ' + data.error.error_code + ' ' + data.error.error_msg;        }       });}
И мне выводится ошибка "1 Unknown error occured". Отправил все необходимые параметры, которые требует функция по документации. Подскажите в чем ошибка.

PS: инициализация происходит банальнейшим образом

Код: Выделить всё

VK.init(function () {  });
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Скрипт для списывания голосов secure.withdrawvotes

Сообщение Александр »

Doszhan
secure.withdrawVotes - это серверный метод. http://flapps.ru/forum/topic2308.html
Doszhan
Сообщения: 9
Зарегистрирован: 05 фев 2012, 16:13

Re: Скрипт для списывания голосов secure.withdrawvotes

Сообщение Doszhan »

Александр
Спасибо за наводку. Немного помучившись смог добиться работоспособности функции. Функция отвечает правильно:

Код: Выделить всё

Array(    [response] => 100)
Следовало бы ожидать, что функция отработала правильно, но, к сожалению, никакого окна для списания голосов (если таковой имеется) не выводится, со счета приложения юзера голоса не списываются.

Являюсь администратором приложения (но не главным, т.е. я не создатель), test_mode не указывал. В чем проблема?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Скрипт для списывания голосов secure.withdrawvotes

Сообщение Александр »

Doszhan писал(а):никакого окна для списания голосов
Это showPaymentBox http://vk.com/developers.php?oid=-1&p=Javascript_API
Doszhan писал(а):Являюсь администратором приложения (но не главным, т.е. я не создатель), test_mode не указывал. В чем проблема?
Методы работы с голосами в неодобренном приложении работают только у главного админа.
test_mode в серверных методах не использовался. В версии API 3.0 никакого test_mode вообще нет.
Ответить