Comments 38
А уже работающие приложения с использования Javascript API можно посмотреть?
Вот это: vkontakte.ru/app1710895
В чем проблема использовать API через php?
Секаса осенна многа, насяльника.
«Пользовательские» методы API используют куки для проверки авторизации. Передать эти куки на свой домен через iframe — отдельная проблема.
«Пользовательские» методы API используют куки для проверки авторизации. Передать эти куки на свой домен через iframe — отдельная проблема.
Не труъ, аякс рулит. Сам сначала пытался через пхп сделать, потом заюзал скрипт автора и я понял, что на аяксе будет гараздо проще. А пхп там все равно пригодился, с методами secure.* не секьюрно через аякс работать.
А почему бы не обращатся к своему сценарию на PHP через AJAX? И сделать чтобы свой сценарий на PHP высчитывал «эти» подписи?
Да, это повысит безопасность приложения — секретный ключ больше не будет фигурировать в клиентской части ни в каком виде. И если это критично, то можно так и делать.
Однако, в этом нет никакой необходимости. Секретный ключ, на самом деле, никакой не секретный, а подпись ни от чего не защищает. Единственное, что можно сделать, украв чужой ключ — это притвориться другим приложением. Но что это даст потенциальному злоумышленнику?
Все финансовые операции проводятся через механизм защищенного взаимодействия, в котором участвует совершенно другой ключ, не фигурирующий на стороне клиента. Кроме того, приложение выполняется в контексте определенного пользователя, так что навредить другому пользователю, злоумышленник не сможет — только себе. Приложению злоумышленник тоже никак не навредит, потому что от имени администратора он все равно не сможет никакие API-функции выполнить.
В общем, красть секретный ключ и подделывать подпись совершенно бесполезно. И ничего страшного, даже если этот ключ будет в тексте в открытом виде. Вообще, из Flash-приложений этот ключ тоже извлекается, при желании.
Однако, в этом нет никакой необходимости. Секретный ключ, на самом деле, никакой не секретный, а подпись ни от чего не защищает. Единственное, что можно сделать, украв чужой ключ — это притвориться другим приложением. Но что это даст потенциальному злоумышленнику?
Все финансовые операции проводятся через механизм защищенного взаимодействия, в котором участвует совершенно другой ключ, не фигурирующий на стороне клиента. Кроме того, приложение выполняется в контексте определенного пользователя, так что навредить другому пользователю, злоумышленник не сможет — только себе. Приложению злоумышленник тоже никак не навредит, потому что от имени администратора он все равно не сможет никакие API-функции выполнить.
В общем, красть секретный ключ и подделывать подпись совершенно бесполезно. И ничего страшного, даже если этот ключ будет в тексте в открытом виде. Вообще, из Flash-приложений этот ключ тоже извлекается, при желании.
Объясните плз как без JSONP получать ответы api-сервера вконтакте. Насколько я понимаю, json-ответ так и приходит в json-формате, без вызова какого-либо метода. То есть по событию загрузки динамически созданного тега script приложение выкинет JS ошибку. То есть это будет равноценно тому, что у нас на странице появится что-то типа:
а не
<script>
{answer: [some_answer_in_vk_format]}
</script>
а не
<script>
hadle_answer({answer: [some_answer_in_vk_format]});
</script>
Все, понял, скачал ваш код. Про параметр callback нигде в доках vkontakte Iframe API не написано. Откуда вы про него узнали? Вы — Дуров? :)
Про параметр callback нигде в доках vkontakte Iframe API не написано.
О, да. По началу, это меня выбило из колеи. Обнаружил чисто случайно, когда экспериментировал с jQuery.
Параметр callback — стандартный в JSONP
Речь шла о get-параметре callback в API вконтакта, это во первых. Во вторых, в jsonp нет никаких стандартных параметров, callback там уже обрамляет json-ответ.
А мне объясните — что толкает вас (разработчики) на переход с одного единого файла (swf) на сотню (html, css, js, jpg...)? — и на переход с того, что выполняется одинаково на любом браузере, на чехарду с парком браузеров пользователей(?) В чём есть огромнейшее преимущество перед SWF, что вы готовы на такой геморрой?
А мне объясните — что толкает вас (разработчики) на переход с одного единого файла (swf) на сотню (html, css, js, jpg...)?
Про всех говорить не стану, но лично мне не нравится то, что в линуксе еще с ранних версий Flash-плагина существует баг, не позволяющий вводить в текстовые поля русский текст. Вернее даже, не то, что мне это не нравится, а из-за этого я вообще не могу использовать ни одну флешку, в которой надо вводить русский текст.
Кстати, библиотеку вполне можно портировать на Actionscript.
Я просто не интересовался, возможно, там уже что-то подобное есть. Все же, Flash-приложения доступны там уже давным давно.
Я просто не интересовался, возможно, там уже что-то подобное есть. Все же, Flash-приложения доступны там уже давным давно.
А не подскажите, есть ли готовый пример вывода РСС с своего сайта, например?
А сильверлайт, интересно, поддерживается кроссдомейн.иксэмэлем?..
Вообщем, под IE8 баг — правильная часть кода:
function decodeSecret(api_secret) {
// decode api_secret
if (api_secret.substring(0, 4) == 'sx--') {
var api_secret_decoded = '';
var char_code = '';
var code = '';
for ( var i = 4; i < api_secret.length; i++) {
// form char code
code = api_secret.substring(i,i+1);
if (code != 'l') {
char_code += code;
} else {
api_secret_decoded += String
.fromCharCode(parseInt(char_code) + 31);
char_code = '';
}
}
return api_secret_decoded;
// api_secret is not encoded, so just return it
} else {
return api_secret;
}
}
function decodeSecret(api_secret) {
// decode api_secret
if (api_secret.substring(0, 4) == 'sx--') {
var api_secret_decoded = '';
var char_code = '';
var code = '';
for ( var i = 4; i < api_secret.length; i++) {
// form char code
code = api_secret.substring(i,i+1);
if (code != 'l') {
char_code += code;
} else {
api_secret_decoded += String
.fromCharCode(parseInt(char_code) + 31);
char_code = '';
}
}
return api_secret_decoded;
// api_secret is not encoded, so just return it
} else {
return api_secret;
}
}
Спасибо за замечание.
Поначалу, честно говоря, был озадачен. Полез в доки, естественно — оказалось, точно:
Единственное, чем писать api_secret.substring(i,i+1), наверное, проще будет писать api_secret.charAt(i)
Поначалу, честно говоря, был озадачен. Полез в доки, естественно — оказалось, точно:
Treating the string as an array is not part of ECMAscript; it's a Javascript feature (and not supported in all browsers)
Единственное, чем писать api_secret.substring(i,i+1), наверное, проще будет писать api_secret.charAt(i)
А это точно кроссбраузерно? Потому как сейчас я даже с айфона могу загружать приложение своё.
А это точно кроссбраузерно? Потому как сейчас я даже с айфона могу загружать приложение своё.
У меня нет IE, так что проверить мне сложнее. Но вообще, как бы, да. Квадратные скобки не являются частью стандарта ECMAscript, и не обязаны поддерживаться всеми браузерами (каюсь, не знал). А метод charAt() должен поддерживаться всем. Так или иначе, надо проверять.
А вообще, спасибо за проделанную работу! )
кстати, протестировать на екмаскриптовость помогает jslint.com.
там ещё и ворнинги полезные есть.
там ещё и ворнинги полезные есть.
Подскажите, тут такой вопрос. Есть скрипт:
var api = new vk_api('...','..');
api.params.viewer_id = <?php echo $_GET['viewer_id']; ?>;
api.params.api_id = 123;
api.call('isAppUser',function(data) {alert(123);});
Все вроде просто. При вызове call firebug говорит:
MD5 is not defined
[Break on this error] parameters.sig = MD5(sig);
Пытался разобраться с исходниками — не вышло. Как лечить?
var api = new vk_api('...','..');
api.params.viewer_id = <?php echo $_GET['viewer_id']; ?>;
api.params.api_id = 123;
api.call('isAppUser',function(data) {alert(123);});
Все вроде просто. При вызове call firebug говорит:
MD5 is not defined
[Break on this error] parameters.sig = MD5(sig);
Пытался разобраться с исходниками — не вышло. Как лечить?
Подсунул MD5 прямо в скрипт — заработало. Иначе — нет.
Вы неверно работаете со скриптом. Дело в том, что все манипуляции нужно проводить внутри callback-функции, выполняющейся при успешной инициализации. Т.е., в данном случае:
Более того, устанавливать api.params.* через PHP — совершенно бессмысленно. Все эти параметры устанавливаются скриптом автоматически! Так что, если все далать еправильно, то Ваш скрипт должен быть таким:
var api = new vk_api(
'...',
function() {
api.params.viewer_id = <?php echo $_GET['viewer_id']; ?>;
api.params.api_id = 123;
api.call('isAppUser', function(data) {alert(123);});
}
);
Более того, устанавливать api.params.* через PHP — совершенно бессмысленно. Все эти параметры устанавливаются скриптом автоматически! Так что, если все далать еправильно, то Ваш скрипт должен быть таким:
var api = new vk_api(
'...',
function() {
api.call('isAppUser', function(data) {alert(123);});
}
);
Господин Колонист, спасибо вам за удобную библиотеку. Однако я вижу, что на странице xinit.ru/solutions/vkontakte-javascript-api-wrapper больше нет ничего, относящегося к vk_jsapi. Это смущает. :( Я уже взялся за проект, в котором vk_api вовсю используется, и хотелось бы быть уверенным (ишь, чего захотел!) что ваша библиотека не исчезнет из интернета и даже (еще более наглое пожелание) будет поддерживаться автором. :) В любом случае спасибо за удобную и полезную разработку, и надеюсь, что перемены на вашем сайте не означают конца vk-jsapi.
1. Из сети ничего не исчезнет, ибо Google Code: vk-jsapi.googlecode.com рулит. Свой сайт я тоже скоро приведу в порядок.
2. Поддерживаться библиотека уже не будет, потому что Контакт сделал свое решение VK.api(). И я бы рекомендовал использовать именно решение самого Контакта. Тем более, что вызовы api.call() и VK.api() абсолютно идентичны.
Тем не менее, библиотека работает. И если вы сделали приложение на ее основе, то оно будет прекрасно работать, пока вы не соберетесь его перестраивать.
2. Поддерживаться библиотека уже не будет, потому что Контакт сделал свое решение VK.api(). И я бы рекомендовал использовать именно решение самого Контакта. Тем более, что вызовы api.call() и VK.api() абсолютно идентичны.
Тем не менее, библиотека работает. И если вы сделали приложение на ее основе, то оно будет прекрасно работать, пока вы не соберетесь его перестраивать.
Да, полностью заменяет. Когда я ее делал, еще не было никакого VK.api, так что сейчас надо использовать контактовскую библиотеку.
Sign up to leave a comment.
Автоматизация использования Javascript API Вконтакте