Делаю отправку фото и сообщения в группу через VK API вроде и фото грузит, и ошибок не выдает, но в группе пусто, может кто сталкивался.
$group_id = 'XXX';
$access_token = 'XXX';
$message = 'Hello, world!';
$image = 'img/corgiya18.jpg';
// Получение сервера vk для загрузки изображения.
$res = json_decode(file_get_contents(
'https://api.vk.com/method/photos.getWallUploadServer?group_id='
. $group_id . '&v=5.21&access_token=' . $access_token
));
if (!empty($res->response->upload_url)) {
// Отправка изображения на сервер.
$postparam=array("photo"=>"@".$image);
$ch = curl_init($res->response->upload_url);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, ['photo' => new CurlFile($image)]);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data; charset=UTF-8'));
$res = json_decode(curl_exec($ch));
curl_close($ch);
if (!empty($res->server)) {
// Сохранение фото в группе.
$res = json_decode(file_get_contents(
'https://api.vk.com/method/photos.saveWallPhoto?group_id=' . $group_id
. '&v=5.21&server=' . $res->server . '&photo='
. stripslashes($res->photo) . '&hash='
. $res->hash . '&access_token=' . $access_token
));
if (!empty($res->response[0]->id)) {
// Отправляем сообщение.
$params = array(
'access_token' => $access_token,
'owner_id' => '-' . $group_id,
'from_group' => '1',
'message' => $message,
'attachments' => $res->response[0]->id
);
file_get_contents(
'https://api.vk.com/method/wall.post?' . http_build_query($params)
);
}else{echo "error";}
}else{echo "error1";}
}
?>
В комментариях описал основные ваши проблемы, но еще хотелось бы отметить, чтобы вы не забывали следить за последней версией API, это обязательный параметр.
Как бы сделал подобную реализацию я. Я бы написал 2 функции curl
и vk
(функция, с помощью которой делали запросы к API VK передавая название метода и нужные параметры), чтобы было удобнее, и не путаться каждый раз в запросах, вот самый простой пример использования:
function vk($method, $params)
{
return json_decode(curl('https://api.vk.com/method/'.$method, $params));
}
function curl($url, $params = false)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if (isset($params))
{
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
}
$upd = curl_exec($ch);
curl_close($ch);
return $upd;
}
Берем данные, которые нам нужны: токен, id группы, путь к фотографии, и сообщение:
$group_id = '162947920';
$access_token = '1fdf6eec18dba97f3ccf72c03fc8e29155e032044ed763f68a3e8216';
$message = 'Hello, world!';
$image = 'img/corgiya18.jpg';
Итак, заметил, что вы любите декодировать json и получать его в виде объекта, ну что же, имея эти две функции можно набросать совсем несложный код:
$url = vk('photos.getWallUploadServer', [
'group_id' => $group_id,
'v' => '5.85',
'access_token' => $access_token
])->response->upload_url; // Обращаемся сразу к <response[upload_url]>
if (isset($url))
{
$upload = json_decode(curl($url, ['photo' => new CURLFile($image)]));
if (isset($upload->server))
{
$save = vk('photos.saveWallPhoto', [
'group_id' => $group_id,
'server' => $upload->server,
'access_token' => $access_token,
'hash' => $upload->hash,
'photo' => $upload->photo,
'v' => '5.85'
])->response[0]; // Обращаемся сразу к <response[0]>
if (isset($save))
{
$post = vk('wall.post', [
'owner_id' => '-'.$group_id,
'access_token' => $access_token,
'from_group' => 1,
'message' => $message,
'attachments' => 'photo'.$save->owner_id.'_'.$save->id,
'v' => '5.85'
]);
print_r($post);
}
}
}
Полный код на pastebin. Рекомендую ознакомиться с документацией каждого метода :)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пытаюсь сохранить изоброжения как делал это всегдаНо не получаеться
Помогите исправить ошибкуВсе ответы на похожие вопросы не помогают
Как сделать вывод функций date() и strtotime() в php с учетом временной зоныВременные зоны хранятся в списке городов и берутся из базы
Необходимо получить названия всех таблиц (они все в формате DDMMYYYY) из бд и вывести самую позднюю по такой датеЯ не смог сделать такой запрос,...