Использую библиотеку вк openapi.js. Все методы которые вызывал работали. Сейчас столкнулся с методами likes.add и likes.delete а они отвечают отказом доступа. Подскажите в что я делаю не так.
VK.Api.call('likes.add', {
type: 'post',
owner_id: -2158488,
item_id: 651604,
v:'5.60'
}, function (r){
console.log('r', r);
});
В console
Object
error: Object
error_code: 15
error_msg: "Access denied: no access to call this method"
Битовая маска при авторизации 73758
Метод likes.add можно использовать только в standalone-приложениях. Это такие приложения, которые, простыми словами, имеют более расширенный доступ к системе пользователя, чем обычный веб-сайт. Например, мобильные клиенты, десктопные программы и даже расширения для браузеров (некоторых ограничений, например CORS, у них нет, а также они могут читать содержимое любой вкладки). Получить токен standalone-приложения, у которого не было бы ограничений на вызовы методов API, через веб-сайт нельзя. Вообще. Никак.
Дело в том, что получить токен без ограничений можно только в том случае, если в качестве параметра redirect_uri указан адрес https://oauth.vk.com/blank.html. Этот параметр отвечает за то, куда будет перенаправлен пользователь после авторизации в приложении. И после авторизации пользователя токен отобразится в адресной строке браузера примерно вот так:
https://oauth.vk.com/blank.html#access_token=533bacf01e11f55b536a565b57531ad114461ae8736d6506a3&expires_in=86400&user_id=8492&state=123456
К сожалению, не существует такой магии, которая бы позволила получить содержимое hash-строки другой вкладки. А потенциальные лазейки (например, iFrame) ВКонтакте закрыли. Именно поэтому самостоятельно дёрнуть этот токен вы и не сможете, даже если пользователь успешно авторизуется в приложении. Тем не менее, мобильные и десктопные приложения, а также браузерные расширения обладают достаточным функционалом, чтобы сделать это.
Сделано это, очевидно, для того, чтобы пользователи не авторизовывались на недобросовестных сайтах. Никому ведь не хочется увидеть свой лайк под рекламной записью казино "Вулкан" или какого-нибудь средства по увеличению своего дружка.
Но вы можете авторизовать пользователя и попросить его скопировать токен в форму на вашем сайте. А дальше уже вызывать необходимые вам методы через JSONP или с бэкэнда. Open API в таком случае не подойдет, т.к. он не умеет принимать кастомные токены. Только учтите, что после авторизации у пользователя черным по белому будет написано, чтобы он никуда не копировал токен. Но так лучше не делать. Не исключено, что это нарушает какие-нибудь правила ВКонтакте, за что они могут просто отключить ваше приложение, а также это как-никак плохо влияет на UX.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости