Отправка сообщения в телеграм с сайта на OpenCart3
Для того чтобы отправлять сообщения в телеграм нужен будет 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);