ВНИМАНИЕ! В методах ВКонтакте API произошли изменения.
С 1 ноября 2012 года методы getUserBalance, secure.getBalance и secure.withdrawVotes будут отключены.
Используйте актуальный способ - Payments API.
Данный урок похож на тот, который был представлен в http://flapps.ru/forum/topic1173.html.
Но он использует класс работы с VK API и записывает все данные о списывании в базу MySQL.
1.Идём в phpMyAdmin и выполняем SQL-запрос:
Код: Выделить всё
---- Структура таблицы `table_counter`-- CREATE TABLE IF NOT EXISTS `table_counter` ( `user_id` int(11) NOT NULL COMMENT 'ID пользователя ВКонтакте', `votes` int(11) NOT NULL COMMENT 'Количество голосов, которое было списано с пользователя за всё время') ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Счётчик списываний голосов ВКонтакте'; -- -------------------------------------------------------- ---- Структура таблицы `table_log`-- CREATE TABLE IF NOT EXISTS `table_log` ( `user_id` int(11) NOT NULL COMMENT 'ID пользователя ВКонтакте', `date` int(11) NOT NULL COMMENT 'Дата списывания голосов', `user_ip` varchar(15) NOT NULL COMMENT 'IP пользователя', `votes` int(11) NOT NULL COMMENT 'Количество списанных голосов') ENGINE=MyISAM DEFAULT CHARSET=utf8;
2. Заливаем файлы и задаём значения переменным
Внимание! Необходимо указать данные для работы скрипта. ВСЕ ДАННЫЕ НАХОДЯТСЯ В НАЧАЛЕ ФАЙЛА INDEX.PHP
Если у Вас нет класса для работы с API ВКонтакте, или он отличается от данного, то подключите его:
vkapi.class.php
Код: Выделить всё
<?php /** * VKAPI class for vk.com social network * * @package server API methods * @link http://vk.com/developers.php * @autor Oleg Illarionov * @version 1.0 */ class vkapi { var $api_secret; var $app_id; var $api_url; function vkapi($app_id, $api_secret, $api_url = 'api.vk.com/api.php') { $this->app_id = $app_id; $this->api_secret = $api_secret; if (!strstr($api_url, 'http://')) $api_url = 'http://'.$api_url; $this->api_url = $api_url; } function api($method,$params=false) { if (!$params) $params = array(); $params['api_id'] = $this->app_id; $params['v'] = '3.0'; $params['method'] = $method; $params['timestamp'] = time(); $params['format'] = 'json'; $params['random'] = rand(0,10000); ksort($params); $sig = ''; foreach($params as $k=>$v) { $sig .= $k.'='.$v; } $sig .= $this->api_secret; $params['sig'] = md5($sig); $query = $this->api_url.'?'.$this->params($params); $res = file_get_contents($query); return json_decode($res, true); } function params($params) { $pice = array(); foreach($params as $k=>$v) { $pice[] = $k.'='.urlencode($v); } return implode('&',$pice); }}?>
Код: Выделить всё
<?php /*Разработка 3APPS.RU © 2012*/ $vk_api['cfn'] = "vkapi.class.php"; // имя файла с классами /* Данные о приложении */$vk_api['id'] = 1; // вместо единицы ставим id своего приложения$vk_api['key'] = "qwerty123"; // вместо этого ставим защитный ключ своего приложения/* Данные о приложении */ /* Данные MySQL */$db['hostname'] = "localhost"; // mysql host$db['username'] = ""; // имя пользователя (логин) mysql$db['password'] = ""; // пароль пользователя mysql$db['name'] = ""; // имя базы данных mysql/* Данные MySQL */ /* Данные о пользователе */$vk_api['uid'] = 1; // вместо этого ставим id пользователя вконтакте, с которого надо списать голоса/* Данные о пользователе */ /* Количество голосов */$vk_api['votes'] = 100; // вместо этого ставим сотые доли голоса (если нужно снять 1 голос, то ставим 100, а если 3 - то 300)/* Количество голосов */ /* Статистика */$stat = 1; // если равно 1, то все данные по списывание голосов будут заноситься в базу данных$stat_logs = 1; // если равно 1, то кроме счётчика списываний, будет заноситься дата, время списывания и ip пользователя/* Статистика */ /* Таблицы для логов */$mysql['table_counter'] = "vkapi_votes_counter"; // название таблицы со счётчиком списываний$mysql['table_log'] = "vkapi_votes_log"; // название таблицы с логами списываний/* Таблицы для логов */ /* Действия при успешном списывании голосов */$success['redirect'] = "success.php"; // адрес страницы, на которую система перенаправит пользователя в случае успешного списывания голосов; оставьте поле пустым, если не желаете этого делать/* Действия при успешном списывании голосов */ /* Действия при ошибках */$error['n_votes_u'] = "n_votes.php"; // адрес страницы, на которую система перенаправит пользователя в случае ошибки списывания голосов/* Действия при ошибках */ require ($vk_api['cfn']); // подключаем файл с классами $timestamp = time()+300; $rand = rand(); $VK = new vkapi($vk_api['id'], $vk_api['key']);$resp = $VK->api('secure.withdrawVotes', array('timestamp'=>$timestamp,'random'=>$rand,'uid'=>$vk_api['uid'],'votes'=>$vk_api['votes'])); $vk_api['result'] = $resp['response']; if($vk_api['result'] > 0) {if($vk_api['uid']) {if($vk_api['votes']) { if($stat) { MYSQL_CONNECT($db['hostname'],$db['username'],$db['password']) OR DIE("MySQL Error [connection] (error_code: 1)");mysql_select_db($db['name']) or die("MySQL Error [selecting database] (error_code: 2)"); $db_query_check = mysql_query("SELECT * FROM `".$mysql['table_counter']."` WHERE `user_id` = '".$vk_api['uid']."'"); if($db_query_check) {$db_query = mysql_query("UPDATE `".$mysql['table_counter']."` SET `votes` = `votes` + ".$vk_api['votes']." WHERE `user_id` = '".$vk_api['uid']."';");} else {$db_query = mysql_query("INSERT INTO `".$mysql['table_counter']."` VALUES (".$vk_api['uid'].", ".$votes.");");} if(!$db_query) {echo("<b>Внимание! Произошла ошибка DB при создании логов [1] (error_code: 3)</b>");} if($stat_logs) { $date = date("d.m.Y H:i:s");$date_unix = strtotime($date);$u_ip = $_SERVER['REMOTE_ADDR']; $db_query = mysql_query("INSERT INTO `".$mysql['table_log']."` VALUES (".$vk_api['uid'].", ".$date_unix.", '".$u_ip."', ".$votes.");"); if(!$db_query) {echo("<b>Внимание! Произошла ошибка DB при создании логов [2] (error_code: 4)</b>");} } } if($success['redirect']) {header("Location: ".$success['redirect']);} } else {echo("<b>Внимание! Не указано количество голосов. (error_code: 6)</b>");} } else {echo("<b>Внимание! Не указан ID пользователя ВКонтакте. (error_code: 5)</b>");} } else { if($error['n_votes_u']) {header("Location: ".$error['n_votes_u']);} else {echo("<b>Внимание! Произошла ошибка списывания голосов. (error_code: 7)</b>");} }?>
Код: Выделить всё
<h3>Поздравляем!</h3><b>Спасибо!</b>. Голоса были успешно списаны с Вашего счёта.
Код: Выделить всё
<h3>Ошибка!</h3>Ошибка при списывании голосов.
Пишет ошибку «MySQL Error [connection] (error_code: 1)». Что делать? Пишет ошибку «MySQL Error [selecting database] (error_code: 2)». Что делать? Пишет ошибку «Внимание! Произошла ошибка DB при создании логов [1] (error_code: 3)». Что делать? Пишет ошибку «Внимание! Произошла ошибка DB при создании логов [2] (error_code: 4)». Что делать? Пишет ошибку «Внимание! Не указан ID пользователя ВКонтакте. (error_code: 5)». Что делать? Пишет ошибку «Внимание! Не указано количество голосов. (error_code: 6)». Что делать? Пишет ошибку «Внимание! Произошла ошибка списывания голосов. (error_code: 7)». Что делать? Как выполнить SQL-запрос, что такое «phpMyAdmin»? Что такое «ID и защитный ключ приложения»?