从入口文件搭建php项目

目录结构
入口文件index.php

<?php

require 'CallBack.php'; 

// 处理回调请求逻辑
$bot = new CallBack();

// 请求方式
if (isset($_GET['method'])) {
    $method = $_GET['method'];
    if (method_exists($bot, $method)) {
        return $bot->$method();
    } else {
        echo "没有该功能";
        die();
    }
} else {
    echo "调用哪个功能?";
    die();
}

CallBack.php

<?php

require 'Config.php'; 

class CallBack
{
    private $botApiKey;
    private $hookUrl;
    private $winiUrl;
    
    public function __construct()
    {
        $config = new Config();
        $this->hookUrl = $config->getUrl();
        $this->botApiKey = $config->getApiKey();
        $this->winiUrl = $config->getwini();
    }

    public function index()
    {
        phpinfo();
    }
    
    // 设置回调地址
    public function set_callback_url() {
        $deleteResponse = $this->sendCurlRequest("https://api.telegram.org/bot{$this->botApiKey}/deleteWebhook");
        print_r($deleteResponse);
        echo("<br/>");

        $data = ['url' => $this->hookUrl];
        $setResponse = $this->sendCurlRequest("https://api.telegram.org/bot{$this->botApiKey}/setWebhook", $data);
        
        print_r($setResponse);
    }

    // 设置菜单命令
    public function setCommands() {
        $commands = [
            ['command' => 'start', 'description' => 'Start'],
        ];
        
        $data = ['commands' => $commands];
        $response = $this->sendCurlRequest("https://api.telegram.org/bot{$this->botApiKey}/setMyCommands", $data);
        // print_r($response);die;
        if ($response['ok']) {
            echo json_encode(['code' => 1, 'msg' => 'ok']);
        } else {
            echo json_encode(['code' => 0, 'msg' => $response['description']]);
        }
    }

    // 回调主逻辑
    public function tg_msg() {
        $data = json_decode(file_get_contents('php://input'), true);

        $keyboard_data = [
            [["text" => "点击", "web_app" => ["url" => $this->winiUrl]]],
        ];
        
        // 将 $data 写入日志文件
        $logFile = 'telegram_log.txt';
        file_put_contents($logFile, date('Y-m-d H:i:s') . " - " . json_encode($data) . PHP_EOL, FILE_APPEND);
        // file_put_contents($logFile, date('Y-m-d H:i:s') . " - " . print_r($data, true) . PHP_EOL, FILE_APPEND);

        $reply_markup = json_encode(["inline_keyboard" => $keyboard_data]);
        $message = "点击app ";

        if (isset($data['message']['text']) && !isset($data['message']['entities'])) {
            $chat_id = $data['message']['chat']['id'];
            $message_id = $data['message']['message_id'];

            $this->deleteMessage($chat_id, $message_id);
            $this->respondWithJson(1, 'ok');
            return;
        }

        if (empty($data['message']) && !isset($data['callback_query']['data'])) {
            $this->respondWithJson(1, 'ok');
            return;
        }

        if (!empty($data['message'])) {
            $this->sendMessage($data['message']['chat']['id'], $message, $reply_markup);
            $this->respondWithJson(1, 'ok');
            return;
        }

        $this->respondWithJson(1, 'ok');
    }
    
    // 删除消息
    public function deleteMessage($chat_id, $message_id)
    {
        $data = [
            'chat_id'    => $chat_id,
            'message_id' => $message_id,
        ];
        return $this->sendTelegramRequest('deleteMessage', $data);
    }
    
    // 发送消息
    public function sendMessage($chat_id, $message, $reply_markup)
    {
        $data = [
            'chat_id'      => $chat_id,
            'text'         => $message,
            'parse_mode'   => 'HTML',
            'reply_markup' => $reply_markup,
        ];
        return $this->sendTelegramRequest('sendMessage', $data);
    }
    
    // 发送 Telegram 请求
    private function sendTelegramRequest($method, $data)
    {
        $url = "https://api.telegram.org/bot{$this->botApiKey}/{$method}";
        return $this->sendCurlRequest($url, $data);
    }
    
    // 发送 cURL 请求
    private function sendCurlRequest($url, $data = null) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        if ($data !== null) {
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
            curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
        }
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        
        $response = curl_exec($ch);
        curl_close($ch);
        
        return json_decode($response, true);
    }
    
    // 响应 JSON 数据
    private function respondWithJson($code, $msg) {
        echo json_encode(['code' => $code, 'msg' => $msg]);
    }
}

Config.php

<?php

class Config {
    private $hookUrl = '域名/wini-mini-app/telegram/index.php?method=tg_msg';//回调地址
    private $winiUrl = '域名/wini-mini-app/';
    private $botApiKey = '7189631927:AAHfYLqKhxjGumIHCqlNuv8jH8';
    
    public function getUrl() {
        return $this->hookUrl;
    }
    
    public function getApiKey() {
        return $this->botApiKey;
    }
    
    public function getwini() {
        return $this->winiUrl;
    }
}

浏览器访问,通过method传参数,请求对应的方法
域名/wini-mini-app/telegram/index.php?method=index

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/745114.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

系统思考—啤酒游戏经营决策沙盘

在日常的教学中&#xff0c;我们通过系统思考仿真演练深入探索决策背后的动因。例如&#xff0c;我经常教授的麻省理工学院研发的“啤酒游戏”和“人民航空策略模拟”&#xff0c;这些都是麻省理工MBA学生的必修课。此外&#xff0c;还有更简洁的“红黑游戏”“收获季节”等模拟…

Typora 更换皮肤

typora 下载激活 上面的链接已经讲了如何下载激活typora工具,本篇说一下如何给typora换肤 typora 中文官网 进入官网,在整体界面布局的上方找到主题 下面以其中一个主题为例,跟换主题皮肤 下载该主题 找到旁边的release 下拉窗体,在Assets里面找这种压缩包,通过名字很容易区…

无限制数字(仅仅int类型)的大小的自然排序算法

直接上代码&#xff1a; #include <iostream> #include <vector> #include <string> #include <algorithm> #include <cctype>// Function to compare two strings in a natural way bool naturalCompare(const std::string& a, const std:…

数据结构与算法—空间复杂度详解与示例(C#,C++)

文章目录 1. 数据结构概述2. 空间复杂度的定义及影响因素3. 空间复杂度的区分常数空间复杂度&#xff08;O(1)&#xff09;线性空间复杂度&#xff08;O(n)&#xff09;其他空间复杂度 4. 几种典型数据结构的优缺点分析数组&#xff08;Array&#xff09;链表&#xff08;Linke…

墨迹天气与AI数据湖的集成案例(集易连平台)

客户介绍 客户方为国内某皮具生产企业&#xff0c;年设计版型数千款&#xff0c;全国销售门店数一千多家&#xff0c;年销售额达20亿。该AI项目目的是将订单数据、用户行为分析、天气数据、门店位置、客流量等等一系列数据作为AI大模型的输入&#xff0c;经过大模型的训练和…

压力测试

1.什么是压力测试 压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。压测都是为了系统在线上的处理能力和稳定性维持在一个标准范围内&#xff0c;做到心中有数 使用压力测试&#xff0c;我们有希望找到很多种用其他测试方法更难发现的错误&#…

【浦语开源】深入探索:大模型全链路开源组件 InternLM Lagent,打造灵笔Demo实战指南

一、准备工作&#xff1a; 1、环境配置&#xff1a; pip、conda换源&#xff1a; pip临时换源&#xff1a; pip install -i https://mirrors.cernet.edu.cn/pypi/web/simple some-package# 这里的“https://mirrors.cernet.edu.cn/pypi/web/simple”是所换的源&#xff0c;…

Qt实战项目——贪吃蛇

一、项目介绍 本项目是一个使用Qt框架开发的经典贪吃蛇游戏&#xff0c;旨在通过简单易懂的游戏机制和精美的用户界面&#xff0c;为玩家提供娱乐和编程学习的机会。 二、主要功能 2.1 游戏界面 游戏主要是由三个界面构成&#xff0c;分别是游戏大厅、难度选择和游戏内界面&a…

Studio One 6 Professional for Mac v6.6.1 音乐创作编辑软件 激活版

PreSonus Studio One 6 Professional 是一款功能强大的音乐制作软件&#xff0c;它为音乐创作者、制作人、录音师以及音乐爱好者提供了一个全面且易于使用的创作环境。从基本的音频录制到复杂的混音和母带处理&#xff0c;这款软件都能轻松应对&#xff0c;让音乐创作过程变得既…

『亚马逊云科技产品测评』程序员最值得拥有的第一台专属服务器 “亚马逊EC2实例“

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 引言 自2006年8月9日&#xff0c;在搜索引擎大会&#xff08;SES San Jo…

基于jeecgboot-vue3的Flowable流程-自定义业务表单处理(二)-挂接自定义业务表单

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、增加一个根据服务名称动态寻找对应自定义表单组件的hooks import { ref, reactive, computed, markRaw, onMounted, defineAsyncComponent } from vue; import { listCustomForm } fro…

四川音盛佳云电子商务有限公司抖音电商的先行者

在当今数字时代&#xff0c;电商行业风起云涌&#xff0c;各大平台竞相争夺市场份额。而在这其中&#xff0c;四川音盛佳云电子商务有限公司以其独特的抖音电商服务模式&#xff0c;悄然崛起&#xff0c;成为了行业中的一股不可忽视的力量。今天&#xff0c;就让我们一起走进音…

坚持100天学习打卡Day1

1.大小端 2.引用的本质 及 深拷贝与浅拷贝 3.初始化列表方式 4.类对象作为类成员 5.静态成员 static

python - 运算符 / 条件语句 / 数字类型

一.运算符 >>> 5<3 False >>> 5<3 False >>> 5>3 True >>> 5>3 True >>> 53 False >>> 5!3 True 与操作and&#xff1a; >>> 5<3 and 2<4 False >>> 5>3 and 2<4 True 二…

基于SSM的医药垃圾分类管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SSM的医药垃圾分类管理系统,java项目…

信创好搭档,企业好选择| 亚信安慧AntDB诚邀您参与企业数智化升级云端研讨会

关于亚信安慧AntDB数据库 AntDB数据库始于2008年&#xff0c;在运营商的核心系统上&#xff0c;服务国内24个省市自治区的数亿用户&#xff0c;具备高性能、弹性扩展、高可靠等产品特性&#xff0c;峰值每秒可处理百万笔通信核心交易&#xff0c;保障系统持续稳定运行超十年&a…

目标检测系列(四)-利用pyqt5实现yolov8目标检测GUI界面

1、pyqt5安装 Qt Designer&#xff1a;一个用于创建图形用户界面的工具&#xff0c;可轻松构建复杂的用户界面。它基于MVC架构&#xff0c;可以将界面设计与逻辑分离&#xff0c;使得开发更为便捷。在Qt Designer中&#xff0c;可以通过拖拽控件来灵活地调整界面&#xff0c;并…

机器人自主学习方法学习

各类算法的优缺点 原理&#xff1a; 该结构中初始的知识为0&#xff0c;不存在任何先验知识&#xff0c;让机器人与环境交互不断获得经验&#xff0c;是一个增量学习的过程。 算法举例 基于强化学习的开源算法及工具 OpenAI Gym&#xff1a;用于开发和比较强化学习算法的工具…

HTML5五十六个民族网站模板源码

文章目录 1.设计来源高山族1.1 登录界面演示1.2 注册界面演示1.3 首页界面演示1.4 中国民族界面演示1.5 关于高山族界面演示1.6 联系我们界面演示 2.效果和源码2.1 动态效果2.2 源代码2.3 源码目录 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.ne…

《Redis设计与实现》阅读总结-2

第 7 章 压缩列表 1. 概念&#xff1a; 压缩列表是列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项&#xff0c;并且每个列表项是小整数值或长度比较短的字符串&#xff0c;那么Redis就会使用压缩类别来做列表键的底层实现。哈希键里面包含的所有键和值都是最小…