Перейти к содержимому


Конкурс "Лучший отзовик"
× Быстрый вопрос
Пользователь месяца
Vmir Vmir 1-й за Апрель
Очков активности: 1 512 8 тем, 60 сообщений, 12 баллов репутации
ТОП самых активных за этот месяц
  • Фотография Андрей WPMasterKZ
    #1

    Андрей WPMasterKZ (wpmaster.kz)
    Очков активности: 307.5 3 темы, 32 сообщения, 5 баллов репутации

  • Фотография dos1k
    #2

    dos1k (dos1k.ru)
    Очков активности: 234 4 темы, 40 сообщений, 3 балла репутации

  • Фотография Vmir
    #3

    Vmir
    Очков активности: 135 Вне конкурса за определение пользователя месяца

  • Фотография BLIK
    #4

    BLIK
    Очков активности: 105 Вне конкурса за определение пользователя месяца

  • Фотография Роман Зеленков
    #5

    Роман Зеленков
    Очков активности: 105 9 тем, 43 сообщения, 1 балл репутации

  • Фотография agrx
    #6

    agrx (key-assort.ru)
    Очков активности: 60 0 тем, 20 сообщений, 2 балла репутации

  • Фотография Megoydagi
    #7

    Megoydagi (24ho.ru)
    Очков активности: 57 2 темы, 13 сообщений, 2 балла репутации

  • Фотография r0mZet
    #8

    r0mZet (rz-style.ru)
    Очков активности: 54 1 тема, 9 сообщений, 3 балла репутации

  • Фотография kolver
    #9

    kolver
    Очков активности: 39 4 темы, 14 сообщений, 1 балл репутации

  • Фотография OlgaGetman
    #10

    OlgaGetman
    Очков активности: 33 Вне конкурса за определение пользователя месяца

  • Показать весь ТОП 10
Поддержите форум! =)
Апдейты
  • Яндекс ИКС: 24.05.2019
  • Яндекс выдача: 20.05.2019
Топ 5 участников по репутации


Ошибка invalid hash при сохранении фотографии на стене группы

#1 Kuchuluk

Kuchuluk
  • Пользователь
  • 333 сообщений
  • Репутация: 5
0

Отправлено 15 Июль 2014 - 09:08

Делаю все вроде по документации. Сначала получаю адрес сервера для загрузки фото

$sRequest = "https://api.vkontakte.ru/method/photos.getWallUploadServer?group_id=".$group_id."&access_token=".$access_token;

потом формирую POST запрос на этот адрес

$post_params = array(
  'file1' => '@'.$photoPath2,
  );
  $ch = curl_init( $oResponce->response->upload_url );
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
  curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );
  curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
  curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params);
  $response = curl_exec( $ch );
  curl_close( $ch );

Все это работает как надо, в ответ возвращаются данные такого вида string(538) "{"server":759255,"photo":"[{\"photo\":\"5c0ee7b56f:x\",\"sizes\":[[\"s\",\"618520954\",\"a410\",\"Iosmd2gQnbE\",75,46],[\"m\",\"618520954\",\"a411\",\"Rtee5OfIEAI\",130,80],[\"x\",\"618520954\",\"a412\",\"YBQDYZywmI0\",550,337],[\"o\",\"618520954\",\"a413\",\"x-oLJQgm2RI\",130,87],[\"p\",\"618520954\",\"a414\",\"P2urHyRL8vw\",200,133],[\"q\",\"618520954\",\"a415\",\"281yPf5bAc0\",320,213],[\"r\",\"618520954\",\"a416\",\"JdxpKBE6ih8\",510,337]],\"kid\":\"62ebb35ee2e5395151f63bd0d8efbae0\"}]","hash":"7ab875310ab0cb8e53d3fd4ba6e5369b"}" - это строка, которую я распиливаю на отдельные составляющие server photo и hash. В переменную $server попадает значение 759255, в $photo - 5c0ee7b56f, в hash - 7ab875310ab0cb8e53d3fd4ba6e5369b. Затем вызываю метод photos.saveWallPhoto

$rsRequest = "https://api.vkontakte.ru/method/photos.saveWallPhoto?group_id=".$group_id."&access_token=".$access_token."&photo=".$photo."&server=".$server."&hash=".$hash;
  $roResponce = json_decode(file_get_contents($rsRequest));
  var_dump($roResponce);

И каждый раз ловлю ошибку Invalid hash. Что я делаю не так? Вроде все по документации.


 

 

  • 0

#2 kamchatniyoleg

kamchatniyoleg
  • Пользователь PRO
  • 1 178 сообщений
  • Репутация: 84

Отправлено 15 Июль 2014 - 10:06

Распечатайте переменную $hash после того как выполнили запрос file_get_contents() . Сверьтесь верно ли значение !


  • 0
Сервис электронного информирования клиентов PostTrail.ru
Отслеживание посылок Почты России в автоматическом режиме! Лояльность клиента - прибыль магазина!


#3 Ixman

Ixman
  • Пользователь PRO
  • 3 149 сообщений
  • Репутация: 834

Отправлено 15 Июль 2014 - 10:23

Попробуйте примерно так

$params = array('group_id' => $group_id,
'access_token' => $access_token,
'photo' => $photo,
'server' => $server,
'hash' => $hash,
);
$roResponce = json_decode(file_get_contents('https://api.vkontakte.ru/method/photos.saveWallPhoto' . '?' . urldecode(http_build_query($params))), true);

То есть по существу добавить функцию urldecode()


  • 0


#4 kamchatniyoleg

kamchatniyoleg
  • Пользователь PRO
  • 1 178 сообщений
  • Репутация: 84

Отправлено 15 Июль 2014 - 10:25

Ixman, Логично , а я даже и не подумал об этом .  Думаете чет не понравилось ему в тексте запроса  ? 


  • 0
Сервис электронного информирования клиентов PostTrail.ru
Отслеживание посылок Почты России в автоматическом режиме! Лояльность клиента - прибыль магазина!


#5 Ixman

Ixman
  • Пользователь PRO
  • 3 149 сообщений
  • Репутация: 834

Отправлено 15 Июль 2014 - 10:30

kamchatniyoleg, возможно какой-то символ кодируется, но не факт

Хотя в хеше вродь левых символов нет


  • 0


#6 kamchatniyoleg

kamchatniyoleg
  • Пользователь PRO
  • 1 178 сообщений
  • Репутация: 84

Отправлено 15 Июль 2014 - 10:55

Ixman, Вот и я о том же . Хэш то целостная строка не содержащая пробелов и спец символов . Так что думаю проблема не в этом !


  • 0
Сервис электронного информирования клиентов PostTrail.ru
Отслеживание посылок Почты России в автоматическом режиме! Лояльность клиента - прибыль магазина!


#7 Ixman

Ixman
  • Пользователь PRO
  • 3 149 сообщений
  • Репутация: 834

Отправлено 15 Июль 2014 - 10:58

Но всё же рекомендуют, это я не от себя придумал, строку запроса пропускать через urldecode


  • 0


#8 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 333 сообщений
  • Репутация: 5

Отправлено 16 Июль 2014 - 21:32

Ixman, переделал, все равно та же самая ошибка. А переменную $photo я правильно отправляю? Может в ней дело? 

 

Она вообще формируется такого вида 

"[{\"photo\":\"8452aa08e3:x\",\"sizes\":[[\"s\",\"618520954\",\"a9f4\",\"d9TZ9icWzo8\",75,46],[\"m\",\"618520954\",\"a9f5\",\"-5YCCCjIbfQ\",130,80],[\"x\",\"618520954\",\"a9f6\",\"b177AuIEb0A\",550,337],[\"o\",\"618520954\",\"a9f7\",\"1FubRCLke2A\",130,87],[\"p\",\"618520954\",\"a9f8\",\"WsFQKz4fqrU\",200,133],[\"q\",\"618520954\",\"a9f9\",\"Iv6115azBN8\",320,213],[\"r\",\"618520954\",\"a9fa\",\"hj1lU8lSfzY\",510,337]],\"kid\":\"62ebb35ee2e5395151f63bd0d8efbae0\"}]",

 значит это все и надо отправлять?


  • 0

#9 Ixman

Ixman
  • Пользователь PRO
  • 3 149 сообщений
  • Репутация: 834

Отправлено 16 Июль 2014 - 21:37

А как вы распиливаете данные, наверное фото нужно целиком отправлять


Я так понял там полная информация о фото


  • 0


#10 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 333 сообщений
  • Репутация: 5

Отправлено 16 Июль 2014 - 22:01

Ixman,  я отправляю только эту часть 8452aa08e3


  • 0

#11 Ixman

Ixman
  • Пользователь PRO
  • 3 149 сообщений
  • Репутация: 834

Отправлено 17 Июль 2014 - 11:11

Kuchuluk, так попробуйте всю передать

Я с фотками не работал ещё, но думаю скоро придётся, поэтому результат будет интересен


  • 0


#12 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 333 сообщений
  • Репутация: 5

Отправлено 17 Июль 2014 - 23:57

Попробовал, теперь ошибка 

One of the parameters specified was missing or invalid: photos_list is invalid

  • 0

#13 Ixman

Ixman
  • Пользователь PRO
  • 3 149 сообщений
  • Репутация: 834

Отправлено 18 Июль 2014 - 09:33

Получается, что первый вариант был рабочий, но криво передавался hash. Нужно смотреть какой hash вы получили и какой передаёте. Иначе просто не знаю какой вариант тут предложить


  • 0


#14 Kuchuluk

Kuchuluk
    Topic Starter
  • Пользователь
  • 333 сообщений
  • Репутация: 5

Отправлено 23 Июль 2014 - 20:34

Ошибка была в том, что возвращаемая строка 

"{"server":759255,"photo":"[{\"photo\":\"5c0ee7b56f:x\",\"sizes\":[[\"s\",\"618520954\",\"a410\",\"Iosmd2gQnbE\",75,46],[\"m\",\"618520954\",\"a411\",\"Rtee5OfIEAI\",130,80],[\"x\",\"618520954\",\"a412\",\"YBQDYZywmI0\",550,337],[\"o\",\"618520954\",\"a413\",\"x-oLJQgm2RI\",130,87],[\"p\",\"618520954\",\"a414\",\"P2urHyRL8vw\",200,133],[\"q\",\"618520954\",\"a415\",\"281yPf5bAc0\",320,213],[\"r\",\"618520954\",\"a416\",\"JdxpKBE6ih8\",510,337]],\"kid\":\"62ebb35ee2e5395151f63bd0d8efbae0\"}]","hash":"7ab875310ab0cb8e53d3fd4ba6e5369b"}"

 является json объектом, соответственно получать массив из нее нужно функцией json_decode, а не стандартными средствами php, типа explode.

 

Если кому пригодится, вот так заработало:

$obj=json_decode($response, true);
	$rsRequest = "https://api.vkontakte.ru/method/photos.saveWallPhoto?group_id=".$group_id."&access_token=".$access_token."&photo=".$obj["photo"]."&server=".$obj["server"]."&hash=".$obj["hash"];
	$roResponce = json_decode(file_get_contents($rsRequest), true);

В переменной $roResponce также json объект с данными о загруженной фотографии, которые затем можно использовать в методе wall.post для публикации ее на стену.


  • 1

#15 Ixman

Ixman
  • Пользователь PRO
  • 3 149 сообщений
  • Репутация: 834

Отправлено 23 Июль 2014 - 21:14

)) кто же знал, что вы её так на элементы разбираете ))


  • 0


robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Похожие темы

  Название темы Автор Статистика Последнее сообщение

Оформление форума – IPBSkins.ru