garinov
@garinov
Фрилансер

Callbackapi vk, php, mysql: что не так с этим кодом?

Взял из примера https://vk.com/dev/callback_api
И немного изменил - чтобы шла запись в базу данных.
В результате получаю на одно событие несколько записей в базу, причем они еще и идут вперемежку: после второго, третьего и т.д. может еще раз записаться предыдущее - как на картинке.

Что не так с кодом?

<?php
 
//var_dump($_REQUEST);

if (!isset($_REQUEST)) {
  return;
}

$txt = '';
$date = '';
	
//Строка для подтверждения адреса сервера из настроек Callback API
$confirmation_token = 'dkrijsakcnalfn';
 
//Ключ доступа сообщества
$token = 'trjhrtjrtjjrtjrjurtererherjherhe';
   
//Получаем и декодируем уведомление
$data = json_decode(file_get_contents('php://input'));

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

//Если это уведомление о новом сообщении...
  case 'wall_post_new':
    //...получаем
    $txt = $data->object->text;
    $date = $data->object->date;


//Возвращаем "ok" серверу Callback API
    echo('ok');

break;
}	
	require('bd.php');

	$host = "localhost";
	$user = "user";
	$password = "hdrgeegse";
	$datebase = "dbname";
	updateDate ($host, $user, $password, $datebase, $txt, $date);
?>


<?php

	function updateDate ($host, $user, $password, $datebase, $txt, $date) {

	$link = mysqli_connect($host, $user, $password, $datebase) or die("Не могу соединиться с MySQL.");		
	$query = "INSERT INTO `text`(`id`, `text`, `date`) VALUES (NULL,$txt,$date)";	
	$result = mysqli_query ($link, $query)  or die("ERROR! " . mysqli_error($link)); 		
		if($result)
		{
			echo "<span style='color:blue;'>OK!</span>";
		}		
	// закрываем подключение
	mysqli_close($link);		
}


e56a4f81b42444839335ec81c4515d82.png
  • Вопрос задан
  • 471 просмотр
Решения вопроса 1
Ahen
@Ahen
Универсальный дилетант
Че? Может лучше не... продолжать?

А по делу - в выводе для callback vk не должно быть ничего, кроме "ok".
У вас же вывод "ok<span style='color:blue;'>OK!</span>", вк считает это ошибкой и продолжает слать уведомления в надежде, что Вы сможете его наконец обработать.

Зачем?!
if($result)
    {
      echo "<span style='color:blue;'>OK!</span>";
    }


Плюс ко всему - ЗАЧЕМ Вы производите запись в БД вне кейса? А что, если это запрос на валидацию сервера? Зачем тогда производить запись в БД?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
26 апр. 2024, в 18:27
200000 руб./за проект
26 апр. 2024, в 18:24
80000 руб./за проект
26 апр. 2024, в 18:00
500 руб./за проект