← Вернуться к списку тем

Проверка проверка подписки на канал

Помогите написать код для проверки на подписку на канал на сайте 

Если пользователь подписан показывать контент если нет предлагать подписаться на канал 

Вот код но он не работает правильно

<?php

// Получаем ID пользователя из сессии 
$userId = "чат";
$tokin = "токин";
$kanal = "канал";
// Делаем запрос в Telegram API для получения статуса подписки
$telegramApiUrl = "https://api.telegram.org/bot$tokin/getChatMember?chat_id=$kanal&user_id=".$userId;

$result = file_get_contents($telegramApiUrl);
$userStatus = json_decode($result, true);

// // Проверяем статус
if($userStatus['status'] == 'left' || $userStatus['status'] == 'kicked') {

  // Пользователь не подписан - показываем сообщение
  echo "Пожалуйста, подпишитесь на наш Telegram канал!";

} elseif ($userStatus['status'] == 'member' || $userStatus['status'] == 'administrator') {

  // Пользователь подписан - показываем контент
  include 'index.php';

} else {

  // Статус не определен - тоже показываем сообщение
  echo "Пожалуйста, подпишитесь на наш Telegram канал!"; 

}

Авторизуйтесь через Telegram, чтобы оставить комментарий.
Откройте по ссылке или QR бот @iMakeBot, нажмите кнопку Старт/Start.
Следуйте инструкциям бота.

  • iMakeBots [8 месяцев назад]

    Попробуй так - не проверял

    <?php
    	// Получаем ID пользователя из сессии 
    	$userId = "чат";
    	$token = "токен";
    	$kanal = "канал";
    	// Делаем запрос в Telegram API для получения статуса подписки
    	$telegramApiUrl = "https://api.telegram.org/bot" . $token . "/getChatMember?chat_id=" . $kanal . "&user_id=" . $userId;
    
    	$result = file_get_contents($telegramApiUrl);
    	$userStatus = json_decode($result, true);
    
    	// Проверяем статус
    	if(in_array($userStatus['status'], ['member', 'administrator', 'creator']) {
    	  // Пользователь подписан - показываем контент
    	  include 'index.php';
    	} else {
    	  // показываем сообщение
    	  echo "Пожалуйста, подпишитесь на наш Telegram канал!"; 
    	}
  • S.К [8 месяцев назад → iMakeBots]

    Не работает может проверять на статус  left и выдавать сообщение что нужно подписаться в остальных случаях показывать контент 

  • iMakeBots [8 месяцев назад → S.К]

    Конечно не будет работать ))

    <?php
    	// Получаем ID пользователя из сессии 
    	$userId = "чат";
    	$token = "токен";
    	$kanal = "канал";
    	// Делаем запрос в Telegram API для получения статуса подписки
    	$telegramApiUrl = "https://api.telegram.org/bot" . $token . "/getChatMember?chat_id=" . $kanal . "&user_id=" . $userId;
    
    	$result = file_get_contents($telegramApiUrl);
    	$userStatus = json_decode($result, false);
    
    	// Проверяем статус - все лежит в объекте result
    	if(in_array($userStatus->result->status, ['member', 'administrator', 'creator']) {
    	  // Пользователь подписан - показываем контент
    	  include 'index.php';
    	} else {
    	  // показываем сообщение
    	  echo "Пожалуйста, подпишитесь на наш Telegram канал!"; 
    	}
  • S.К [8 месяцев назад]

    Нашёл решение 

    <?php
    // Задаем переменные
    $token = 'токин'; // Замените на свой токен бота
    $user_id = 'чат'; // Замените на ID пользователя, которого нужно проверить
    $channel = 'канал'; // Замените на имя канала, который нужно проверить
    
    // Отправляем запрос на проверку подписки пользователя на канал через Telegram Bot API
    $url = "https://api.telegram.org/bot$token/getChatMember?chat_id=$channel&user_id=$user_id";
    $response = file_get_contents($url);
    $data = json_decode($response, true);
    
    // Проверяем, является ли пользователь участником канала
    $is_member = $data['result']['status'] == 'member' || $data['result']['status'] == 'administrator';
    
    // Если пользователь участник канала, выводим сообщение об этом
    if ($is_member) {
        echo "Пользователь $user_id подписан на канал $channel";
    } else {
        echo "Пользователь $user_id Не подписан на канал $channel";
    }
    ?>
  • iMakeBots [8 месяцев назад → S.К]

    Можно и так, но лучше переходите на ооп подход

  • iMakeBots [8 месяцев назад → S.К]

    есть еще роль-статус CREATOR