Создание Telegram бота на PHP #7: создание PHP класса для отправки запросов

02.08.2022
Содержание:

В новом уроке, я покажу вам пример класса для отправки запросов в Telegram. Мы разработаем с вами удобный класс, который легко расширять, и который ускорит создание ваших ботов в несколько раз.

Данный урок, будет завершительным в качестве теоретической составляющей нашего курса. В дальнейшем я буду добавлять только практические ролики по работе с телеграмм.

Так же в ближайшее время выйдет курс по разработке интернет-магазина в Telegram, разработанный на основе материалов из этого курса. Новый курс будет состоять только из практических материалов. По окончанию данного курса вы сможете создавать полноценные интернет-магазины в Telegram с каталогом, карточками товаров, корзиной и формой для оформления заказа. Все данные о заказах будут записываться в базу данных. По итогу вы сможете разработать отличное решение, которое легко продать как готовый кейс на фриланс биржах.

Скорее всего ссылка на данный курс уже находится в описание, поэтому переходите и изучайте данный материал.

Отвлеклись… давайте продолжим!

Для начала давайте создадим класс и назовём его BotsTimeTelegram. Данный класс будет иметь свойство для записи токена, метод для создания запросов в Телеграмм, метод для логирования ошибок и 2 свойства для записи id чата для логирования и путь до файла с лог данными.

Класс получился небольшой, в дальнейшем мы будем его дописывать. Сейчас из функционала здесь есть метод для отправки запросов в Telegram пользователя (sendQueryTelegram) и метод для отправки запросов в чат с логами (sendLogTelegram).

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


class BotsTimeTelegram {
    private $token = "";

    private $chatLogQuery = 1424646511;
    private $logFilePath = __DIR__ . "/file_log.txt";

    public function __construct($token) {
	$this->token = $token;
    }

    /* ЛОГИРОВАНИЕ ДАННЫХ И ОТПРАВКА В TELEGRAM */
    public function sendLogTelegram($logData, $reasonLog = false) {
	file_put_contents($this->logFilePath, $logData);
	$textMessage = date("d.m.Y H:i") . " Логирование данных";

        if($reasonLog) {
	    $textMessage .= "\n" . "Причина: " . $reasonLog;
	}

	$arrQuery = [
	    "chat_id" 	=> $this->chatLogQuery,
	    "caption" 	=> $textMessage,
	    "document" 	=> new CURLFile($this->logFilePath)
	];

	$this->sendQueryTelegram("sendDocument", $arrQuery);

	unlink($this->logFilePath);
    }
    /* ================================== */


    /* ПАРСЕР ДЛЯ ОТПРАВКИ ЗАПРОСОВ */
    public function sendQueryTelegram($method, $arrayQuery = "", $resultJSON = false) {
	$ch = curl_init("https://api.telegram.org/bot{$this->token}/{$method}");
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $arrayQuery);
	curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type:multipart/form-data"]);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_HEADER, false);
	$result = curl_exec($ch);
	curl_close($ch);

	if(!isset($result)){
	    throw new Exception(curl_error($curl));
	}

	if(isset($arrResult["ok"]) && $arrResult["ok"] == false) {

	    $arrResult = json_decode($result, true);
	    $arrDataLog = [
	        "method" => $method,
		"arrayQuery" => $arrayQuery,
		"arrResult" 	=> $arrResult
	    ];

	    $arrDataLogJSON = json_encode($arrDataLog);
		throw new Exception($arrDataLogJSON);
	    }

	    if($resultJSON == true) {
		return $result;
	    }
	    else {
		return json_decode($result, true);
	    }

    }
    /* ================================== */

}

Для работы нашего скрипта пропишем ниже код для запуска. В конструкции try мы прописываем код для работы бота, в catch, прописываем отправку данных на в лог чат в случае возникновения ошибок отправки или ошибок в передаче параметров запроса.

try {
    $bot = new BotsTimeTelegram("5340791844:AAGfL08SNlf5QQsr1kbDoWJ9U65Brr8Kyko");

    $arrayQuery = array(
	'chat_id' => 1424646511,
	'text'	=> "Тестовое сообщение",
	'parse_mode' => "html",
    );
    $resultQuery = $bot->sendQueryTelegram("sendMessage", $arrayQuery);

} catch (Exception $e) {
    $errorMessage = $e->getMessage();
    $bot->sendLogTelegram($errorMessage);
}

Таким образом за 7 уроков мы с вами научись разрабатывать бота для Telegram с базовым функционалом. Спасибо большое за то что просмотрели все материалы до конца. В дальнейших уроках я постараюсь продолжить развивать данную тему. Если вам понравилась данная рубрика, прошу поддержать меня лайком и подпиской, а так же добавить небольшой комментарий с просьбами или замечаниями к материалу. Я стараюсь отвечать на каждый комментарий, когда есть свободное время, и каждое ваше сообщение помогает улучшить будущие уроки.

На этом всё!
Больше интересных статей в нашей группе - https://vk.com/progtime
Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи - https://vk.com/prog_time
Так же прокачивайте свои навыки на нашем канале - https://www.youtube.com/c/ProgTime
Наши планы
  • Написание материала для курса по разработке ботов на Telegram
  • Разработка универсального парсера на PHP

Поддержите мой сайт!

Каждый переведённый донат, мотивирует на создание новых записей и уроков на YouTube