Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.10.2012, 17:36
spider вне форума Посмотреть профиль Отправить личное сообщение для spider Найти все сообщения от spider
  № 1  
Ответить с цитированием
spider

Регистрация: Oct 2012
Сообщений: 3
По умолчанию Ошибки в ответ на запросы через api

Всем привет!
Пишу приложение для запуска на компе. Пытаюсь получить список друзей пользователя, которые установили конкретное приложение вконтакте. Пусть номер страницы пользователя 12345, а номер приложения api_id=123.
Посылаю вот такую команду:
Код:
http://api.vk.com/api.php?api_id=123&method=friends.getAppUsers&sid=39f92af16254e643196d6025c9d7edc3dfe1d528108ebeadeb564cf61398aa&sig=74e0e3543b81f90cd0032d25e28e1c63&v=3.0
Приходит в ответ ошибка такого плана: Error 3 : Unknown method passed: Session can be expired, revoked by user or connected with different IP address
Пробую просто хотя бы получить список всех друзей:
Код:
http://api.vk.com/api.php?api_id=123&method=friends.get&sid=39f92af16254e643196d6025c9d7edc3dfe1d528108ebeadeb564cf61398aa&sig=05690ea3e880a9b8943e91058c0063a1&v=3.0&fields=first_name
В ответ ошибка: Error 4 : Incorrect signature: server authorization
В обоих случаях считаю sig, как описано здесь.
В первом случае
Код:
sig = md5("12345api_id=123method=friends.getAppUsersv=3.0bf2af7721e")
Во втором случае получается
Код:
sig = md5("12345api_id=123fields=first_nameformat=XMLmethod=friends.getv=3.0bf2af7721e")
где bf2af7721e - secret, полученнный при авторизации по ссылке, которую уже привел выше.
Соответственно 2 вопроса: почему friends.getAppUsers вообще не воспринимается сервером и почему friends.get возвращает ошибку о неправильной подписи, если все делаю так, как написано в инструкции?
P.S. У пользователя 12345 установлено приложение 123 со всем запрашиваемыми для приложения разрешениями.
P.P.S. При этом все отлично работает, если авторизоваться по новому принципу. Но нужен именно старый метод авторизации для последующей возможности взаимодействия с приложением...


Последний раз редактировалось spider; 19.10.2012 в 14:21.
Старый 16.10.2012, 18:14
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Там у них есть одна тупость с локальным тестом при такой авторизации. Сессия истекает, и при каждом входе в контакт меняется ее ID. Проще говоря локально потестировать не меняя каждый раз ID сессии не получится
Я делал приложение пустышку, которое только и делало, что выводило все необходимые для авторизации данные, и залил его на место разрабатываемого приложения. Когда id сессии менялся, я просто запускал это приложение, брал оттуда id сессии, и добавлял перед компиляцией в свое. Не удобно, но работало.

Старый 16.10.2012, 18:28
spider вне форума Посмотреть профиль Отправить личное сообщение для spider Найти все сообщения от spider
  № 3  
Ответить с цитированием
spider

Регистрация: Oct 2012
Сообщений: 3
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Там у них есть одна тупость с локальным тестом при такой авторизации. Сессия истекает, и при каждом входе в контакт меняется ее ID. Проще говоря локально потестировать не меняя каждый раз ID сессии не получится
Я делал приложение пустышку, которое только и делало, что выводило все необходимые для авторизации данные, и залил его на место разрабатываемого приложения. Когда id сессии менялся, я просто запускал это приложение, брал оттуда id сессии, и добавлял перед компиляцией в свое. Не удобно, но работало.
Не совсем Вас понял. Вы имеете ввиду, что меняется параметр sid? Если да, то что значит "локально потестировать не меняя каждый раз ID сессии не получится". Я же параметр sid каждый раз при запуске своего приложения получаю из строки URL браузера после того, как проходит успешная авторизация. Да и sid не влияет на генерацию sig...
UPD. Да, что смущает еще при таком механизме авторизации - это то, что параметр expire = 0. Хотя 0 скорее обозначает, что сессия никогда не закроется, чем то, что она сразу закроется при открытии) При авторизации на основе oauth expires_in = 86400, т.е. 24 часа длится максимум сессия при такой авторизации...

Старый 18.10.2012, 17:56
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Не совсем Вас понял. Вы имеете ввиду, что меняется параметр sid?
Да
Цитата:
Если да, то что значит "локально потестировать не меняя каждый раз ID сессии не получится"
Я имею в виду, что перед компиляцией приложения нужно указать где-то (записать в константу или переменную, например) новый id сессии
Вообще, не знаю возможно ли ее сделать "вечной", так как у меня динамический IP и сессия в любом случае обрубается при его изменении. Так что по-любому это приходится делать вручную.

п.с. А контактовская библиотека APIConnection не подходит? С ней эти действия гораздо проще делаются

Цитата:
Я же параметр sid каждый раз при запуске своего приложения получаю из строки URL браузера после того, как проходит успешная авторизация.
так приложение все-таки браузерное или
Цитата:
для запуска на компе.
?

Старый 18.10.2012, 18:56
spider вне форума Посмотреть профиль Отправить личное сообщение для spider Найти все сообщения от spider
  № 5  
Ответить с цитированием
spider

Регистрация: Oct 2012
Сообщений: 3
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Да

Я имею в виду, что перед компиляцией приложения нужно указать где-то (записать в константу или переменную, например) новый id сессии
Вообще, не знаю возможно ли ее сделать "вечной", так как у меня динамический IP и сессия в любом случае обрубается при его изменении. Так что по-любому это приходится делать вручную.

п.с. А контактовская библиотека APIConnection не подходит? С ней эти действия гораздо проще делаются


так приложение все-таки браузерное или

?
Приложение десктопное, но в нем используется компонент WebBrowser .Net, через который пользователь вводит логин-пароль (компонент WebBrowser .net использует данные IE, поэтому, если пользователь не доверяет приложению, то перед его запуском ему достаточно авторизоваться через ослика, тогда в программе уже не надо будет вводить логин-пароль) и далее происходит авторизация по этому принципу через
Код:
http://vk.com/login.php?app=123&layout=popup&type=browser&settings=264199
В ответ в браузер приходит ссылка вида
Код:
http://vk.com/api/login_success.html#session={"mid":66748,"sid":"ea56492j61334be88e2e8e1dccd21ef8d2f4606f26add88b2e1ee313e2","secret":"733mf8a8c5","expire":0,"sig":"f7afd3db2d3a8a08c849bb038fd52173"}
с параметрами сессии. Оттуда я их десериализую как JSON, потом считаю sig, как указано по той же ссылке, и как я приводил в примере в первом сообщении... После этого метод friends.get в ответ присылает, что неверная подпись (sig), а friends.getAppUsers вообще не работает (см. подробное описание в шапке).

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:51.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 23:51.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.