Страница 1 из 2

Приложение для передачи голосов (secure.transferVotes)

Добавлено: 03 апр 2010, 12:40
Александр
Приложение для передачи голосов другому пользователю (метод secure.transferVotes)
ActionScript 3.0 (Adobe Flash CS4) + PHP.

Метода secure.transferVotes нет. Работать не будет!

Это приложение не будет проверено. В непроверенные приложения пользователи не могут вносить голоса. Проверить работу приложения смогут только администраторы приложения.

На бесплатном хостинге скорее всего не будет работать. Проверьте есть ли на вашем хостинге cURL topic144.html
Если на вашем хостинге есть CURL, но при этом есть и реклама, которая автоматически встраивается в скрипты, то приложение не будет работать корректно.

На дешевых хостингах может возникать ошибка из-за большого различия timestamp с вконтактовским.

Изображение

Используется сторонняя библиотека VkApi, для работы с методами Вконтакте API и библиотека стандартных GUI-компонентов. Всё это находится в архиве с исходником.


1. Добавляем на сцену:
Текстовые поля с именами:
- uid_to_tf (поле ввода id того, кому будут передаваться голоса)
- votes_tf (поле ввода количества передаваемых голосов)
- user_name_tf (динамическое поле, в котором будет выводиться имя пользователя)
- result_tf (поле, в котором будет выводиться результат)

Другие необходимые для работы кнопки, будут созданы программно в коде.


2. Создаём Main.as и пишем код:

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

package {    import flash.net.*;    import flash.display.*;    import flash.events.*;    import flash.text.*;    import vk.*;      public class Main extends Sprite {        private var api_id:Number=1727522;// id вашего приложения        private var api_secret:String="m1fE3mX36rb";// секретный ключ        private var viewer_id;        private var externalXML:XML;        private var loader:URLLoader=new URLLoader;        private var photoLoader:Loader=new Loader;        private var api:VkApiNode;        private var url_loader:URLLoader;        private var url_request:URLRequest;        private var query:String;        private var uids:Array;        private var fields:Array;         public function Main():void {            // подключаем библиотеку стандартных GUI-компонентов вконтакте            VK.init( this, "http://api.vkontakte.ru/swf/vk_gui-0.3.swf" );        }         public function onVKLoaded():void {            // создаём кнопки            var btn1:* =VK.createSquareButton("Передать",257,45);            addChild(btn1);                        var btn2:* =VK.createSquareButton("Проверить",85,45);            addChild(btn2);                        var params:Object=LoaderInfo(root.loaderInfo).parameters;            viewer_id=params['viewer_id'];             btn1.addEventListener(MouseEvent.CLICK,btn1Click);            btn2.addEventListener(MouseEvent.CLICK,btn2Click);        }                public function btn1Click(e:MouseEvent):void {            // передача голосов            result_tf.text = 'Ждите...';            var params:Object=LoaderInfo(root.loaderInfo).parameters;            var loader:URLLoader=new URLLoader  ;            var request:URLRequest=new URLRequest("https://flapps.ru/transfervotes.php");// адрес вашего скрипта            request.method=URLRequestMethod.POST;             var vars:URLVariables=new URLVariables  ;            vars['auth_key']=params['auth_key'];            vars['uid_from']=params['viewer_id'];            vars['uid_to']=uid_to_tf.text;            vars['votes']=votes_tf.text;                        request.data=vars;            loader.addEventListener(HTTPStatusEvent.HTTP_STATUS,onError);            loader.addEventListener(Event.COMPLETE,onComplete);            loader.load(request);        }         private function onComplete(event:Event):void {            var loader:URLLoader=event.target as URLLoader;            if (loader!=null) {                result_tf.text=loader.data;            } else {                result_tf.text='Ошибка!';            }        }                private function onError(event:Event):void {            result_tf.text = 'Ошибка! Попробуйте позже.';        }                public function btn2Click(e:MouseEvent):void {            // загрузка имени и аватарки пользователя, которому будем передавать голоса            fields=['first_name,last_name,photo_big'];            uids=[uid_to_tf.text];            getProfiles(uids,fields);        }         public function getProfiles(uid:Array,fields:Array):void {            // функция загрузки профиля пользователя            if (fields.length==0) {                fields=null;            }            api=new VkApiNode(viewer_id,api_id,api_secret);            query=api.getProfiles(uid,fields);            url_request=new URLRequest(query);            url_loader=new URLLoader  ;            url_loader.addEventListener(Event.COMPLETE,onProfileLoad);            url_loader.load(url_request);        }         private function onProfileLoad(e:Event):void {            // обрабатываем полученные данные профиля пользователя            if (url_loader!=null) {                externalXML=new XML(url_loader.data);                user_name_tf.text=externalXML..first_name+' '+externalXML..last_name;                var photo=externalXML..photo_big;                url_request=new URLRequest(photo);                photoLoader.load(url_request);                photoLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,onPhotoLoaded);            } else {                trace("Error!");            }        }         private function onPhotoLoaded(e:Event):void {            // отображаем аватарку            photoLoader.x=340;            photoLoader.y=30;            addChild(photoLoader);        }    }}
Заменяем app_id, api_secret и ссылку на скрипт на свои данные. Содержимое php скрипта ниже.


3. Подключаем Main.as к fla
Если не знаете как, то посмотрите как это было сделано в этом уроке topic3.html


4. Создаём файл transfervotes.php и пишем в него код:

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

<?require('VkApi.class.php'); // находится в архиве с исходником $app_id = '1727522';            // id приложения$api_secret = 'qwertyuiopasdfghjklzxcvbnm'; // Защищенный ключ 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);} $auth_key  = $_POST['auth_key'];  // auth_key из FlashVars приложения$uid_from = $_POST['uid_from']; // id просматривающего приложение // Рассчитывается ключ авторизации$real_key = md5($app_id."_".$uid_from."_".$api_secret); if ($auth_key == $real_key){$api = new VkApiNode($app_id, $api_secret);$uid_to = $_POST['uid_to'];$votes = ($_POST['votes']*100);             // Количество голосов (1 голос = 100)$query = $api->transferVotes($uid_from, $uid_to, $votes);   $result = new SimpleXMLElement(get_url($query)); if ($result->transferred>0)    echo 'Голоса успешно переведены!';else {    switch($result->error_code)    {    case 2:      echo "Приложение выключено!";    break;    case 151:      echo "Неверное количество голосов!";    break;    case 152:      echo "Неверный id пользователя (from)";    break;    case 153:      echo "Неверный id пользователя (to)";    break;    case 502:      echo "На балансе недостаточно голосов!";    break;    default:             echo "При переводе голоса произошла ошибка!";    } }}else     echo 'error';?>
Изменяем id приложения и защищенный ключ на свои.


5. Создаём файл crossdomain.xml

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

<cross-domain-policy><allow-access-from domain="*.vkontakte.ru" /><allow-access-from domain="*.vk.com" /></cross-domain-policy>

6. Загружаем файлы на сервер
Файл crossdomain.xml загрузить в корневой каталог.
transfervotes.php - в любой каталог, но вместе с файлом VkApi.class.php(в архиве с исходником).


7. Загружаем приложение в контакт
- Если приложение выключено, то включаем.
- Если включен контейнер, то выключаем.


8. Всё готово!

Исходник https://flapps.ru/example/transfervotes.rar

Re: Приложение для передачи голосов (secure.transferVotes)

Добавлено: 03 апр 2010, 13:12
psix55
Спасибо)

Re: Приложение для передачи голосов (secure.transferVotes)

Добавлено: 03 апр 2010, 18:31
112
:?: а можно AS к одному исходнику подключить :?:

Re: Приложение для передачи голосов (secure.transferVotes)

Добавлено: 03 апр 2010, 19:53
psix55
что-то я не понял твоего вопроса!Если можно, то по поподробней :lol:

Re: Приложение для передачи голосов (secure.transferVotes)

Добавлено: 13 апр 2010, 19:26
paduchin
А этого есть хотя бы какая то прибыль ?

Re: Приложение для передачи голосов (secure.transferVotes)

Добавлено: 13 апр 2010, 19:29
dione
Александр писал(а): 7. Загружаем приложение в контакт
- Если приложение выключено, то включаем.
- Если включен контейнер, то выключаем.

куда спрятали кнопку загрузки приложения в контакт?

Re: Приложение для передачи голосов (secure.transferVotes)

Добавлено: 13 апр 2010, 20:04
Deniska
dione

В вкладке "Редактирование" справа есть пункт "Настройки" , пролистав ниже увидишь загрузку приложения

Re: Приложение для передачи голосов (secure.transferVotes)

Добавлено: 13 апр 2010, 20:23
dione
я другое чуть имел ввиду, подразумевал создать новое приложение

Re: Приложение для передачи голосов (secure.transferVotes)

Добавлено: 13 апр 2010, 21:36
VIP

Re: Приложение для передачи голосов (secure.transferVotes)

Добавлено: 15 апр 2010, 05:41
bodnar
в самом низу страницы Раработчикам там дальше разберетесь :lol: