Задать вопрос

Почему random_id в вк api отказывается работать нормально?

Приветствую друзья, изначально проблема была в том, что бот отправляет одно сообщение несколько раз, причиной тому стал параметр random_id, который должен быть каждый раз уникальным, а у меня был 'random_id' => 0. Теперь, когда проблема найдена, пытаюсь сделать генерацию random_id, но почему-то бот все равно отправляет несколько сообщений. Проблемы в уникальности $random_id нет, так как я его вывожу через var_damp и вижу что каждый раз новое число. Странно то, что если я вручную ставлю число какое-то значение, например, 1, 2, 3 и т.д. то все работает, и он отправляет 1 раз, только после этого каждый раз его надо менять, но опять же, если делать это вручную то все работает, так почему же не работает с обычной генерацией. Код прилагаю ниже:
$random_id = rand(1,9999999999999999);
    
// Отправляемое сообщение
$message = 'Здравствуйте, ' . $user_name . '! Вы запросили привязку данного аккаунта к аккунту на ресурсе SUDRUS. Ваш код подтверждения ' . $code . '. Введите его на сайте, чтобы подтвердить этот метод отправки уведомлений.';

function send($id, $msg, $token, $version, $random_id){
    $url = 'https://api.vk.com/method/messages.send';
    $params = array(
        'user_id' => $id,
        'message' => $msg,
        'access_token' => $token,
        'v' => $version,
        'random_id' => $random_id
    );
    
    $result = 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)
        )
    )));
}

send($user_id, $message, $token, $api_version, $random_id);
var_dump($random_id); 
         echo 'OK';
  • Вопрос задан
  • 573 просмотра
Подписаться 3 Простой 7 комментариев
Пригласить эксперта
Ответы на вопрос 2
бот отправляет одно сообщение несколько раз, причиной тому стал параметр random_id, который должен быть каждый раз уникальным, а у меня был 'random_id' => 0.


Нет, бот отправлял сообщение несколько раз потому что несколько раз вызывался метод `messages.send`

пытаюсь сделать генерацию random_id, но почему-то бот все равно отправляет несколько сообщений.


Потому что проблема не решена несколько раз подряд вызывается `messages.send`

Если у вас бот работает через Callback API то надо проверить что вы всегда отвечаете ОК в ответ, сейчас в вашем когде есть `var_dump($random_id);` который тоже ломает это и Callback API будет присылать запросы повторно.

Посмотреть есть ли повторы в Callback API можно у Управлении сообществом > Работа с API
Ответ написан
Комментировать
@fanofmarta
Учу Flutter
Попробуй уменьшить количество девяток, чтобы получилось что-то вроде:

$random_id = rand(1,99999999);

Сталкивался с таким, не могу профессионально описать, почему так, но это работает.
В любом случае пробуй удалять по девятке, пока не получится.

Проблема вроде в том, что функция rand не поддерживает числовые типы с большими значениями.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы