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


Пользователь месяца
Андрей WPMasterKZ Андрей WPMasterKZ 1-й за Ноябрь
Очков активности: 888 1 тема, 71 сообщение, 8 баллов репутации
Сайт: wpmaster.kz
ТОП самых активных за этот месяц
  • Фотография OlgaGetman
    #1

    OlgaGetman
    Очков активности: 726 5 тем, 106 сообщений, 4 балла репутации

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

    Mandarin
    Очков активности: 564 3 темы, 85 сообщений, 4 балла репутации

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

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

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

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

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

    BLIK
    Очков активности: 102 0 тем, 17 сообщений, 4 балла репутации

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

    Rodiola
    Очков активности: 54 1 тема, 15 сообщений, 2 балла репутации

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

    WGN (worldgamenews.com)
    Очков активности: 45 Вне конкурса за определение пользователя месяца

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

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

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

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

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

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

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


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

#1 Kuchuluk

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

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

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

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


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


#3 Ixman

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

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

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

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


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


#5 Ixman

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

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

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

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


  • 0


#6 kamchatniyoleg

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

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

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


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


#7 Ixman

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

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

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


  • 0


#8 Kuchuluk

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

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

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

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


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


  • 0


#10 Kuchuluk

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

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

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


  • 0

#11 Ixman

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

Отправлено 17 July 2014 - 11:11

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

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


  • 0


#12 Kuchuluk

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

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

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

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

  • 0

#13 Ixman

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

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

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


  • 0


#14 Kuchuluk

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

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

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

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


  • 0


robot

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


Похожие темы

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

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