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

Темы только для ознакомления. Уроки по использованию старой версии ВКонтакте API и устаревших методов.

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

Сообщение Евгений » 02 мар 2011, 19:51

catamount5, проверь поддерживает хостинг curl topic144.html, если да то ошибка мизерная где-то в коде! ;)
Пока они пили водку и катались на скейтах, мы строили бизнес и делали деньги!)
Аватара пользователя
Евгений
FL Team
FL Team
 
Сообщения: 776
Зарегистрирован: 10 июн 2010, 11:01
Откуда: Новосибирск
Благодарил (а): 65 раз.
Поблагодарили: 35 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



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

Сообщение catamount5 » 02 мар 2011, 20:12

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

голоса с пользователя переводятся в приложение, но их от туда пользователь может легко снять обратно
catamount5

 
Сообщения: 63
Зарегистрирован: 10 авг 2010, 13:37
Благодарил (а): 22 раз.
Поблагодарили: 6 раз.

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

Сообщение Евгений » 02 мар 2011, 20:38

catamount5, создай на хостинге в корневой папке файл: VkApi.class.php
Вот его содержимое:
  1. <?
  2. /**
  3.  * Класс обертка, для VkApi. Здесь описываются методы для запросов.
  4.  *
  5.  * @package VkApi
  6.  * @author  Michael Elovskih <wronglink@gmail.com>
  7.  */
  8. class VkApiNode
  9. {
  10.     /**
  11.      * Конструктор класса. Принимает обязательные $api_id (Id приложения) Рё
  12.      * $secret (секретный РєРѕРґ приложения).
  13.      *
  14.      * @param   integer $api_id     Id приложения.
  15.      * @param   string  $secret     Секретный РєРѕРґ приложения.
  16.      * @param   string  $format     Формат ответа (XML или JSON). РџРѕ умолчанию, 'XML'.
  17.      * @param   string  $version    Версия API. РџРѕ умолчанию, '2.0'.
  18.      * @param   string  $server_url РђРґСЂРµСЃ сервера API. РџРѕ умолчанию 'http://api.vkontakte.ru/api.php?'.
  19.      * @param   mixed   $timestamp  Timestamp сервера. Если РЅРµ задано - берется системное.
  20.      * @param   mixed   $random     Случайное значение. Если РЅРµ задано - задается через rand().
  21.      */
  22.     public function __construct ($api_id,
  23.                                     $secret,
  24.                                     $format = 'XML',
  25.                                     $version = '2.0',
  26.                                     $server_url = 'http://api.vkontakte.ru/api.php?',
  27.                                     $timestamp = false,
  28.                                     $random = false)
  29.     {
  30.         $this->api_id = $api_id;
  31.         $this->method = $method;
  32.         $this->secret = $secret;
  33.         $this->format = $format;
  34.         $this->version = $version;
  35.         $this->server_url = $server_url;
  36.         $this->timestamp = $timestamp ? $timestamp : time();
  37.         $this->random = $random ? $random : rand();
  38.     }
  39.    
  40.     /**
  41.      * Отправляет уведомления пользователям. Для того, чтобы пользователь получил уведомление
  42.      * необходимо, чтобы Сѓ него было разрешено получение уведомлений РІ настройках.
  43.      * @see http://vkontakte.ru/pages.php?o=-1&p=secure.sendNotification   
  44.      *
  45.      * @param   mixed   $uids       Id пользователей (массив РґРѕ 100 чисел или число).
  46.      * @param   string  $message    Текст сообщения.
  47.      *
  48.      * @return  string  Строка запроса. 
  49.      */
  50.     public function sendNotification ($uids, $message)
  51.     {
  52.         $api = new VkApi($this->api_id,
  53.                             'secure.sendNotification',
  54.                             $this->secret,
  55.                             $this->format,
  56.                             $this->version,
  57.                             $this->server_url,
  58.                             $this->timestamp,
  59.                             $this->random);
  60.         $api->addParameter('uids', join(',', $uids));
  61.         $api->addParameter('message', $message);
  62.         return $api->getQuery();
  63.     }
  64.    
  65.     /**
  66.      * Сохраняет строку статуса приложения для последующего вывода РІ
  67.      * общем СЃРїРёСЃРєРµ приложений РЅР° странице пользоваетеля.
  68.      * @see http://vkontakte.ru/pages.php?o=-1&p=secure.saveAppStatus
  69.      *
  70.      * @param   integer $uid    Id пользователя.
  71.      * @param   string  $status РўРµРєСЃС‚ статуса. Строка РґРѕ 32 символов.
  72.      *
  73.      * @return  string  Строка запроса. 
  74.      */
  75.     public function saveAppStatus ($uid, $status)
  76.     {
  77.         $api = new VkApi($this->api_id,
  78.                             'secure.saveAppStatus',
  79.                             $this->secret,
  80.                             $this->format,
  81.                             $this->version,
  82.                             $this->server_url,
  83.                             $this->timestamp,
  84.                             $this->random);
  85.         $api->addParameter('uid', $uid);
  86.         $api->addParameter('status', $status);
  87.         return $api->getQuery();
  88.     }
  89.  
  90.     /**
  91.      * Возвращает платежный баланс приложения.
  92.      * @see http://vkontakte.ru/pages.php?o=-1&p=secure.getAppBalance
  93.      *
  94.      * @return  string  Строка запроса. 
  95.      */
  96.     public function getAppBalance ()
  97.     {
  98.         $api = new VkApi($this->api_id,
  99.                             'secure.getAppBalance',
  100.                             $this->secret,
  101.                             $this->format,
  102.                             $this->version,
  103.                             $this->server_url,
  104.                             $this->timestamp,
  105.                             $this->random);
  106.         return $api->getQuery();
  107.     }
  108.  
  109.     /**
  110.      * Возвращает баланс пользователя РЅР° счету приложения.
  111.      * @see http://vkontakte.ru/pages.php?o=-1&p=secure.getBalance
  112.      *
  113.      * @param   integer $uid    Id пользователя.
  114.      *
  115.      * @return  string  Строка запроса. 
  116.      */
  117.     public function getBalance ($uid)
  118.     {
  119.         $api = new VkApi($this->api_id,
  120.                             'secure.getBalance',
  121.                             $this->secret,
  122.                             $this->format,
  123.                             $this->version,
  124.                             $this->server_url,
  125.                             $this->timestamp,
  126.                             $this->random);
  127.         $api->addParameter('uid', $uid);
  128.         return $api->getQuery();
  129.     }
  130.  
  131.     /**
  132.      * Переводит голоса СЃРѕ счета приложения РЅР° счет пользователя.
  133.      * @see http://vkontakte.ru/pages.php?o=-1&p=secure.addVotes
  134.      *
  135.      * @param   integer $uid    Id пользователя.
  136.      * @param   integer $votes  Количество голосов (РІ 100 долях).
  137.      *
  138.      * @return  string  Строка запроса. 
  139.      */
  140.     public function addVotes ($uid, $votes)
  141.     {
  142.         $api = new VkApi($this->api_id,
  143.                             'secure.addVotes',
  144.                             $this->secret,
  145.                             $this->format,
  146.                             $this->version,
  147.                             $this->server_url,
  148.                             $this->timestamp,
  149.                             $this->random);
  150.         $api->addParameter('uid', $uid);
  151.         $api->addParameter('votes', $votes);
  152.         return $api->getQuery();
  153.     }
  154.  
  155.     /**
  156.      * Списывает голоса СЃРѕ счета пользователя РЅР° счет приложения.
  157.      * @see http://vkontakte.ru/pages.php?o=-1&p=secure.withdrawVotes
  158.      *
  159.      * @param   integer $uid    Id пользователя.
  160.      * @param   integer $votes  Количество голосов (РІ 100 долях).
  161.      *
  162.      * @return  string  Строка запроса. 
  163.      */
  164.     public function withdrawVotes ($uid, $votes)
  165.     {
  166.         $api = new VkApi($this->api_id,
  167.                             'secure.withdrawVotes',
  168.                             $this->secret,
  169.                             $this->format,
  170.                             $this->version,
  171.                             $this->server_url,
  172.                             $this->timestamp,
  173.                             $this->random);
  174.         $api->addParameter('uid', $uid);
  175.         $api->addParameter('votes', $votes);
  176.         return $api->getQuery();
  177.     }
  178.  
  179.     /**
  180.      * Переводит голоса СЃРѕ счета РѕРґРЅРѕРіРѕ пользователя РЅР° счет РґСЂСѓРіРѕРіРѕ РІ рамках приложения.
  181.      * @see http://vkontakte.ru/pages.php?o=-1&p=secure.transferVotes
  182.      *
  183.      * @param   integer $uid_from   Id пользователя, РѕС‚ которого переводятся голоса.
  184.      * @param   integer $uid_to     Id пользователя, которому переводятся голоса.
  185.      * @param   integer $votes      Количество голосов (РІ 100 долях).
  186.      *
  187.      * @return  string  Строка запроса. 
  188.      */
  189.     public function transferVotes ($uid_from, $uid_to, $votes)
  190.     {
  191.         $api = new VkApi($this->api_id,
  192.                             'secure.transferVotes',
  193.                             $this->secret,
  194.                             $this->format,
  195.                             $this->version,
  196.                             $this->server_url,
  197.                             $this->timestamp,
  198.                             $this->random);
  199.         $api->addParameter('uid_from', $uid_from);
  200.         $api->addParameter('uid_to', $uid_to);
  201.         $api->addParameter('votes', $votes);
  202.         return $api->getQuery();
  203.     }
  204.  
  205.     /**
  206.      * Возвращает историю транзакций внутри приложения.
  207.      * @see http://vkontakte.ru/pages.php?o=-1&p=secure.getTransactionsHistory
  208.      *
  209.      * @param   integer $type   РўРёРї возвращаемых транзакций.
  210.      * 0 – РІСЃРµ транзакции, 1 – транзакции типа "пользователь в†’ приложение",
  211.      * 2 – транзакции типа "приложение в†’ пользователь", 3 – транзакции типа "пользователь в†’ пользователь"
  212.      * @param   integer $uid_from   Р¤РёР»СЊС‚СЂ РїРѕ Id пользователя, СЃ баланса которого снимались голоса.
  213.      * @param   integer $uid_to     Фильтр РїРѕ Id пользователя, РЅР° баланс которого начислялись голоса.
  214.      * @param   integer $date_from  Фильтр РїРѕ дате начала. Задается РІ РІРёРґРµ UNIX-time.
  215.      * @param   integer $date_to    фильтр РїРѕ дате конца. Задается РІ РІРёРґРµ UNIX-time.
  216.      * @param   integer $limit      Количество возвращаемых записей. РџРѕ умолчанию 1000.
  217.      *
  218.      * @return  string  Строка запроса. 
  219.      */
  220.     public function getTransactionsHistory ($type = 0, $uid_from = null, $uid_to = null, $date_from = null, $date_to = null, $limit = 1000)
  221.     {
  222.         $api = new VkApi($this->api_id,
  223.                             'secure.getTransactionsHistory',
  224.                             $this->secret,
  225.                             $this->format,
  226.                             $this->version,
  227.                             $this->server_url,
  228.                             $this->timestamp,
  229.                             $this->random);
  230.         if($type)
  231.             $api->addParameter('type', $type);
  232.         if($uid_from)
  233.             $api->addParameter('uid_from', $uid_from);
  234.         if($uid_to)
  235.             $api->addParameter('uid_to', $uid_to);
  236.         if($date_from)
  237.             $api->addParameter('date_from', $date_from);
  238.         if($date_to)
  239.             $api->addParameter('date_to', $date_to);
  240.         if($limit)
  241.             $api->addParameter('limit', $limit);
  242.         return $api->getQuery();
  243.     }
  244.    
  245. }
  246.  
  247. /**
  248.  * Класс VkApi. Для каждого запроса создается экземпляр данного класса,
  249.  * задаются метод API Рё параметры запроса Рё вызывается getQuery метод.  
  250.  *
  251.  * @package VkApi
  252.  * @author  Michael Elovskih <wronglink@gmail.com>
  253.  */
  254. class VkApi
  255. {   
  256.     /**
  257.      * Конструктор класса.
  258.      *
  259.      * @param   integer $api_id     Id приложения.
  260.      * @param   string  $method     Название метода API.
  261.      * @param   string  $secret     Секретный РєРѕРґ приложения.
  262.      * @param   string  $format     Формат ответа (XML или JSON).
  263.      * @param   string  $version    Версия API.
  264.      * @param   string  $server_url РђРґСЂРµСЃ сервера API.
  265.      * @param   mixed   $timestamp  Timestamp сервера.
  266.      * @param   mixed   $random     Случайное значение.
  267.      */
  268.     public function __construct ($api_id,
  269.                                     $method,
  270.                                     $secret,
  271.                                     $format,
  272.                                     $version,
  273.                                     $server_url,
  274.                                     $timestamp,
  275.                                     $random)
  276.     {
  277.         $this->api_id = $api_id;
  278.         $this->method = $method;
  279.         $this->secret = $secret;
  280.         $this->format = $format;
  281.         $this->version = $version;
  282.         $this->server_url = $server_url;
  283.         $this->timestamp = $timestamp;
  284.         $this->random = $random;
  285.  
  286.  
  287.         $this->parameters = array();
  288.  
  289.         $this->parameters[] = array('name' => 'api_id', 'value' => $this->api_id);
  290.         $this->parameters[] = array('name' => 'method', 'value' => $this->method);
  291.         $this->parameters[] = array('name' => 'format', 'value' => $this->format);
  292.         $this->parameters[] = array('name' => 'v', 'value' => $this->version);
  293.         $this->parameters[] = array('name' => 'timestamp', 'value' => $this->timestamp);
  294.         $this->parameters[] = array('name' => 'random', 'value' => $this->random);
  295.     }
  296.  
  297.     /**
  298.      * __toString метод класса.
  299.      *
  300.      * @return  string  Строка запроса. 
  301.      */
  302.     public function __toString ()
  303.     {
  304.         $this->parameters[] = array('name' => 'sig', 'value' => $this->getSig());
  305.  
  306.         foreach($this->parameters as $p)
  307.             $query[] = $p['name'].'='.rawurlencode($p['value']);
  308.  
  309.  
  310.         return $this->server_url . join('&', $query);
  311.     }
  312.  
  313.     /**
  314.      * Добавляет параметр запроса.
  315.      *
  316.      * @param   string  $p_name     Название параметра
  317.      * @param   string  $p_value    Значение параметра
  318.      */
  319.     public function addParameter ($p_name, $p_value)
  320.     {
  321.         $this->parameters[] = array('name' => $p_name, 'value' => $p_value);
  322.     }
  323.    
  324.     /**
  325.      * Возвращает строку запроса.
  326.      *
  327.      * @return  string  Строка запроса. 
  328.      */
  329.     public function getQuery ()
  330.     {
  331.         return $this->__toString();
  332.     }
  333.    
  334.     /**
  335.      * Считает Sig-РїРѕРґРїРёСЃСЊ приложения.
  336.      *
  337.      * @return  string  Sig-РїРѕРґРїРёСЃСЊ приложения.
  338.      */
  339.     private function getSig ()
  340.     {
  341.         sort($this->parameters);
  342.        
  343.         foreach($this->parameters as $p)
  344.             $sigStr .= join('=',$p);
  345.         return md5($sigStr . $this->secret);
  346.     }
  347. }
  348.  
  349. ?>

И всё заработает! ))
Пока они пили водку и катались на скейтах, мы строили бизнес и делали деньги!)
Аватара пользователя
Евгений
FL Team
FL Team
 
Сообщения: 776
Зарегистрирован: 10 июн 2010, 11:01
Откуда: Новосибирск
Благодарил (а): 65 раз.
Поблагодарили: 35 раз.

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

Сообщение catamount5 » 02 мар 2011, 20:39

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

Женечка, проверяла я уже...
и хостинг
и код
по нескольку раз
голоса кидает, но не в приложение

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

код в AS:
  1. package  {
  2.     import flash.display.MovieClip;
  3.     import flash.system.Security;
  4.     import flash.events.*;
  5.     import flash.net.*;
  6.     import vk.VkApiNode;
  7.    
  8.     import  flash.text.*;
  9.    
  10.     public class StartScript extends MovieClip{
  11.         private var wrapper:Object;
  12.        
  13.         private var api_id:Number= id приложения
  14.                                 private var api_secret:String=секретный ключ
  15.                     private var test_mode:Boolean=false;
  16.        
  17.         private var api:VkApiNode;
  18.                                 private var viewer_id:Number;
  19.         private var server_url:String;
  20.        
  21.         private var url_request:URLRequest;
  22.         private var varibl:URLVariables;
  23.         private var url_loader:URLLoader;
  24.         private var _votes:int;
  25.        
  26.        
  27.         public function StartScript() {
  28.             this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
  29.         }
  30.        
  31.         public function onAddedToStage (e:Event):void {
  32.             this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
  33.             Security.loadPolicyFile("http://сервер/crossdomain.xml");
  34.             Security.allowDomain("*");
  35.             stage.dispatchEvent(new Event (Event.DEACTIVATE));
  36.             stage.dispatchEvent(new Event (Event.ACTIVATE));
  37.             wrapper = Object (parent.parent);
  38.             wrapper.external.showInstallBox();
  39.             wrapper.external.setTitle("Snowboard Challenge");
  40.            
  41.             if (wrapper.application.parameters.is_app_user==1) {
  42.                 startApi();
  43.                
  44.             }else  {
  45.                 wrapper.addEventListener('onApplicationAdded', wrapperAdded);
  46.             }
  47.         }
  48.        
  49.         public function wrapperAdded (e:Event) {
  50.                 wrapper.removeEventListener('onApplicationAdded', wrapperAdded);
  51.                 startApi();
  52.         }
  53.        
  54.         public function startApi() {
  55.            
  56.             viewer_id=wrapper.application.parameters.viewer_id;
  57.                                                 server_url = wrapper.application.parameters.api_url + '?';
  58.                                            
  59.                                                 api=new VkApiNode(viewer_id,api_id,api_secret,test_mode,'XML','2.0',server_url);
  60.                                                 // конечно не здесь функция вызывается
  61.             getUserMoney (1);
  62.         }
  63.  
  64.         // голоса
  65.        
  66.         public function  getUserMoney (_votes:int) {
  67.             this._votes=_votes;
  68.             wrapper.external.showPaymentBox(_votes);
  69.             wrapper.addEventListener("onBalanceChanged", onBalanceChanged);
  70.            
  71.         }
  72.         private function onBalanceChanged (e:Object) {
  73.             wrapper.removeEventListener("onBalanceChanged", onBalanceChanged);
  74.                        
  75.             url_request=new URLRequest("http://сервер/balance.php");
  76.  
  77.                                                 varibl = new URLVariables();
  78.             varibl.userID=wrapper.application.parameters.viewer_id;
  79.             varibl.auth_key=wrapper.application.parameters.auth_key;
  80.             varibl.votes=_votes*100;
  81.             var randVar:int = Math.random()*1000;
  82.             varibl.randomMath = randVar;
  83.            
  84.             url_request.data=varibl;
  85.             url_request.method=URLRequestMethod.POST;
  86.             url_loader=new URLLoader ();
  87.            
  88.                                                 url_loader.addEventListener(Event.COMPLETE, completeBalance);
  89.             url_loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorListener);
  90.                                                url_loader.load(url_request);
  91.         }
  92.         private function completeBalance  (event:Event):void {
  93.             url_loader.removeEventListener(Event.COMPLETE, completeBalance);
  94.             url_loader.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorListener);
  95.         }
  96.        
  97.        
  98.         private function ioErrorListener (event:IOErrorEvent):void {
  99.             var _infoError:InfoError = new InfoError ();
  100.             _infoError.someTxt.text = "Ошибка соединения с сервером";
  101.             addChild(_infoError);
  102.         }
  103.     }   
  104. }


В файле balance.php

  1. <?php
  2.  
  3. require('VkApi.class.php');
  4.  
  5.  
  6. $UserID = $_POST['UserID'];
  7. $auth_key = $_POST['auth_key'];
  8. $votes=$_POST['votes'];
  9. $random=$_POST['randomMath'];
  10. $app_id = 'id';
  11. $api_secret = 'защищенный ключ';
  12.  
  13. $real_key = md5($app_id."_".$UserID."_".$api_secret);
  14.  
  15. if ($auth_key == $real_key){
  16.  
  17. function get_url($query) {
  18.    $ch = curl_init();
  19.    curl_setopt($ch, CURLOPT_URL, $query);
  20.    curl_setopt($ch, CURLOPT_HEADER, 0);
  21.    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  22.    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
  23.    return curl_exec($ch);
  24.    curl_close($ch);
  25.  
  26.    
  27. }
  28. $api = new VkApiNode($app_id, $api_secret);
  29. $query = $api->getBalance($UserID);
  30. $user_balance = new SimpleXMLElement(get_url($query));
  31.  
  32.  
  33. if ($user_balance->balance >=$votes) {
  34.    get_url($query = $api->withdrawVotes($UserID, $votes));
  35.  
  36. }
  37. }
  38. ?>
catamount5

 
Сообщения: 63
Зарегистрирован: 10 авг 2010, 13:37
Благодарил (а): 22 раз.
Поблагодарили: 6 раз.

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

Сообщение catamount5 » 03 мар 2011, 18:07

ну неужели никто не поможет? :roll:
catamount5

 
Сообщения: 63
Зарегистрирован: 10 авг 2010, 13:37
Благодарил (а): 22 раз.
Поблагодарили: 6 раз.

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

Сообщение Foxmen » 12 мар 2011, 23:00

при открытии файла 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
Что делать ?
Foxmen

 
Сообщения: 80
Зарегистрирован: 03 сен 2010, 19:58
Благодарил (а): 4 раз.
Поблагодарили: 2 раз.

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

Сообщение Александр » 12 мар 2011, 23:11

Foxmen
Файл VkApi.class.php на сервере есть?
Возьми этот файл, например, из этого архива Чтобы увидеть ссылку - зарегистрируйтесь
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

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

Сообщение Foxmen » 13 мар 2011, 09:27

Помогло-Спасибо!
Foxmen

 
Сообщения: 80
Зарегистрирован: 03 сен 2010, 19:58
Благодарил (а): 4 раз.
Поблагодарили: 2 раз.

Пред.

Вернуться в Неактуальные уроки (API 2.0 и устаревшие методы)



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0