Просмотр полной версии : [Вконтакте] secure методы API вКонтакта
Пытаюсь получить платёжный балланс приложения. Пары в подписи запроса расставлены по алфавиту, в сиге нету амперсандов, обязательные параметры учтены. В чём может быть проблема? :umnik2:
<?php
$unixtime=strtotime('now');
$random=rand(0,100000000);
$api_id="1456993";
$method="secure.getAppBalance";
$api_secret="qW5aC9rPw7";
$v="2.0";
$sig=md5("api_id=1456993method=secure.getAppBalancerandom=".$random."timestamp=".$unixtime."v=2.0".$api_secret);
$zaproz="http://api.vkontakte.ru/api.php?api_id=1456993&method=secure.getAppBalance&random=".$random."×tamp=".$unixtime."&v=2.0"."&sig=".$sig;
$ppp=file_get_contents($zaproz);
echo $ppp;
?>
В итоге 4ая ошибка
" 4 Incorrect signature api_id 1456993 method secure.getAppBalance random 65902710 timestamp 1252954255 v 2.0 sig 03390f36ff53090e679b8f091a08a87b "
проверьте правильно ли указали ключ, должен быть не "Секретный ключ" приложения, а "Защищенный ключ" со вкладки "Платежи" (их еще включить нужно предварительно).
Mur4ik, спасибо, действительно ошибка была в ключе, всё прекрасно работает :)
пипл а есть примеры приложений secure методами?!
Точнее:
Допустим код.
<?php
$unixtime=strtotime('now');
$random=rand(0,100000000);
$api_id="******";
$api_secret="********";
$v="2.0";
$method="secure.sendNotification";
//$uids=""
//$mes="Хм_вот_такая_вот_проблема";
//эти переменные допустим задаю через адресную строку, обращаясь к этому скрипту.
//как сделать чтобы постороние не могил вызвать этот запрос, зайдя на сайт ну и запустим просто адрес!?
$sig=md5("api_id=".$api_id."message=".$mes."method=".$method."random=".$random."timestamp=".$unixtime."uids=".$uids."v=2.0".$api_secret);
$zaproz="http://api.vkontakte.ru/api.php?api_id=".$api_id."&message=".$mes."&method=".$method."&random=".$random."×tamp=".$unixtime."&uids=".$uids."&v=2.0&sig=".$sig;
$ppp=file_get_contents($zaproz);
echo 'Answer:'.$ppp;
И проблема №2: как поставить пробелы в message?
<?php
/////////////////////////////////////
// WaWeb Hak.lv 2009 //
/////////////////////////////////////
$vk_z['api_id'] = "";
$vk_z['v'] = "2.0";
$vk_c['api_secret'] = "";
$vk_z['random'] = rand(1000000,7777777);
function req($vk_z){
global $vk_c;
ksort($vk_z, SORT_STRING);
foreach($vk_z as $k => $v){
$r .= $k."=".$v."&";
$m .= $k."=".$v;
}
$m .= $vk_c['api_secret'];
$r = substr($r, 0, -1)."&sig=".md5($m);
return $r;
}
function curlvk($req){
$url = "http://api.vkontakte.ru/api.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
function saveAppStatus($id, $status){
global $vk_z;
$vk_z['uid'] = $id;
$vk_z['timestamp'] = strtotime('now');
$vk_z['timestamp'] = $vk_z['timestamp']+3500;
$vk_z['method'] = "secure.saveAppStatus";
$vk_z['status'] = iconv("Windows-1251", "UTF-8", $status);
$vk_z['format'] = "JSON";
$req = req($vk_z);
return curlvk($req);
}
$status = "Мой Адрес: hak.lv";
echo saveAppStatus("50693460", $status);
?>
Люди добрые, есть вопросы
1. Как всякие бяки вроде кавычек и слешей отправлять через secure.sendNotification? С ними получаю от сервера ошибку "Invalid signature".
2. Как получить данные о стране по коду ( getCountries ), В ответ приходять данные, но имена стран пустые ( коды посылаю 1,2,3 )
3. Посылаю http://api.vkontakte.ru/api.php?_=0.2251677862368524&api_id=1609131&format=JSON&method=getServerTime&test_mode=1&v=2.0&sig=ae48d7af097df5980d7411e23bc3b20b .Не работает локально. Проверяю в браузере ( ввожу урл вручную ). В ФФ все норм, в ИЕ - Invalid signature. Соответственно, из флеша локально не работает ( та же ошибка ), залил на вконтакте - работает в обеих браузерах.
Anton Riot
07.10.2009, 18:16
1.использовать их html коды.
2.неправильно сериализуешь XML, или с кодировками что-то
3.это вопрос? Так и должно быть. Что удивительного.
Всем доброго времени суток :)
Раcскажите, плиз, как работать с secure методами?
Судя по примерам здесь, надо создать php файл на сервере и к нему обращаться?
Если есть примерчики, буду благодарен очень :)
Anton Riot
26.10.2009, 21:36
в vkontakte.ru/club1 всё рассказано.
Привет всем!
Если из флеша делаю запрос secure.methods.getAppBalance, то ответ получаю.
Но вылив приложение на сайт приходит Unknown error occured
Как так? Разве не наоборот должно быть :)
Можешь выложить исходник????
неа... :))))
да и проблема решилась уже
Братва, а как включить платежи?
Все пишут, что на вкладке платежей, но у меня она выглядит вот так:
http://i006.***********/1103/2f/3803f23810da.png
Так они у вас включены)
Были бы выключены, то в этой вкладке предлагалось бы включить их.
а отключить уже нельзя?
Как-то тупо сделано..
Видимо нет, а зачем? Работа с платежами должна отключатся/включатся на уровне сервера(приложения).
А где взять защищенный ключ? Его же нет на этой вкладке. Или я что-то недогоняю? Оо
Добавлено через 57 секунд
во блин, я слепошарый :D
он на другой вкладке
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.