VIP В iframe приложении
Добавлено: 09 янв 2011, 00:37
Собственно я давно тут не был, может кому надо было, а может кто-то уже и выкладывал.
Вступление
В целом данный скрипт прекрасен, но у него есть огромный минус. Мы просто ОБЯЗАНЫ носить с собой auth_key и viewer_id.
Поскольку я в основном пишу именно iframe приложения для ВКонтакте, я перепробывал уже кучу способов переноса параметров, но по прежнему самым удобным остаётся - носить с собой гетом.
Главный конкурирующий вариант - это сессии, но наши прекрасные браузеры как IE и вроде Safari ( не помню точно ) не дают юзать нам этот чудесный и удобный метод.
Конфиг
Вам крупно повезло, если вы юзаете аякс, и дёргаете все страницы именно им, но я не думаю что пользователям таких методов понадобился бы данный урок, поэтому придётся использовать анальные методы, да простят меня все разрабы.
Возможно вы уже используете config файл, тогда вам просто в него необходимо будет дописать указанный мною код.
Код config.php
Не забываем создать файлик lider.txt и поместить туда id лидера, только цифры.
Далее нам необходимо создать скрипт, который будет отвечать за главную часть, установку лидера.
Он использует давно нам всем известную библиотеку VkApi.class.php для удобного доступа к серверным методам апи. Код king.php
Ну а дальше дело за малым.
Сразу предупреждаю:
1. Нужен хостинг с curl'ом.
2. Вам придётся к каждой ссылке добавить <? echo $url ?> и в каждом файле, в самом верху добавить <? include('config.php'); ?>
Всё что нам осталось - показать пользователю лидера.
Пример страницы index.php
Большую часть кода сейчас писал на коленке, не проверяя, поэтому не совсем уверен в правильности.
Если что - задавайте вопросы в топике.
UPD: ИСХОДНИК http://drbrain.in/test/test.zip
Вступление
В целом данный скрипт прекрасен, но у него есть огромный минус. Мы просто ОБЯЗАНЫ носить с собой auth_key и viewer_id.
Поскольку я в основном пишу именно iframe приложения для ВКонтакте, я перепробывал уже кучу способов переноса параметров, но по прежнему самым удобным остаётся - носить с собой гетом.
Главный конкурирующий вариант - это сессии, но наши прекрасные браузеры как IE и вроде Safari ( не помню точно ) не дают юзать нам этот чудесный и удобный метод.
Конфиг
Вам крупно повезло, если вы юзаете аякс, и дёргаете все страницы именно им, но я не думаю что пользователям таких методов понадобился бы данный урок, поэтому придётся использовать анальные методы, да простят меня все разрабы.
Возможно вы уже используете config файл, тогда вам просто в него необходимо будет дописать указанный мною код.
Код config.php
Код: Выделить всё
<?$secret=''; //Это вам придётся заменить на свой секретный ключ ;)if ($_GET['auth_key']!==md5($_GET['api_id'].'_'.$_GET['viewer_id'].'_'.$secret)){ exit(); } //Проверяем достоверность данных$url='?auth_key='.$_GET['auth_key'].'&viewer_id='.$_GET['viewer_id'].'&api_id='.$_GET['api_id']; //Формируем ссылку$lider_id=file_get_contents('lider.txt'); //Получаем id текущего лидера.?>
Далее нам необходимо создать скрипт, который будет отвечать за главную часть, установку лидера.
Он использует давно нам всем известную библиотеку VkApi.class.php для удобного доступа к серверным методам апи. Код king.php
Код: Выделить всё
<?include('config.php');require('VkApi.class.php'); function get_url($query) { //AФункция для отправки запроса $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($_GET['api_id'], $secret); // Инициализируемся$query = $api->getBalance($_GET['viewer_id']); //формируем ссылку для получения баланса пользователя$balance = new SimpleXMLElement(get_url($query)); //отправляем запросif ($balance->balance >=100) { // Если на балансе есть голос$query = $api->withdrawVotes($_GET['viewer_id'], 100); //формируем ссылку для списыванияget_url($query); // списываем голос$qwe = fopen('lider.txt', w); // Открываем файл lider.txt для перезаписиfwrite($qwe, $_GET['viewer_id']); // Пишем туда id текущего юзераfclose($qwe); // Закрываем файлecho '1'; // Пишем 1 что-бы скрипт понял что всё успешно} else { echo '2'; } //Если баланс меньше голоса пишем 2, опять же что-бы скрипт понял что надо предложить пополнить баланс?>
Сразу предупреждаю:
1. Нужен хостинг с curl'ом.
2. Вам придётся к каждой ссылке добавить <? echo $url ?> и в каждом файле, в самом верху добавить <? include('config.php'); ?>
Всё что нам осталось - показать пользователю лидера.
Пример страницы index.php
Код: Выделить всё
<?include('config.php');?><html><head><script src="http://vkontakte.ru/js/api/share.js?5"></script><script src="http://vkontakte.ru/js/api/xd_connection.js?2"></script><script src="http://code.jquery.com/jquery-1.4.3.min.js"></script></head><body><center><div id="lider"></div><a href="javascript://" onclick="king();">Стать королём</a></center> <script type="text/javascript">VK.init(function(){ });VK.api('getProfiles', { uids:"<? echo $lider_id; ?>", fields:"first_name, uid, photo_medium" }, function(data){ document.getElementById('lider').innerHTML='<br/><a href="http://vkontakte.ru/id'+data.response[0].uid+'" target="_blank"><img src="'+data.response[0].photo_medium+'"><center>'+data.response[0].first_name+'</center>';});VK.addCallback('onBalanceChanged', function(){ king(); });function king(){$.get('king.php<? echo $url; ?>', function(data){if (data=='1'){ window.location.href=window.location.href; }if (data=='2'){ VK.callMethod('showPaymentBox', 1); }});}</script></body></html>
Большую часть кода сейчас писал на коленке, не проверяя, поэтому не совсем уверен в правильности.
Если что - задавайте вопросы в топике.
UPD: ИСХОДНИК http://drbrain.in/test/test.zip