@rusgayfer

Ошибка при установлении сервера Callback API VK?

Устанавливаю сервер для сообщества POST-запросом

$url = 'https://api.vk.com/method/groups.addCallbackServer';
                      $params = array(
                      'group_id' => $d['id_group'],
                      'url' => 'https://test.ru/callback/api.php?key=0aa3e5tugzw6k6hgsoda',   // Если что скрыл название своего сайта
                      'title' => 'Сервер', 
                      'access_token' => $d['token'],  // access_token 
                      'v' => '5.73',
                                     );

                      // В $result вернется id отправленного сообщения
                      $requestpost = file_get_contents($url, false, stream_context_create(array(
                      'http' => array(
                      'method'  => 'POST',
                      'header'  => 'Content-type: application/x-www-form-urlencoded',
                      'content' => http_build_query($params)
                                      )
                       )));


Выходит такая ошибка
5a996afb1b082827491804.png

Пробывал и GET запросами и менял кодировки файла ничего не помогает, не устанавливается через API. А когда нажимаю подтвердить вручную все срабатывает, горит зеленая галочка. Как это исправить?
  • Вопрос задан
  • 3066 просмотров
Решения вопроса 1
vkapi
@vkapi
Для тех, кто будет потом гуглить:
если callback-сервер добавляется через API, то и код подтверждения нужно получать через API методом groups.getCallbackConfirmationCode. Он отличается от кода в web-версии сайта.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@SilimAl
Telegram, VK, Instagram боты
Адрес сервера неправильно пишите. Просто https://server.ru/callback/api.php
А вот в самом api.php уже пишите:
$confirmation_token = '58e46a05';
$data = json_decode(file_get_contents('php://input'));
switch ($data->type):
    case 'confirmation': echo $confirmation_token; break;
    case 'wall_post_new': реакция на событие; echo('ok'); break;
    ...
endswitch;
Ответ написан
За использования file_get_contents для запросов, можно и по рукам надавать :)
Ответ написан
@rusgayfer Автор вопроса
Делаю проверку так:

$groupsgetCallbackConfirmationCode = json_decode(file_get_contents("https://api.vk.com/method/groups.getCallbackConfirmationCode?group_id={$cal['id_group']}&access_token={$cal['token']}&v=5.73"));		

// Строка для подтверждения адреса сервера из настроек Callback API 
//$confirmation_token = $cal['confirmation_token']; 
$confirmation_token = $groupsgetCallbackConfirmationCode->response->code;
// Версия API
$v = '5.73';

// Ключ сообщества для отправки сообщений (от его имени отправляются сообщения)
$token_message = 'токен';

//Получаем и декодируем уведомление 
$data = json_decode(file_get_contents('php://input')); 

//Проверяем, что находится в поле "type" 
switch ($data->type) { 
//Если это уведомление для подтверждения адреса... 
case 'confirmation': 
//...отправляем строку для подтверждения 
echo $confirmation_token; 
break;


а как сделать проверку, когда вставляешь сервер вручную, а не через API?

то есть должен проверить еще $confirmation_token = $cal['confirmation_token'];
Ответ написан
Ваш ответ на вопрос

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

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