Ребят проблема с secure.getBalance.

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в IFrame-приложениях (JavaScript, PHP и т.д)
Ответить
eprauz
Сообщения: 13
Зарегистрирован: 14 фев 2012, 21:25

Ребят проблема с secure.getBalance.

Сообщение eprauz »

Смотрите есть код:

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

<?php require 'vkapi.class.php'; header ("Content-Type: text/html; charset=utf-8"); $idv = $_GET['viewer_id']; $api_id = блаблабла; // Insert here id of your application$secret_key = 'блаблабла'; // Insert here secret key of your application $VK = new vkapi($api_id, $secret_key); require_once('vkapi.class.php'); $resp = $VK->api('getServerTime'); $utime= $resp['response']; $resp2 = $VK->api('secure.getBalance', array('random' => rand(1000000,9999999), 'timestamp' => $utime, 'uid' => $idv) );$mymoney=$resp2;print_r($mymoney); ?>
И ВК выдаёт ошибку

Array ( [error] => Array ( [error_code] => 150 [error_msg] => Invalid timestamp [request_params] => Array ( [0] => Array ( [key] => api_id [value] => 2665162 ) [1] => Array ( [key] => format [value] => json ) [2] => Array ( [key] => method [value] => secure.getBalance ) [3] => Array ( [key] => random [value] => 9052 ) [4] => Array ( [key] => timestamp [value] => 1329242726 ) [5] => Array ( [key] => uid [value] => 95437744 ) [6] => Array ( [key] => v [value] => 3.0 ) [7] => Array ( [key] => sig [value] => 9f49d11c95adc3540bc730a1e69a28d4 ) ) ) )

Вроде время такое же, как и на сервере ВК, но пишет ошибку.
Alazaur
Разработчик
Разработчик
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25

Re: Ребят проблема с secure.getBalance.

Сообщение Alazaur »

В вешем коде:

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

$resp = $VK->api('getServerTime'); $utime= $resp['response'];
Замените на

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

$utime= time();
eprauz
Сообщения: 13
Зарегистрирован: 14 фев 2012, 21:25

Re: Ребят проблема с secure.getBalance.

Сообщение eprauz »

Да я уже так пробовал, всё равно не работает. Кстати не у меня одного. Ума не приложу, что делать.
sanych_dv
Разработчик
Разработчик
Сообщения: 550
Зарегистрирован: 29 апр 2011, 01:52

Re: Ребят проблема с secure.getBalance.

Сообщение sanych_dv »

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

 $getBalance = $VK->api( 'secure.getBalance', array('uid' => $idv )); print_r($getBalance); 
этого достаточно, остальное формируется в vkapi.class.php
Alazaur
Разработчик
Разработчик
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25

Re: Ребят проблема с secure.getBalance.

Сообщение Alazaur »

У меня в скрипте вот так:

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

 $resp = $VK->api('secure.getBalance', array('timestamp'=>time(), 'random'=>time(), 'uid'=>$_POST['userid']));if($resp['response'] >= ($_POST['votes'] * 100)){   $resp = $VK->api('secure.withdrawVotes', array('timestamp'=>time(), 'random'=>time(), 'uid'=>$_POST['userid'], 'votes'=>($_POST['votes']*100)));   ... 
У пользователей проблем с вводом голосов не возникает. Последний вброс голосов от пользователя в приложение был 2 часа назад.
eprauz
Сообщения: 13
Зарегистрирован: 14 фев 2012, 21:25

Re: Ребят проблема с secure.getBalance.

Сообщение eprauz »

Нет, не работает. Может есть ещё какие нибудь способы получить баланс?
Alazaur
Разработчик
Разработчик
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25

Re: Ребят проблема с secure.getBalance.

Сообщение Alazaur »

Ну как вариант использовать клиентский метод getUserBalance впринципе защита приложения от этого я думаю не пострадает. Даже если пользователь и умудрится обойти хэш и подменить сумму баланса, вы же все равно будете рулить от того что ответил серверный метод secure.withdrawVotes а не от того что от клиента пришло. Только вот если у вас метод secure.getBalance передает неверный timestamp, то и secure.withdrawVotes так же будет его неверный передавать...
Вы лучше узнайте в каком часовом поясе ваш сервер работает и корректируйте скриптом timestamp перед передачей вконтакту
eprauz
Сообщения: 13
Зарегистрирован: 14 фев 2012, 21:25

Re: Ребят проблема с secure.getBalance.

Сообщение eprauz »

К примеру пишу примерно вот такой код

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

<?phprequire 'vkapi.class.php'; header ("Content-Type: text/html; charset=windows-1251"); $api_id = Блаблабла; // Insert here id of your application$secret_key = 'Блаблабла'; // Insert here secret key of your application $VK = new vkapi($api_id, $secret_key); $resp = $VK->api('getServerTime');$q = $resp['response'];$t = time(); echo ('Время ВК: '.$q.' Моё время: '.$t);?>
Получаю ответ: Время ВК: 1329312137 Моё время: 1329311357
Значит моё время отстаёт на 780 секунд, но если я прибавлю 770 к моему времени и передам его как timestamp то всё равно получаю ту же ошибку.
eprauz
Сообщения: 13
Зарегистрирован: 14 фев 2012, 21:25

Re: Ребят проблема с secure.getBalance.

Сообщение eprauz »

Хах, сменил сервер, попробовал и не поверите... всё заработало. Всем спасибо за ценные советы!
Ответить