Заметки кодящего дизайнера

Отправка сообщения в телеграм с сайта на OpenCart3

Пишем ID чата и токен бота в конфигурацию, создаём класс библиотеки с методами отправки, используем созданные инструменты для отправки сообщения из контроллёра.

Для того чтобы отправлять сообщения в телеграм нужен будет ID чата и токен бота, который будет отправлять сообщения в этот чат. Где найти ID и как получить токен не тема этой заметки, представим что они уже есть.

Их надо разместить в файле config.php.

define('TG_CHAT_ID', 'chat_id');
define('TG_TOKEN', 'bot_token');

Ещё можно разместить ID чата и токен: непосредственно в БД; в .env файле; в конфигурации веб-сервера. Эти способы я не рассматриваю в данной заметке, однако могу сказать где точно не надо размещать токен — непосредственно в контроллёре.

Внимание! Чтобы новые переменные из config.php стали доступны, может потребоваться очистка кеша сайта.

Следом нужно создать класс библиотеки и в нём пару методов.

Создаём файл telegram.php по адресу system/library.

<?php
// Класс для взаимодействия с Telegram API
class Telegram {
    // Приватные свойства для хранения токена бота и ID чата
    private $token; // Токен для доступа к Telegram API
    private $chat_id; // Идентификатор чата, куда будут отправляться сообщения

    // Конструктор класса (пока пустой, можно расширить при необходимости)
    public function __construct() {}

    /**
     * Устанавливает токен и идентификатор чата.
     * 
     * @param string $token Токен Telegram-бота
     * @param string|int $chat_id Идентификатор чата (может быть числовым ID или именем пользователя с '@')
     */
    public function setCredentials($token, $chat_id) {
        $this->token = $token; // Сохраняем токен
        $this->chat_id = $chat_id; // Сохраняем ID чата
    }

    /**
     * Отправляет сообщение в Telegram.
     * 
     * @param string $message Сообщение для отправки
     * @return string|false Ответ от Telegram API или false в случае ошибки
     */
    public function sendMessage($message) {
        // Формируем URL для отправки сообщения через Telegram API
        $url = "https://api.telegram.org/bot{$this->token}/sendMessage";

        // Данные, которые будут отправлены в POST-запросе
        $data = [
            'chat_id' => $this->chat_id, // Указываем, в какой чат отправить сообщение
            'text' => $message,          // Сам текст сообщения
            'parse_mode' => 'HTML'       // Указываем форматирование текста (HTML или Markdown)
        ];

        // Настройки для HTTP-запроса
        $options = [
            'http' => [
                'header' => "Content-Type: application/x-www-form-urlencoded\r\n", // Устанавливаем заголовок Content-Type
                'method' => 'POST', // Указываем метод запроса (POST)
                'content' => http_build_query($data), // Кодируем массив $data в формат application/x-www-form-urlencoded
            ],
        ];

        // Создаём контекст HTTP-запроса с заданными опциями
        $context = stream_context_create($options);

        // Выполняем запрос к Telegram API и возвращаем результат
        return file_get_contents($url, false, $context);
        // file_get_contents загружает содержимое ответа от Telegram API.
        // Если запрос не удался, функция вернёт false.
    }
}
?>

После этого мы можем использовать методы нового класса библиотеки для отправки сообщений в «Телеграм» из контроллёра.

Пример использования:

// Извлекаем ID чата и токен из конфига
$tg_chat_id = TG_CHAT_ID;
$tg_bot_token = TG_TOKEN;

// Загружаем из библиотеки новый класс
$this->load->library('telegram');

// Передаём в класс ID чата и токен из конфига, используя соответствующий метод
$this->telegram->setCredentials($tg_bot_token, $tg_chat_id);

// Записываем какую-нибудь информацию в сообщение
$message = "Первая строка нашего сообщения\n";
$message = $message . "Вторая строка нашего сообщения";

// Отправляем сообщение
$this->telegram->sendMessage($message);