I-frame. Списывание голоса у пользователя

Готовые уроки IFrame + ВКонтакте API
Аватара пользователя
Влад
Модератор
Модератор
Сообщения: 654
Зарегистрирован: 29 апр 2010, 22:24

I-frame. Списывание голоса у пользователя

Сообщение Влад »

Понадобится хостинг с поддержкой 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."&timestamp=".$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 должны находиться в одной директории вашего хостинга/сервера, код рабочий только что проверил =)
azzzi
Сообщения: 164
Зарегистрирован: 13 сен 2010, 19:24

Re: I-frame Списывание голоса у пользователя

Сообщение azzzi »

благодарствую, давай куда кидать на пиво))

п.с а что с проверкой баланса? будет ошибку кидать?
azzzi
Сообщения: 164
Зарегистрирован: 13 сен 2010, 19:24

Re: I-frame Списывание голоса у пользователя

Сообщение azzzi »

затестил, работает.
а как проверить что голос успешно списался в пользу приложения?
Аватара пользователя
Влад
Модератор
Модератор
Сообщения: 654
Зарегистрирован: 29 апр 2010, 22:24

Re: I-frame Списывание голоса у пользователя

Сообщение Влад »

Обновите у себя код

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."&timestamp=".$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 'Голос списан';        }// конец  ?> 
Добавлен отклик на списывание голоса, убран лишний код, всё работает как часы =)
azzzi
Сообщения: 164
Зарегистрирован: 13 сен 2010, 19:24

Re: I-frame Списывание голоса у пользователя

Сообщение azzzi »

во, то что надо)) 1 пиво заработал))
теперь на 2ое пиво...
условие - если денег нет, надо чтобы прило запросило ввести голоса в прилож, и как голос внесется сразу списать на баланс.
azzzi
Сообщения: 164
Зарегистрирован: 13 сен 2010, 19:24

Re: I-frame Списывание голоса у пользователя

Сообщение azzzi »

что никто не хочет заработать на пиво?))
Аватара пользователя
Doker
Модератор
Модератор
Сообщения: 1026
Зарегистрирован: 07 май 2010, 18:53

Re: I-frame Списывание голоса у пользователя

Сообщение 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";?>
azzzi
Сообщения: 164
Зарегистрирован: 13 сен 2010, 19:24

Re: I-frame Списывание голоса у пользователя

Сообщение azzzi »

не, это же пользователю надо делать лишние движения, лесть в настройки...

правильнее чтобы сразу открывалась форма на ввод голосов showPaymentBox.

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

Re: I-frame Списывание голоса у пользователя

Сообщение 112 »

мб тебе в вакансии?!
Антон
Сообщения: 3
Зарегистрирован: 07 окт 2010, 14:06

Re: I-frame Списывание голоса у пользователя

Сообщение Антон »

у меня никак не получилось((
Ответить