to2n: Ну ошибка говорит о том что подпись неверная. Она действительно неверная так как считается от другого секретного ключа, чем тот что есть с учетом переданного access_token.
Все сессионные запросы подписываются ключем сессии, а mediatopic.post сессионный.
lsa413: есть пример на github : https://github.com/apiok/js_sample_widgets
там скрипт viral.html - это основной скрипт с запросом на авторизацию, передает возврат через viral-cb.html, которые и отсылает сообщение основному скрипту. В данном примере без параметров
lsa413: Дмитрий все верно отписал.
Используйте OAUTH - и на ok и на других сайтах это должно работать.
1. Открываете новое окно с авторизацией на сайте. Туда человек логинится. Передаете туда параметр с адресом спец страницы возврата куда в этом окне пойдет редирект после окончания логина.
2. В этой спец странице делаете через javascript postmessage (посылаете сообщение своей основной странице что человек залогинился и сессия такая-то, ключ такой-то) и закрываете страницу.
3. Основной сайт получив сообщение шлет REST запрос на сервис (в случае OK это users.getCurrentUser передав туда сессию и подписав ключем сессии запрос). В ответ получаете нужные данные и показываете на экране.
Без открытия нового окна по причинам безопасности по-моему уже ни один сайт не авторизует.
Платон Фёдорович: навскидку, в строки 162 (к подписи) и 163 (самому запросу)
А для адреса надо в OAUTH в scope передать GET_EMAIL (скорее всего там уже передается VALUABLE_ACCESS так что можно будет найти). Этот код скорее всего находится за пределами переданного класса.
Поддержкой HybridAuth не занимаемся и как что там сделано не в курсе.
Такие запросы приходят крайне редко. Но вообще добавить это поле с емейлом в профиль пользователя (тогда можно будет менять самостоятельно) задача есть, но из-за крайней редкости вопросов малоприоритетна.
anvoevodin: В таком случае вам следует написать на api-support@ok.ru и предоставить туда больше данных. Можно будет детальней изучить проблему в вашем случае.
Dmitry:
Запросы к АПИ грубо говоря делятся на 2 группы - сессионные и серверные.
Сессионные запросы подписываются текущей сессией и могут вызываться с компьютера пользователя (в случае хтмл или нативной андроид игры, например). В таких запросах, естественно, фильтр на адреса не накладывается.
Серверные (несессионные запросы) подписываются секретным ключем приложения, который хранить на клиентах небезопасно, и фильтруются фильтром адресов.
Так вот, большинство запросов к АПИ - сессионные, а, значит, не имеют ограничений на запрос. Из типичных методов используемых приложениями, только нотификации (notifications.sendSimple например) несессионные. Возможно в вашем случае проблемы не будет и сейчас.
evgeny80: Он и не должен, так как куки авторизацию в API не используем. Скорее всего framework на котором вы работаете поганит жизнь и зачем-то доклеивает по умолчанию к запросу этот параметр
ftc:
Да, проверил на ok.ru с sample приложения https://github.com/apiok/ok-js-sdk/samples/viral.html
Действительно не работает, а в режиме разработки - подпись работает корректно.
Завтра утром должно починиться (так как на тест окружении тоже работает).
ftc:
Вообще выглядит что все ок, юнити под рукой нет чтобы проверить.
Возможно проблема в том как работает WWW.EscapeURL.
Код на JS который корректно отрабатывает (а также поддерживает OAUTH сессию - access_token)
Все сессионные запросы подписываются ключем сессии, а mediatopic.post сессионный.