На
этой странице представлен пример работы с callback api Вконтакте.
<?php
if (!isset($_REQUEST)) {
return;
}
//Строка для подтверждения адреса сервера из настроек Callback API
$confirmation_token = 'секретная сторка';
//Ключ доступа сообщества
$token = 'секретный ключ';
//Получаем и декодируем уведомление
$data = json_decode(file_get_contents('php://input'));
//Проверяем, что находится в поле "type"
switch ($data->type) {
//Если это уведомление для подтверждения адреса сервера...
case 'confirmation':
//...отправляем строку для подтверждения адреса
echo $confirmation_token;
break;
//Если это уведомление о новом сообщении...
case 'message_new':
//...получаем id его автора
$user_id = $data->object->user_id;
//затем с помощью users.get получаем данные об авторе
$user_info = json_decode(file_get_contents("https://api.vk.com/method/users.get?user_ids={$user_id}&v=5.0"));
//и извлекаем из ответа его имя
$user_name = $user_info->response[0]->first_name;
//С помощью messages.send и токена сообщества отправляем ответное сообщение
$request_params = array(
'message' => "Hello, {$user_name}!",
'user_id' => $user_id,
'access_token' => $token,
'v' => '5.0'
);
$get_params = http_build_query($request_params);
file_get_contents('https://api.vk.com/method/messages.send?'. $get_params);
//Возвращаем "ok" серверу Callback API
echo('ok');
break;
}
?>
Залил файлик с кодом на сервер, в логах сначала получал "Failed open input stream".
Погуглил, заменил file_get_contents на cURL (код ниже)
<?php
function url_get_contents ($Url) {
if (!function_exists('curl_init')){
die('CURL is not installed!');
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $Url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
if (!isset($_REQUEST)) {
return;
}
//Строка для подтверждения адреса сервера из настроек Callback API
$confirmation_token = 'секретная сторка';
//Ключ доступа сообщества
$token = 'секретный ключ';
//Получаем и декодируем уведомление
$data = json_decode(url_get_contents('php://input'));
//Проверяем, что находится в поле "type"
switch ($data->type) {
//Если это уведомление для подтверждения адреса сервера...
case 'confirmation':
//...отправляем строку для подтверждения адреса
echo $confirmation_token;
break;
//Если это уведомление о новом сообщении...
case 'message_new':
//...получаем id его автора
$user_id = $data->object->user_id;
//затем с помощью users.get получаем данные об авторе
$user_info = json_decode(url_get_contents("https://api.vk.com/method/users.get?user_ids={$user_id}&v=5.0"));
//и извлекаем из ответа его имя
$user_name = $user_info->response[0]->first_name;
//С помощью messages.send и токена сообщества отправляем ответное сообщение
$request_params = array(
'message' => "Hello, {$user_name}!",
'user_id' => $user_id,
'access_token' => $token,
'v' => '5.0'
);
$get_params = http_build_query($request_params);
file_get_contents('https://api.vk.com/method/messages.send?'. $get_params);
//Возвращаем "ok" серверу Callback API
echo('ok');
break;
}
?>
Теперь получаю следующее
Что делать и кто виноват?)