@rena-nip

VK api, не загружается фото на сервер?

//декодирую адрес картинки 
$image_url = urlencode($image_url);


$response = 'https://api.vkontakte.ru/method/photos.getWallUploadServer?owner_id='.$group_id.'&access_token='.$access_token;

//получаю URL для загрузки на сервер
$response = @file_get_contents($response); 
$response = json_decode($response);
$upload_url = $response->response->upload_url;

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $upload_url); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('file1' => $image_url)); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data; charset=UTF-8'));
$otvet = curl_exec($ch); 
curl_close($ch);
$otvet = json_decode($otvet);
print_r($otvet);


Получаю такой ответ:
[server] => 630317 [photo] => [] [hash] => 78730dd19f6e53a70b7f54fbb7803519


В чем ошибка?
  • Вопрос задан
  • 1383 просмотра
Пригласить эксперта
Ответы на вопрос 2
neluzhin
@neluzhin
Вы зачем-то передаете во ВК закодированный адрес изображения. Но должны вы передавать сам файл. Вы должны загрузить изображение на сервер, а затем переписать строчку

curl_setopt($ch, CURLOPT_POSTFIELDS, array('photo' => $image_url));

так, если у вас PHP меньше 5.5:

curl_setopt($ch, CURLOPT_POSTFIELDS, array('photo' => '@path/to/image.jpg'));

или если PHP больше или равен 5.5:

curl_setopt($ch, CURLOPT_POSTFIELDS, array('photo' => new CURLFile('path/to/image.jpg')));

Эту строку можно удалить:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data; charset=UTF-8'));

Также используйте для обращения к API домен api.vk.com и не забывайте в своих запросах передавать версию API в параметре v.

UPD: также, как подметили ранее, для загрузки фотографий на стену вы должны передавать фотографии в поле photo, а не file{...}.
Ответ написан
@hoarywolf
Думаю ошибка в photo1, вроде api для стены хочет просто photo, а photo{1-5} только для загрузки в альбом.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы