Ну как вариант использовать клиентский метод getUserBalance впринципе защита приложения от этого я думаю не пострадает. Даже если пользователь и умудрится обойти хэш и подменить сумму баланса, вы же все равно будете рулить от того что ответил серверный метод secure.withdrawVotes а не от того что от клиента пришло. Только вот если у вас метод secure.getBalance передает неверный timestamp, то и secure.withdrawVotes так же будет его неверный передавать...
Вы лучше узнайте в каком часовом поясе ваш сервер работает и корректируйте скриптом timestamp перед передачей вконтакту
<?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 то всё равно получаю ту же ошибку.