YardalGedal
@YardalGedal
yeah boy

Почему vk api возвращает пустое "photo":"[]"?

Использую вот такой код для загрузки фото в вк:
$is = 'https://api.vk.com/method/photos.getMessagesUploadServer?access_token='.$token;
$is = json_decode(file_get_contents($is),true);
$photo = array(
    "file1" => "/tmpimg.png",
);
$url = $is['response']['upload_url'];
$params = array(
    'photo' => $photo, 
);
$result = file_get_contents($url, false, stream_context_create(array(
    'http' => array(
        'method'  => 'POST',
        'header'  => 'Content-type: application/x-www-form-urlencoded',
        'content' => http_build_query($params)
    )
)));
echo $result;

Возвращаемый результат:
{"server":624128,"photo":"[]","hash":"?1492ef?5b64c?d648dd4???e?cc931a"}


Почему "photo" пустое?
  • Вопрос задан
  • 4923 просмотра
Решения вопроса 2
function file_get_contents_curl($url) {
   $ch = curl_init();
   
   curl_setopt ($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1');
   curl_setopt($ch, CURLOPT_HEADER, 0);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Set curl to return the data instead of printing it to the browser.
   curl_setopt($ch, CURLOPT_URL, $url);
   
   $data = curl_exec($ch);
   curl_close($ch);
   
   return $data;
}
// грузим фото вк
$upurl =  'https://api.vk.com/method/photos.getMessagesUploadServer?access_token='.$token;
  $upl = file_get_contents_curl($upurl); // Отправляем запрос
  $uplj = json_decode($upl); // Преобразуем JSON-строку в массив
  $VKuploadUrl = $uplj->response->upload_url;
if (!empty($VKuploadUrl)) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $VKuploadUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('photo' => '@'.$SERVER['document_root'].$imggr));
 
$otvet = curl_exec($ch);
 
curl_close($ch);
 }
Ответ написан
Комментировать
YardalGedal
@YardalGedal Автор вопроса
yeah boy
Не правильно формировал запрос :)
Да и вообще порекомендовали использовать curl.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
JimDi
@JimDi
немного некропостинга, надеюсь кому-то поможет не терять время.

вместо
curl_setopt($ch, CURLOPT_POSTFIELDS, array('photo' => '@'.$SERVER['document_root'].$imggr));

надо примерно так
$cfile = curl_file_create($fullServerPathToImage,'image/jpeg',pathinfo($fullServerPathToImage)['basename']);
        $data = array('file' => $cfile);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);


ну и возможно понадобится вот этот кусок, а то везде https теперь
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽