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

Темы только для ознакомления. Уроки по использованию старой версии ВКонтакте API и устаревших методов.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

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

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

Приложение для передачи голосов другому пользователю (метод 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
Аватара пользователя
psix55
Модератор
Модератор
Сообщения: 1015
Зарегистрирован: 09 дек 2009, 17:16

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

Сообщение psix55 »

Спасибо)
Аватара пользователя
112
Модератор
Модератор
Сообщения: 2215
Зарегистрирован: 02 фев 2010, 21:53

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

Сообщение 112 »

:?: а можно AS к одному исходнику подключить :?:
Аватара пользователя
psix55
Модератор
Модератор
Сообщения: 1015
Зарегистрирован: 09 дек 2009, 17:16

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

Сообщение psix55 »

что-то я не понял твоего вопроса!Если можно, то по поподробней :lol:
Аватара пользователя
paduchin
FL Team
FL Team
Сообщения: 318
Зарегистрирован: 01 мар 2010, 14:20

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

Сообщение paduchin »

А этого есть хотя бы какая то прибыль ?
dione
Сообщения: 9
Зарегистрирован: 14 янв 2010, 00:12

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

Сообщение dione »

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

куда спрятали кнопку загрузки приложения в контакт?
Аватара пользователя
Deniska
Сообщения: 653
Зарегистрирован: 30 окт 2009, 00:07

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

Сообщение Deniska »

dione

В вкладке "Редактирование" справа есть пункт "Настройки" , пролистав ниже увидишь загрузку приложения
dione
Сообщения: 9
Зарегистрирован: 14 янв 2010, 00:12

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

Сообщение dione »

я другое чуть имел ввиду, подразумевал создать новое приложение
Аватара пользователя
bodnar
Модератор
Модератор
Сообщения: 1399
Зарегистрирован: 03 апр 2010, 06:41

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

Сообщение bodnar »

в самом низу страницы Раработчикам там дальше разберетесь :lol:
Ответить