VK API PHP 8.0.17 Массив photo строка, пустой массив photos_list
Работаю с VK API на PHP 8.0.17. Нужно загрузить фотографию на сервер и получить ответ, однако что-то не так и переменная $temp_photo оказывается строкой и нарушает дальнейшую работу программы.
Что не так:
Первый var_dump - "photo" не массив, а текст
okarray(3) {
["server"]=>
int(521232)
["photo"]=>
string(2) "[]"
["hash"]=>
string(32) "b0a5c40ef46e5090202f088dc662d9fc"
}
Второй - уже выходящая из этого ошибка
array(1) {
["error"]=>
array(3) {
["error_code"]=>
int(100)
["error_msg"]=>
string(78) "One of the parameters specified was missing or invalid: photos_list is invalid"
["request_params"]=>
array(6) {
[0]=>
array(2) {
["key"]=>
string(6) "server"
["value"]=>
string(6) "534136"
}
[1]=>
array(2) {
["key"]=>
string(5) "photo"
["value"]=>
string(2) "[]"
}
[2]=>
array(2) {
["key"]=>
string(4) "hash"
["value"]=>
string(32) "15edc07540a36cbbcffbe751a91aee89"
}
[3]=>
array(2) {
["key"]=>
string(1) "v"
["value"]=>
string(5) "5.131"
}
[4]=>
array(2) {
["key"]=>
string(6) "method"
["value"]=>
string(24) "photos.saveMessagesPhoto"
}
[5]=>
array(2) {
["key"]=>
string(5) "oauth"
["value"]=>
string(1) "1"
}
}
}
}
Код:
$request_params = array(
'peer_id' => $chat_id,
'access_token' => $photos_token,
'v' => '5.131'
);
$get_params = http_build_query($request_params);
$temp_info = json_decode(file_get_contents('https://api.vk.com/method/photos.getMessagesUploadServer?'. $get_params));
$temp_album_id = $temp_info->response->album_id;
$temp_upload_url = $temp_info->response->upload_url;
$temp_user_id = $temp_info->response->user_id;
$temp_group_id = $temp_info->response->group_id;
// Инициализируем cURL
$curl = curl_init($temp_upload_url);
$random = 0;
$file = 'grinding/' . $random . '.png';
$file = new CURLFile($file, 'image/jpeg', 'test_name');
$data = array('test_file' => $file);
// Говорим cURL, что это POST-запрос
curl_setopt($curl, CURLOPT_POST, 1);
// Говорим cURL, какие поля будем отправлять
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
// Говорим cURL, что нам нужно знать, что ответит сервер, к которому мы будем обращаться
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
// Выполняем cURL-запрос. В этой переменной будет JSON-ответ от ВКонтакте
$curl_result = curl_exec($curl);
$temp_info = json_decode($curl_result, true);
// Закрываем соединение
curl_close($curl);
$temp_server = $temp_info['server'];
$temp_photo = $temp_info['photo'];
$temp_hash = $temp_info['hash'];
// var_dump($temp_info); НОМЕР ОДИИИИИИИИИИИИИИИИИИИИН
$request_params = array(
'server' => $temp_server,
'photo' => $temp_photo,
'hash' => $temp_hash,
'access_token' => $photos_token,
'v' => '5.131'
);
$get_params = http_build_query($request_params);
$temp_info = json_decode(file_get_contents('https://api.vk.com/method/photos.saveMessagesPhoto?'. $get_params), true);
// var_dump($temp_info); НОМЕР ДВААААААААААААА
// С помощью messages.send отправляем ответное сообщение
$request_params = array(
'message' => 'Картинка',
'peer_id' => $chat_id,
'attachment' => 'photo' . $temp_info['response'][0]['owner_id'] . '_' . $temp_info['response'][0]['id'],
'access_token' => $messages_token,
'v' => '5.131',
'random_id' => 0
);
$get_params = http_build_query($request_params);
file_get_contents('https://api.vk.com/method/messages.send?'. $get_params);
Источник: Stack Overflow на русском