7even / vkontakte_api

Ruby-адаптер для ВКонтакте API
http://7even.github.com/vkontakte_api
MIT License
282 stars 67 forks source link

Invalid hash' after calling method 'photos.saveWallPhoto #20

Closed istickz closed 11 years ago

istickz commented 11 years ago

Пытаюсь загрузить фото на стену группы

us = app.photos.get_wall_upload_server(gid: 53285720)
up = VkontakteApi.upload(url: us.upload_url, file1: ['quetzal.jpg', 'image/jpeg'])
save = app.photos.save_wall_photo(up)

На save_wall_photo ловлю ошибку

VKontakte returned an error 121: 'Invalid hash' after calling method 'photos.saveWallPhoto' with parameters {"server"=>"323530", "photo"=>"[{\"photo\":\"92404378b6:x\",\"sizes\":[[\"s\",\"323530165\",\"68fd\",\"s4sK_5tIHgE\",67,75],[\"m\",\"323530165\",\"68fe\",\"uVeQeZnIuI8\",116,130],[\"x\",\"323530165\",\"68ff\",\"NIaCeLJVK2g\",540,604],[\"o\",\"323530165\",\"6900\",\"yTYAtgnvOrM\",130,145],[\"p\",\"323530165\",\"6901\",\"RCGA3ZJD2lo\",200,224],[\"q\",\"323530165\",\"6902\",\"m28tR-Zv0kM\",320,358],[\"r\",\"323530165\",\"6903\",\"twGnd3KvNPs\",510,570]],\"kid\":\"9ff2190c02218d9283e776b0496d7b67\"}]", "hash"=>"5d43c84fbf54b52ba6435d318061d875"}.

Можно конечно сохранять фотографии в какой нибудь альбом а потом аттачментом отправлять на стену, но это не то.

7even commented 11 years ago

У меня заработало после добавления права wall при авторизации (правда, get_wall_upload_server я вызывал без параметров - может, дело в правах на постинг в эту группу?).

istickz commented 11 years ago

Я не стал заморачиваться и поставил все права которые только существуют, кроме устаревших и nohttps

Ошибки возникают именно с photos.save_wall_photo Проверьте пожалуйста еще раз photos.get_wall_upload_server с параметром gid:

7even commented 11 years ago

Получилось, но только после того, как в photos.save_wall_photo передал тот же самый gid (судя по документации, чтобы сохранить изображение для стены, нужно указывать владельца этой стены - как и в photos.get_wall_upload_server на первом шаге). Без указания gid метод photos.save_wall_photo выдает ошибку про "Invalid hash".

istickz commented 11 years ago

Спасибо большое, действительно, нужен был gid при сохранении фотографии.

# Получение URI для загрузки фотографии
us = app.photos.get_wall_upload_server(gid: 31644851)
# POST-запрос на полученный адрес
up = VkontakteApi.upload(url: us.upload_url, file1: ['1.png', 'image/png'])
# Добавляем gid к нашему up, в котором уже есть параметры server, hash и photo
up.gid = 31644851
# Сохранение фотографии
save = app.photos.save_wall_photo(up)
# Отправка на стену группы
app.wall.post(attachments:save.first.id, owner_id: '-31644851', from_group: 1 )

P.S. Впредь постараюсь хорошо прочесть документацию пред созданием очередного Issue :)