PHP, API vk.com — как загрузить фотографии на стену?

3 день пытаюсь загрузить изображение в VK.

Делаю по мануалу https://vk.com/dev/upload_files

1. получаю url для загрузки изображения
file_get_contents('https://api.vk.com/method/photos.getWallUploadServ...'.$access_token);

2. отправляю пост на полученный url

$img_src = '4.png';
$imgbinary = fread(fopen($img_src, "r"), filesize($img_src));
$img_str = base64_encode($imgbinary);

$post_params = array(
"file1" => $img_str,
);

file_get_contents('https://api.vk.com/method/photos.getWallUploadServ...'.$access_token);
$dataArray=json_decode($data);

$ch = curl_init( $dataArray->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 );
print_r($response);

Приходит в ответе пустой параметр photo
пример ответа
{"server":606321,"photo":"[]","hash":"afc01d1f75f443b30ff7b49254f642e1"}

Скажите, что не так.
В тех.поддержке vk ответили так

У нас поддерживается только загрузка файла напрямую, а не по адресу. Т.е. в file1 Вы должны передать массив байтов фотографии.
  • Вопрос задан
  • 13730 просмотров
Решения вопроса 1
akubintsev
@akubintsev
Опытный backend разработчик
1. В документации сказано, что названия POST полей file1, file2,...,file5, а у вас photo
2. Возможно формируется некорректный некорректный запрос для отправки файла, попробуйте так:
$post_params = array(
    'file1' => '@'.$img_src,
);

Соответственно, строки выше
$imgbinary = fread(fopen($img_src, "r"), filesize($img_src));
$img_str = base64_encode($imgbinary);

вам не нужны
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы