ActionScript 3.0 + PHP.
14.06.2010 Лотерея скорее всего уже не будет работать. Метод addVotes (для начисления выигрыша пользователю) - в списке устаревших методов ВКонтакте API, может некорректно работать или не работать вообще.
Лотерея не будет проверена или одобрена, и по назначению её использовать вы не сможете. В непроверенные приложения пользователи не могут вносить голоса. Проверить работу приложения смогут только администраторы приложения.
На бесплатном хостинге скорее всего не будет работать. Проверьте есть ли на вашем хостинге CURL http://flapps.ru/forum/topic144.html
Если на вашем хостинге есть CURL, но при этом есть и реклама, которая автоматически встраивается в скрипты, то приложение не будет работать корректно.
На дешевых хостингах может возникать ошибка из-за большого различия timestamp с вконтактовским.
Есть смысл читать эту тему и скачивать исходник, только для того чтобы посмотреть как работает моментальная лотерея с использованием методов API для работы с голосами.
Это не самый оптимальный способ работы с голосами. Правильнее было бы не проверять баланс пользователя перед списанием, а сразу попытаться списать голос и дальнейшие действия совершать в зависимости от результата. Но используемый в этом приложении метод, тоже работает.
Для определения выигрыша используется функция генерации случайных чисел. Можно изменить вероятность выигрыша (в процентах).
На сцене текстовое поле result_tf и кнопка btn.
Main.as
Код: Выделить всё
package { import flash.events.*; import flash.display.*; import flash.net.*; import flash.text.TextField; public class Main extends Sprite { public function Main():void { btn.addEventListener(MouseEvent.CLICK,btnClick); } function btnClick(e:MouseEvent):void { var params:Object=LoaderInfo(root.loaderInfo).parameters; var loader:URLLoader = new URLLoader(); var request:URLRequest=new URLRequest("http://flapps.ru/example/loto.php");// адрес вашего скрипта request.method=URLRequestMethod.POST; result_tf.text='Ждите...'; var vars:URLVariables = new URLVariables(); vars['auth_key']=params['auth_key']; vars['viewer_id']=params['viewer_id']; request.data=vars; loader.addEventListener(HTTPStatusEvent.HTTP_STATUS,onError); loader.addEventListener(Event.COMPLETE,onComplete); loader.load(request); } 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 = 'Ошибка! Попробуйте позже.'; } }}
loto.php
Код: Выделить всё
require('VkApi.class.php'); // в архиве с исходником $app_id = '1676336'; // id приложения$api_secret = 'qwertyuiopasdfghjklzxc'; // Защищенный ключ с вкладки "Платежи" $probability = 25; // % вероятность выигрыша 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 приложения$viewer_id = $_POST['viewer_id']; // id просматривающего приложение$uid = $viewer_id; // Рассчитываем ключ авторизации$real_key = md5($app_id."_".$viewer_id."_".$api_secret); if ($auth_key == $real_key){// Узнаём баланс приложения$api = new VkApiNode($app_id, $api_secret);$query = $api->getAppBalance();$app_balance = new SimpleXMLElement(get_url($query)); if ($app_balance->balance >= 100) { // если на балансе приложения есть хотя бы 1 голос // Узнаём баланс пользователя $api = new VkApiNode($app_id, $api_secret); $query = $api->getBalance($uid); $user_balance = new SimpleXMLElement(get_url($query)); if ($user_balance->balance >=100) { // если на счету пользователя не меньше 1 голоса // Списываем со счета пользователя голос $votes = 100; // количество голосов (1 голос = 100) $query = $api->withdrawVotes($uid, $votes); get_url($query); $rand = rand(1,100); // генерация случайного числа от 1 до 100 if ($rand <= $probability) { // если случайное число в пределах вероятности // Выигрыш // Добавляем на счет пользователя голоса $votes = 200; // количество голосов (1 голос = 100) $query = $api->addVotes($uid, $votes); get_url($query); echo 'Вы выиграли!'; } else { // Проигрыш echo 'Вы проиграли...'; } } else { echo 'На вашем счету должно быть не менее 1 голоса!'; }} else echo 'На балансе приложения нет голосов. Игра невозможна!';}?>
Установка приложения
Серверная часть
1. Заменяем в файле "loto.php" $app_id и $api_secret на ваши данные.
2. По желанию, можно изменить $probability - вероятность выигрыша в процентах.
3. Загружаем "VkApi.class.php" и "loto.php" в корневой каталог или создаем новую папку на сервере. Эти два файла должны быть в одной папке.
4. Загружаем crossdomain.xml в корневой каталог сайта, даже если "VkApi.class.php" и "loto.php" загружены в другую папку.
Приложение
1. В Main.as заменяем "http://flapps.ru/example/loto.php" на адрес вашего скрипта.
2. Загружаем в контакт.
3. Пополняем баланс приложения минимум на 1 голос. Вкладка "Платежи".
4. Пополняем свой баланс в приложении минимум на 1 голос.
5. Если приложение ещё не включено, то включаем. Редактирование -> Состояние: Приложение включено и видно всем.
6. Всё готово.
Исходник http://flapps.ru/example/loto.rar