Страница 1 из 10
I-frame. Списывание голоса у пользователя
Добавлено: 13 сен 2010, 22:14
Влад
Понадобится хостинг с поддержкой cURL. Бесплатный хостинг скорее всего не подойдёт.
Создаем файл 1.php
Код: Выделить всё
<a class="" href="/2.php?&user_id=<?php echo $_GET['viewer_id'];?>&auth_key=<?php echo $_GET['auth_key'];?>"><b>Списать 1 голос</b>
Создаем 2.php
Код: Выделить всё
<?php $api_id = "7777777777"; // $api_key = "qwerty"; // $auth_key = $_GET['auth_key']; // auth_key из FlashVars приложения $user_id = $_GET['user_id']; // id просматривающего приложение // вот это кусок списывания голоса $rand = rand(); $timestamp = time()+300; $sig = md5("api_id=".$api_id."method=secure.withdrawVotes". "random=".$rand. "timestamp=".$timestamp. "uid=".$user_id. "v=2.0". "votes=100".$api_key); $postvars="api_id=".$api_id."&method=secure.withdrawVotes"."&random=".$rand."×tamp=".$timestamp."&uid=".$user_id."&v=2.0"."&votes=100"."&sig=".$sig; $chp = curl_init('http://api.vkontakte.ru/api.php'); curl_setopt($chp, CURLOPT_HEADER,0); curl_setopt($chp, CURLOPT_RETURNTRANSFER ,1); curl_setopt($chp, CURLOPT_POST, 1); curl_setopt($chp, CURLOPT_POSTFIELDS, $postvars); $res = curl_exec($chp); curl_close($chp);// не совсем работающая проверка есть ли голос у типа $num = strpos($res, "<error_code>502</error_code>"); if ($num<>"") { echo "no money"; return; } $num = strpos($res, "<error>"); if ($num<>"") { echo "user_id"; return; } $num = strpos($res, "<transferred>"); if ($num=="") { echo "error"; return; } // конец списывания голоса?>
Всё предельно просто, без библиотек, кодов, 1.php и 2.php должны находиться в одной директории вашего хостинга/сервера, код рабочий только что проверил =)
Re: I-frame Списывание голоса у пользователя
Добавлено: 14 сен 2010, 07:29
azzzi
благодарствую, давай куда кидать на пиво))
п.с а что с проверкой баланса? будет ошибку кидать?
Re: I-frame Списывание голоса у пользователя
Добавлено: 14 сен 2010, 08:52
azzzi
затестил, работает.
а как проверить что голос успешно списался в пользу приложения?
Re: I-frame Списывание голоса у пользователя
Добавлено: 14 сен 2010, 10:02
Влад
Обновите у себя код
2.php
Код: Выделить всё
<?php//////// Author Vlad © 2010//// $api_id = "ID Приложения"; $api_key = "Защищённый ключ"; $auth_key = $_GET['auth_key']; // auth_key из FlashVars приложения $user_id = $_GET['user_id']; // id просматривающего приложение // вот это кусок списывания голоса $rand = rand(); $timestamp = time()+300; $sig = md5("api_id=".$api_id."method=secure.withdrawVotes". "random=".$rand. "timestamp=".$timestamp. "uid=".$user_id. "v=2.0". "votes=100".$api_key); $postvars="api_id=".$api_id."&method=secure.withdrawVotes"."&random=".$rand."×tamp=".$timestamp."&uid=".$user_id."&v=2.0"."&votes=100"."&sig=".$sig; $chp = curl_init('http://api.vkontakte.ru/api.php'); curl_setopt($chp, CURLOPT_HEADER,0); curl_setopt($chp, CURLOPT_RETURNTRANSFER ,1); curl_setopt($chp, CURLOPT_POST, 1); curl_setopt($chp, CURLOPT_POSTFIELDS, $postvars); $res = curl_exec($chp); curl_close($chp);// проверка есть ли голос у типа $num = strpos($res, "<error_code>502</error_code>"); // нет денег if ($num<>"") { echo "Нет денег"; return; } $num = strpos($res, "<transferred>"); // другие ошибки if ($num=="") { echo "error"; return; } else { // ОЛОЛО echo 'Голос списан'; }// конец ?>
Добавлен отклик на списывание голоса, убран лишний код, всё работает как часы =)
Re: I-frame Списывание голоса у пользователя
Добавлено: 14 сен 2010, 10:10
azzzi
во, то что надо)) 1 пиво заработал))
теперь на 2ое пиво...
условие - если денег нет, надо чтобы прило запросило ввести голоса в прилож, и как голос внесется сразу списать на баланс.
Re: I-frame Списывание голоса у пользователя
Добавлено: 15 сен 2010, 09:40
azzzi
что никто не хочет заработать на пиво?))
Re: I-frame Списывание голоса у пользователя
Добавлено: 15 сен 2010, 10:01
Doker
Вот как делал я:
Тут пользователь вводит вивер айди, и с этого айди снимаются голоса. После снятия голосов за каждый начисляется +1000 игровой валюты в базу данных. + Ведение статистики. Записываются все удачные и не удачные транзакции. Если успешно то все данные - сколько ввело, сколько добавило вводятся в бд. Если не успешно - в бд записываются вьювер айди и статус ok=0;
Делаем запрос в mysql:
Код: Выделить всё
CREATE TABLE IF NOT EXISTS `logs_add_mattery` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` text NOT NULL, `mattery` text NOT NULL, `date` text NOT NULL, `ok` text NOT NULL, `votes` text NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Файл pay.html
Код: Выделить всё
<div id="content" align="center"> <table width="668"> <tr> <td style="text-align:left" class=b> <form action = "http://site.ru/game2/pay.php" method = "post"> <center>Нажмите "Настройки" над приложением. Введите нужное кол-во голосов. Заполните поля ниже. Курс: 1 000 игровой валюты - 1 голос. <br /> <br /> <center><b>Кол-во голосов:</b><br /> <input name="vote" id="vote"><br> <b>Ваш айди:</b><br /> <input name="viewer_id" id="viewer_id"><input name="auth_key" id="auth_key" type="hidden"><input type="submit" value="Купить"> </form></td> </tr> <table></div>
Файл pay.php
Код: Выделить всё
<?require('VkApi.class.php'); $db_host="localhost"; $db_user="dbuser"; $db_password="dbpass"; $db_name = "dbname";$table_name = "tablename"; mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());mysql_select_db($db_name) or die (mysql_error());mysql_query("SET NAMES 'utf8'"); $app_id = 'апи айди'; // id приложения$api_secret = 'апи секрет'; // Защищенный ключ СЃ вкладки "Платежи" $auth_key = $_POST['auth_key']; // auth_key РёР· FlashVars приложения$viewer_id = $_POST['viewer_id']; // id просматривающего приложение$vote = $_POST['vote']; $real_key = md5($app_id."_".$viewer_id."_".$api_secret); //if ($auth_key == $real_key){ 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);}$api = new VkApiNode($app_id, $api_secret);$query = $api->getBalance($viewer_id);$user_balance = new SimpleXMLElement(get_url($query));if($vote>0){$vote2=$vote*100;}if ($user_balance->balance >=$vote2 && $vote>0) {get_url($query = $api->withdrawVotes($viewer_id, $vote2));$scores=1000*$vote;$query2 = 'UPDATE название_таблицы_куда_мы_прибавим за каждый_голос_1000 SET score=score+"'.$scores.'" where `username` ="'.$viewer_id.'"'; $sql2 = @mysql_query($query2); $ok="1";$query3 = 'INSERT INTO logs_add_mattery (`username`, `mattery`, `date`,`ok`,`votes`) VALUES ("'.$viewer_id.'","'.$scores.'","'.time().'","'.$ok.'","'.$vote.'")'; $sql3 = @mysql_query($query3); header("Location: /game.php?page=pay");exit();} else{ echo "На вашем счету недостаточно голосов <br />"; echo "На вашем счету: ";echo "not enough votes" + $user_balance->balance;echo " голосов"; $ok2="0";$query6 = 'INSERT INTO logs_add_mattery (`username`, `mattery`, `date`,`ok`) VALUES ("'.$viewer_id.'","'.$scores.'","'.time().'","'.$ok2.'")'; $sql6 = @mysql_query($query6);}//} else echo "incorrect sig";?>
Re: I-frame Списывание голоса у пользователя
Добавлено: 15 сен 2010, 13:03
azzzi
не, это же пользователю надо делать лишние движения, лесть в настройки...
правильнее чтобы сразу открывалась форма на ввод голосов showPaymentBox.
есть варианты?
Re: I-frame Списывание голоса у пользователя
Добавлено: 15 сен 2010, 13:14
112
мб тебе в вакансии?!
Re: I-frame Списывание голоса у пользователя
Добавлено: 18 окт 2010, 11:26
Антон
у меня никак не получилось((