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


× Быстрый вопрос
Пользователь месяца
Андрей WPM Андрей WPM 1-й за Июль
Очков активности: 2 142 4 темы, 90 сообщений, 14 баллов репутации
Сайт: wpmaster.kz
ТОП самых активных за этот месяц
  • Фотография Rodiola
    #1

    Rodiola (rukodelkovo.ru)
    Очков активности: 373.5 1 тема, 80 сообщений, 3 балла репутации

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

    maxnik (konovalovpavel.ru)
    Очков активности: 217.5 0 тем, 29 сообщений, 5 баллов репутации

  • Фотография Андрей WPM
    #3

    Андрей WPM (wpmaster.kz)
    Очков активности: 103.5 Вне конкурса за определение пользователя месяца

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

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

  • Фотография annabum
    #5

    annabum
    Очков активности: 75 2 темы, 19 сообщений, 2 балла репутации

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

    IxMaster (site.ru)
    Очков активности: 69 2 темы, 17 сообщений, 2 балла репутации

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

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

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

    FIvYUr (moy-evroopt.ru)
    Очков активности: 36 0 тем, 8 сообщений, 3 балла репутации

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

    lena220678
    Очков активности: 34.5 2 темы, 17 сообщений, 1 балл репутации

  • Фотография re-search
    #10

    re-search
    Очков активности: 24 4 темы, 4 сообщения, 1 балл репутации

  • Показать весь ТОП 10
Поддержите форум! =)
Апдейты
  • Яндекс ИКС: 30.07.2019
  • Яндекс выдача: 19.08.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 159 сообщений
  • Репутация: 838

Отправлено 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 159 сообщений
  • Репутация: 838

Отправлено 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 159 сообщений
  • Репутация: 838

Отправлено 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 159 сообщений
  • Репутация: 838

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

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


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


  • 0


#10 Kuchuluk

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

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

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


  • 0

#11 Ixman

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

Отправлено 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 159 сообщений
  • Репутация: 838

Отправлено 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 159 сообщений
  • Репутация: 838

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

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


  • 0


robot

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


Похожие темы

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

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