Лотерея не будет проверена или одобрена, и по назначению её использовать вы не сможете. В непроверенные приложения пользователи не могут вносить голоса. Проверить работу приложения смогут только администраторы приложения.
На бесплатном хостинге скорее всего не будет работать. Проверьте есть ли на вашем хостинге CURL
Если на вашем хостинге есть 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. Если приложение ещё не включено, то включаем. Редактирование -> Состояние: Приложение включено и видно всем.
5. Всё готово.