Кнопка "Поблагодарить за приложение"

Темы только для ознакомления. Уроки по использованию старой версии ВКонтакте API и устаревших методов.
Аватара пользователя
Евгений
FL Team
FL Team
Сообщения: 776
Зарегистрирован: 10 июн 2010, 11:01

Re: Кнопка "Поблагодарить за приложение"

Сообщение Евгений »

catamount5, проверь поддерживает хостинг curl http://flapps.ru/forum/topic144.html, если да то ошибка мизерная где-то в коде! ;)
catamount5
Сообщения: 63
Зарегистрирован: 10 авг 2010, 13:37

Re: Кнопка "Поблагодарить за приложение"

Сообщение catamount5 »

пожалуйста, помогите!!!!!!
Хостинг поддерживает curl.
"Платежи" включены в приложении.
Приложение проверено администрацией контакта.

голоса с пользователя переводятся в приложение, но их от туда пользователь может легко снять обратно
Аватара пользователя
Евгений
FL Team
FL Team
Сообщения: 776
Зарегистрирован: 10 июн 2010, 11:01

Re: Кнопка "Поблагодарить за приложение"

Сообщение Евгений »

catamount5, создай на хостинге в корневой папке файл: VkApi.class.php
Вот его содержимое:

Код: Выделить всё

<?/** * Класс обертка, для VkApi. Здесь описываются методы для запросов. * * @package VkApi * @author  Michael Elovskih <wronglink@gmail.com> */class VkApiNode{    /**     * Конструктор класса. Принимает обязательные $api_id (Id приложения) Рё     * $secret (секретный РєРѕРґ приложения).      *      * @param   integer $api_id     Id приложения.     * @param   string  $secret     Секретный РєРѕРґ приложения.     * @param   string  $format     Формат ответа (XML или JSON). РџРѕ умолчанию, 'XML'.     * @param   string  $version    Версия API. РџРѕ умолчанию, '2.0'.     * @param   string  $server_url РђРґСЂРµСЃ сервера API. РџРѕ умолчанию 'http://api.vkontakte.ru/api.php?'.     * @param   mixed   $timestamp  Timestamp сервера. Если РЅРµ задано - берется системное.     * @param   mixed   $random     Случайное значение. Если РЅРµ задано - задается через rand().     */    public function __construct ($api_id,                                    $secret,                                     $format = 'XML',                                    $version = '2.0',                                    $server_url = 'http://api.vkontakte.ru/api.php?',                                    $timestamp = false,                                    $random = false)    {        $this->api_id = $api_id;        $this->method = $method;        $this->secret = $secret;        $this->format = $format;        $this->version = $version;        $this->server_url = $server_url;        $this->timestamp = $timestamp ? $timestamp : time();        $this->random = $random ? $random : rand();    }        /**     * Отправляет уведомления пользователям. Для того, чтобы пользователь получил уведомление     * необходимо, чтобы Сѓ него было разрешено получение уведомлений РІ настройках.     * @see http://vkontakte.ru/pages.php?o=-1&p=secure.sendNotification         *      * @param   mixed   $uids       Id пользователей (массив РґРѕ 100 чисел или число).     * @param   string  $message    Текст сообщения.     *     * @return  string  Строка запроса.      */    public function sendNotification ($uids, $message)    {        $api = new VkApi($this->api_id,                            'secure.sendNotification',                            $this->secret,                            $this->format,                            $this->version,                            $this->server_url,                            $this->timestamp,                            $this->random);        $api->addParameter('uids', join(',', $uids));        $api->addParameter('message', $message);        return $api->getQuery();    }        /**     * Сохраняет строку статуса приложения для последующего вывода РІ     * общем СЃРїРёСЃРєРµ приложений РЅР° странице пользоваетеля.     * @see http://vkontakte.ru/pages.php?o=-1&p=secure.saveAppStatus     *      * @param   integer $uid    Id пользователя.     * @param   string  $status РўРµРєСЃС‚ статуса. Строка РґРѕ 32 символов.     *     * @return  string  Строка запроса.      */    public function saveAppStatus ($uid, $status)    {        $api = new VkApi($this->api_id,                            'secure.saveAppStatus',                            $this->secret,                            $this->format,                            $this->version,                            $this->server_url,                            $this->timestamp,                            $this->random);        $api->addParameter('uid', $uid);        $api->addParameter('status', $status);        return $api->getQuery();    }     /**     * Возвращает платежный баланс приложения.     * @see http://vkontakte.ru/pages.php?o=-1&p=secure.getAppBalance     *     * @return  string  Строка запроса.      */    public function getAppBalance ()    {        $api = new VkApi($this->api_id,                            'secure.getAppBalance',                            $this->secret,                            $this->format,                            $this->version,                            $this->server_url,                            $this->timestamp,                            $this->random);        return $api->getQuery();    }     /**     * Возвращает баланс пользователя РЅР° счету приложения.     * @see http://vkontakte.ru/pages.php?o=-1&p=secure.getBalance     *      * @param   integer $uid    Id пользователя.     *     * @return  string  Строка запроса.      */    public function getBalance ($uid)    {        $api = new VkApi($this->api_id,                            'secure.getBalance',                            $this->secret,                            $this->format,                            $this->version,                            $this->server_url,                            $this->timestamp,                            $this->random);        $api->addParameter('uid', $uid);        return $api->getQuery();    }     /**     * Переводит голоса СЃРѕ счета приложения РЅР° счет пользователя.     * @see http://vkontakte.ru/pages.php?o=-1&p=secure.addVotes     *      * @param   integer $uid    Id пользователя.     * @param   integer $votes  Количество голосов (РІ 100 долях).     *     * @return  string  Строка запроса.      */    public function addVotes ($uid, $votes)    {        $api = new VkApi($this->api_id,                            'secure.addVotes',                            $this->secret,                            $this->format,                            $this->version,                            $this->server_url,                            $this->timestamp,                            $this->random);        $api->addParameter('uid', $uid);        $api->addParameter('votes', $votes);        return $api->getQuery();    }     /**     * Списывает голоса СЃРѕ счета пользователя РЅР° счет приложения.     * @see http://vkontakte.ru/pages.php?o=-1&p=secure.withdrawVotes     *      * @param   integer $uid    Id пользователя.     * @param   integer $votes  Количество голосов (РІ 100 долях).     *     * @return  string  Строка запроса.      */    public function withdrawVotes ($uid, $votes)    {        $api = new VkApi($this->api_id,                            'secure.withdrawVotes',                            $this->secret,                            $this->format,                            $this->version,                            $this->server_url,                            $this->timestamp,                            $this->random);        $api->addParameter('uid', $uid);        $api->addParameter('votes', $votes);        return $api->getQuery();    }     /**     * Переводит голоса СЃРѕ счета РѕРґРЅРѕРіРѕ пользователя РЅР° счет РґСЂСѓРіРѕРіРѕ РІ рамках приложения.     * @see http://vkontakte.ru/pages.php?o=-1&p=secure.transferVotes     *      * @param   integer $uid_from   Id пользователя, РѕС‚ которого переводятся голоса.     * @param   integer $uid_to     Id пользователя, которому переводятся голоса.     * @param   integer $votes      Количество голосов (РІ 100 долях).     *      * @return  string  Строка запроса.      */    public function transferVotes ($uid_from, $uid_to, $votes)    {        $api = new VkApi($this->api_id,                            'secure.transferVotes',                            $this->secret,                            $this->format,                            $this->version,                            $this->server_url,                            $this->timestamp,                            $this->random);        $api->addParameter('uid_from', $uid_from);        $api->addParameter('uid_to', $uid_to);        $api->addParameter('votes', $votes);        return $api->getQuery();    }     /**     * Возвращает историю транзакций внутри приложения.     * @see http://vkontakte.ru/pages.php?o=-1&p=secure.getTransactionsHistory     *      * @param   integer $type   РўРёРї возвращаемых транзакций.      * 0 – РІСЃРµ транзакции, 1 – транзакции типа "пользователь в†’ приложение",     * 2 – транзакции типа "приложение в†’ пользователь", 3 – транзакции типа "пользователь в†’ пользователь"      * @param   integer $uid_from   Р¤РёР»СЊС‚СЂ РїРѕ Id пользователя, СЃ баланса которого снимались голоса.     * @param   integer $uid_to     Фильтр РїРѕ Id пользователя, РЅР° баланс которого начислялись голоса.     * @param   integer $date_from  Фильтр РїРѕ дате начала. Задается РІ РІРёРґРµ UNIX-time.     * @param   integer $date_to    фильтр РїРѕ дате конца. Задается РІ РІРёРґРµ UNIX-time.     * @param   integer $limit      Количество возвращаемых записей. РџРѕ умолчанию 1000.     *     * @return  string  Строка запроса.      */    public function getTransactionsHistory ($type = 0, $uid_from = null, $uid_to = null, $date_from = null, $date_to = null, $limit = 1000)    {        $api = new VkApi($this->api_id,                            'secure.getTransactionsHistory',                            $this->secret,                            $this->format,                            $this->version,                            $this->server_url,                            $this->timestamp,                            $this->random);        if($type)            $api->addParameter('type', $type);        if($uid_from)            $api->addParameter('uid_from', $uid_from);        if($uid_to)            $api->addParameter('uid_to', $uid_to);        if($date_from)            $api->addParameter('date_from', $date_from);        if($date_to)            $api->addParameter('date_to', $date_to);        if($limit)            $api->addParameter('limit', $limit);        return $api->getQuery();    }    } /** * Класс VkApi. Для каждого запроса создается экземпляр данного класса, * задаются метод API Рё параметры запроса Рё вызывается getQuery метод.   * * @package VkApi * @author  Michael Elovskih <wronglink@gmail.com> */class VkApi{       /**     * Конструктор класса.     *      * @param   integer $api_id     Id приложения.     * @param   string  $method     Название метода API.     * @param   string  $secret     Секретный РєРѕРґ приложения.     * @param   string  $format     Формат ответа (XML или JSON).     * @param   string  $version    Версия API.     * @param   string  $server_url РђРґСЂРµСЃ сервера API.     * @param   mixed   $timestamp  Timestamp сервера.     * @param   mixed   $random     Случайное значение.     */    public function __construct ($api_id,                                    $method,                                    $secret,                                     $format,                                    $version,                                    $server_url,                                    $timestamp,                                    $random)    {        $this->api_id = $api_id;        $this->method = $method;        $this->secret = $secret;        $this->format = $format;        $this->version = $version;        $this->server_url = $server_url;        $this->timestamp = $timestamp;        $this->random = $random;          $this->parameters = array();         $this->parameters[] = array('name' => 'api_id', 'value' => $this->api_id);        $this->parameters[] = array('name' => 'method', 'value' => $this->method);        $this->parameters[] = array('name' => 'format', 'value' => $this->format);        $this->parameters[] = array('name' => 'v', 'value' => $this->version);        $this->parameters[] = array('name' => 'timestamp', 'value' => $this->timestamp);        $this->parameters[] = array('name' => 'random', 'value' => $this->random);    }     /**     * __toString метод класса.     *     * @return  string  Строка запроса.      */    public function __toString ()    {        $this->parameters[] = array('name' => 'sig', 'value' => $this->getSig());         foreach($this->parameters as $p)             $query[] = $p['name'].'='.rawurlencode($p['value']);          return $this->server_url . join('&', $query);    }     /**     * Добавляет параметр запроса.     *      * @param   string  $p_name     Название параметра     * @param   string  $p_value    Значение параметра     */    public function addParameter ($p_name, $p_value)    {        $this->parameters[] = array('name' => $p_name, 'value' => $p_value);    }        /**     * Возвращает строку запроса.     *     * @return  string  Строка запроса.      */    public function getQuery ()    {        return $this->__toString();    }        /**     * Считает Sig-РїРѕРґРїРёСЃСЊ приложения.     *      * @return  string  Sig-РїРѕРґРїРёСЃСЊ приложения.     */    private function getSig ()    {        sort($this->parameters);                foreach($this->parameters as $p)            $sigStr .= join('=',$p);        return md5($sigStr . $this->secret);    }} ?>
И всё заработает! ))
catamount5
Сообщения: 63
Зарегистрирован: 10 авг 2010, 13:37

Re: Кнопка "Поблагодарить за приложение"

Сообщение catamount5 »

Евгений писал(а):catamount5, проверь поддерживает хостинг curl http://flapps.ru/forum/topic144.html, если да то ошибка мизерная где-то в коде! ;)
Женечка, проверяла я уже...
и хостинг
и код
по нескольку раз
голоса кидает, но не в приложение

И файл VkApi.class.php на сервере лежит рядом с файлом balance.php

код в AS:

Код: Выделить всё

package  {    import flash.display.MovieClip;    import flash.system.Security;    import flash.events.*;    import flash.net.*;    import vk.VkApiNode;        import  flash.text.*;        public class StartScript extends MovieClip{        private var wrapper:Object;                private var api_id:Number= id приложения                                private var api_secret:String=секретный ключ                    private var test_mode:Boolean=false;                 private var api:VkApiNode;                                private var viewer_id:Number;        private var server_url:String;                private var url_request:URLRequest;        private var varibl:URLVariables;        private var url_loader:URLLoader;        private var _votes:int;                        public function StartScript() {            this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);        }                public function onAddedToStage (e:Event):void {            this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);            Security.loadPolicyFile("http://сервер/crossdomain.xml");            Security.allowDomain("*");            stage.dispatchEvent(new Event (Event.DEACTIVATE));            stage.dispatchEvent(new Event (Event.ACTIVATE));            wrapper = Object (parent.parent);            wrapper.external.showInstallBox();            wrapper.external.setTitle("Snowboard Challenge");                        if (wrapper.application.parameters.is_app_user==1) {                startApi();                            }else  {                wrapper.addEventListener('onApplicationAdded', wrapperAdded);            }        }                public function wrapperAdded (e:Event) {                wrapper.removeEventListener('onApplicationAdded', wrapperAdded);                startApi();        }                public function startApi() {                        viewer_id=wrapper.application.parameters.viewer_id;                                                server_url = wrapper.application.parameters.api_url + '?';                                                                                            api=new VkApiNode(viewer_id,api_id,api_secret,test_mode,'XML','2.0',server_url);                                                // конечно не здесь функция вызывается            getUserMoney (1);        }         // голоса                public function  getUserMoney (_votes:int) {            this._votes=_votes;            wrapper.external.showPaymentBox(_votes);            wrapper.addEventListener("onBalanceChanged", onBalanceChanged);                    }        private function onBalanceChanged (e:Object) {            wrapper.removeEventListener("onBalanceChanged", onBalanceChanged);                                    url_request=new URLRequest("http://сервер/balance.php");                                                 varibl = new URLVariables();            varibl.userID=wrapper.application.parameters.viewer_id;            varibl.auth_key=wrapper.application.parameters.auth_key;            varibl.votes=_votes*100;            var randVar:int = Math.random()*1000;            varibl.randomMath = randVar;                        url_request.data=varibl;            url_request.method=URLRequestMethod.POST;            url_loader=new URLLoader ();                                                            url_loader.addEventListener(Event.COMPLETE, completeBalance);            url_loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorListener);                                               url_loader.load(url_request);        }        private function completeBalance  (event:Event):void {            url_loader.removeEventListener(Event.COMPLETE, completeBalance);            url_loader.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorListener);        }                        private function ioErrorListener (event:IOErrorEvent):void {            var _infoError:InfoError = new InfoError ();            _infoError.someTxt.text = "Ошибка соединения с сервером";            addChild(_infoError);        }    }   }
В файле balance.php

Код: Выделить всё

<?php require('VkApi.class.php');  $UserID = $_POST['UserID']; $auth_key = $_POST['auth_key'];$votes=$_POST['votes'];$random=$_POST['randomMath'];$app_id = 'id'; $api_secret = 'защищенный ключ'; $real_key = md5($app_id."_".$UserID."_".$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($UserID);$user_balance = new SimpleXMLElement(get_url($query));  if ($user_balance->balance >=$votes) {   get_url($query = $api->withdrawVotes($UserID, $votes)); }}?>
catamount5
Сообщения: 63
Зарегистрирован: 10 авг 2010, 13:37

Re: Кнопка "Поблагодарить за приложение"

Сообщение catamount5 »

ну неужели никто не поможет? :roll:
Foxmen
Сообщения: 80
Зарегистрирован: 03 сен 2010, 19:58

Re: Кнопка "Поблагодарить за приложение"

Сообщение Foxmen »

при открытии файла php на сервере вот это пишет
Warning: require(VkApi.class.php) [function.require]: failed to open stream: No such file or directory in /www/elitno.net/f/o/foxtv/home/site/forserver.php on line 4

Fatal error: require() [function.require]: Failed opening required 'VkApi.class.php' (include_path='.:/usr/share/php') in /www/elitno.net/f/o/foxtv/home/site/forserver.php on line 4
Что делать ?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Кнопка "Поблагодарить за приложение"

Сообщение Александр »

Foxmen
Файл VkApi.class.php на сервере есть?
Возьми этот файл, например, из этого архива http://flapps.ru/example/addrating.rar
Foxmen
Сообщения: 80
Зарегистрирован: 03 сен 2010, 19:58

Re: Кнопка "Поблагодарить за приложение"

Сообщение Foxmen »

Помогло-Спасибо!
Ответить