python3实现QQ官方机器人回调验证

    考虑到第三方的机器人现在越来越难维持了,来捣鼓一下官方的机器人。虽然官方藏着掖着不肯开放很多功能,但起码能用。官方机器人的优点是稳定,只要申请成功,且你自己不乱搞,基本不存在被封的可能,缺点是藤子对其严格到令人发指的管控,包括已经完全关闭主动发送消息功能只能被动回复消息,无法获得用户的QQ号、群的QQ号等等。

    这里记录一下自己对接QQ官方机器人的过程。仅粗略记录准备工作和如何实现回调验证,不记录具体实现的业务逻辑。


1. 准备工作

1.1 QQ开放平台

    登录QQ开放平台QQ 开放平台,这边登录时有一个管理员QQ的概念,也就是你登录平台时的QQ,就是你想要创建的机器人的管理员,建议大家用大号去登录,这个不会有什么影响。

    登录上去以后申请机器人,选个人的就行,现在个人申请机器人也可以加QQ群(以前只有企业实名的机器人才能加进QQ群)。过程不复杂,这里简略。不需要验证太多东西,只是需要你的手机QQ扫二维码验证。

    创建好机器人后,点击机器人,进入具体的设置,找到左边菜单的开发-沙箱配置,设置一个测试用的群,自己登录用的管理员QQ必须是这个群的群主或者管理员,人数必须小于20人。建议是自己创一个,符合条件的群可以在下拉菜单里面看到,选中这个群,然后根据说明文字,去QQ上,群里把机器人添加到群里。

1.2 准备服务器、域名等

    需要的东西有:服务器、域名、证书、ICP备案。我个人习惯用阿里云,这些东西都可以在阿里云上搞定。

阿里云上对于个人用户最便宜的方案:

服务器:阿里云的2核2G3M轻量服务器(99套餐),99一年,比其他动不动就几百上千一个月的实惠

域名:阿里云上购买一个非.cn/.com/.net后缀的域名,自己看着买哪个便宜买哪个,最低几块钱一年

证书:阿里云控制台找“数字证书管理服务”,里面找“个人测试证书”,一个账户一年能免费购买一次,20张,每张是3个月有效期,到期再创建,个人用户足够用,相当于是免费

ICP备案:阿里云搜ICP备案 网站备案_ICP备案_备案迁移_App备案_小程序备案_备案-阿里云

按提示备案,需要一些个人的信息,网站用途什么的写测试就行,这个可以直接做,不需要先启动网站。通过很容易,只是需要几天时间。这个是必须的,否则外部在连接你的API时会出现connection reset(但阿里云服务器之间互相访问不会出现这个问题)

1.3 准备HTTP服务

    准备一个用来和腾讯交互的HTTP服务。这个自行搞定。看我这个标题点进来的应该用的都是python,可以用flask,也可以用fastapi等。我自己是用了nginx代理,后端fastapi。代理时对外部必须要使用域名、https,端口只能是80、443、8080、8443的其中一个,阿里云申请的话证书文件可以从阿里云那边直接下载下来。

2. 配置对接

    准备工作做好后就可以开始对接了,回到QQ机器人的管理后台,找到菜单“开发”-“回调配置”,先在下面勾选你要监听的事件(建议是全部选上),再在请求地址这里填你的HTTP服务监听地址。

    输入完毕以后,鼠标点击文本框外面任意地方,会立即触发验证,你的HTTP服务会收到一条HTTP请求,大致HTTP结构是这样的:

POST /recmsg/qbot HTTP/1.0  # 这里是你监听地址的uri
Host: xxx.xxx.xxx  # 这里是你填写的域名
X-Real-IP: 183.47.105.49  # 这是腾讯那边发起请求的真实IP地址,由于我用nginx代理,后端收到请求时出现这个字段,实际IP地址有很多
X-Forwarded-For: 183.47.105.49  # 这是腾讯那边发起请求的真实IP地址,由于我用nginx代理,后端收到请求时出现这个字段,实际IP地址有很多
X-Forwarded-Proto: https
Connection: close
Content-Length: 76
content-type: application/json
user-agent: QQBot-Callback
x-bot-appid: xxxxxxxxx  # 这是你创建的QQ机器人的ID,没什么用
x-signature-ed25519: xxxxxxxxxxxxxxxxxxxxxxxxxxx  # 一串超长的东西,这个是腾讯向你请求时,给你校验用的,这里可以先不管
x-signature-method: Ed25519  # 验证用的方法,不用管
x-signature-timestamp: 1750407202  # 请求时间戳,不用管{"d":{"plain_token":"xxxxxxxxxxxxxxxxxxxxxx","event_ts":"1750407202"},"op":13}
# 有用的主要是这一串东西,plain_token、event_ts取下来用于计算返回给腾讯的鉴权字符串
# op=13表示这个请求是用来验证回调的

    此时由于后端还没有调好,页面上会弹出验证失败的红色提示框。

腾讯要求返回一个大致是这样的响应体才可以通过验证:

HTTP/1.1 200 OK
date: Fri, 20 Jun 2025 08:13:21 GMT
server: uvicorn  # 我用的fastapi,所以server显示这个
content-length: 181
content-type: application/json
Connection: close{"plain_token":"xxxxxxxxxxxx","signature":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
# plain_token值和前面请求给你的值保持一致
# signature为计算出来以后得鉴权签名串

计算signature的代码段:

from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
# 需要安装一下cryptography这个库secret = 'xxxxxxxxxxxxxxxxxx'  # QQ机器人后台“开发”-“开发管理”里面的AppSecret
event_ts = '1750407202'  # 验证请求body里面送给你的时间戳
plain_token = 'xxxxxxxxxxxxxxxxxxxxxx'  # 验证请求body里面送给你的plain_tokenwhile len(secret) < 32:  # 重复secret,直到长度为32,官方的示例里面有这段secret += secret     # 实际没啥用,现在获取的secret都是32位
secret = secret[:32]     # 也许是一开始设计的时候secret有可能不为32位,总之先放到这里b_secret = secret.encode('utf-8')
private_key = Ed25519PrivateKey.from_private_bytes(b_secret)signature = private_key.sign((event_ts + plain_token).encode('utf-8')).hex()
# 这里用到了event_ts和plain_token来计算signature的值

    加密采用的是Ed25519方式,大致过程是根据给出的密钥生成一个private_key,然后用这个private_key结合请求内的信息生成一个signature,有兴趣自行研究。

    把plain_token和计算出来的signature值填入响应里返回给腾讯。HTTP服务修改好之后重启,激活一下回调地址修改的文本框,再点击外面空白处,如果这时候没有跳出报错,那就是验证成功了,可以点击“确定配置”按钮保存。

    现在在你的测试群@机器人并发送一些消息,你的HTTP服务就能收到腾讯的消息推送了。然后就能进一步开发或配置业务逻辑了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Vue3+TS的自定义指令开发与业务场景应用

文章目录 1. 前言2. 基础概念与优势​3. Vue3TS自定义指令的创建与注册​3.1. 创建自定义指令​3.2. 注册自定义指令​ 4. 实际场景示例​4.1. 权限指令控制​4.2. 图片懒加载指令​ 5. 优化与注意事项​ 1. 前言 在 Vue3 的开发生态中&#xff0c;自定义指令是一项极为灵活且…

Elasticsearch 索引文档的流程

Elasticsearch 索引文档的流程是一个分布式、多阶段的过程&#xff0c;涉及客户端请求、路由、主副本同步及持久化等步骤&#xff0c;具体流程如下&#xff1a; 一、客户端请求与路由 1.1 文档接收与路由计算‌ 客户端通过 REST API 发送文档写入请求&#xff0c;需指…

【unity】批量剔除图片四周空白像素的工具

摘要&#xff1a;Unity图片空白像素批量处理工具 该工具提供两种方式批量剔除图片空白像素&#xff1a; 静态处理类&#xff1a;提供TrimTexture方法&#xff0c;可读取纹理像素数据&#xff0c;计算非透明区域边界&#xff0c;生成裁剪后的新纹理&#xff1b;SaveTexture方法…

可编辑64页PPT | 基于DeepSeek的数据治理方案

荐言摘要&#xff1a;在数据量爆炸式增长且业务需求日益复杂的当下&#xff0c;企业数据治理面临着数据分散、标准混乱、价值挖掘难等诸多挑战。我们基于DeepSeek强大的智能能力&#xff0c;为企业量身打造创新数据治理方案。 DeepSeek凭借其卓越的自然语言处理和深度学习技术…

启用AWS VPC流日志保存到CloudWatch日志组

目标 启用VPC流日志 启用流日志 选择vpc&#xff0c;开始启用流日志&#xff0c;如下图&#xff1a; 设置名称和日志组&#xff0c;创建流日志&#xff0c;如下图&#xff1a; 参考 AWS云中的VPC启用流日志保存S3&#xff08;AWS中国云&#xff09;创建发布到 CloudWatc…

游戏引擎学习路径与技术栈指南

游戏引擎架构全景图&#xff08;基于GAMES104 V2.2思维导图&#xff09; graph TDA[基础架构] --> A1[面向数据管理]A --> A2[任务系统]A1 --> A11[ECS架构]A1 --> A12[内存优化]A2 --> A21[Job System]A2 --> A22[依赖调度]B[工具链] --> B1[编辑器框架]…

预训练大语言模型

Encoder-only model&#xff08;Autoencoding model&#xff09; 使用掩码语言模型&#xff08;Masked Language Modeling, MLM&#xff09;进行预训练输入原始语句和掩码&#xff0c;训练目标是预测掩码标记&#xff0c;一遍重建原始句子->也称为降噪目标&#xff08;deno…

C++信奥赛闯关题目1

1闰年 输入一个年份,输出它是否为闰年 闰年的规则: 描述:能被4整除,并且不能被100整除的,再加上可以被400整除的 版本一:原始版 #include <iostream> #include <cmath> using namespace std; int main() {int y;cin>>y;bool x = y%4==0&&y…

Qt+OPC开发笔记(三):OPC客户端订阅特点消息的Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/148868209 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

嵌入式开发学习日志Day8(ARM体系架构——按键、蜂鸣器及中断)

一、蜂鸣器学习 代码实现&#xff1a; 二、BSP工程管理及Makefile 1、BSP工程管理 利用BSP工程管理&#xff0c;使文档显示不杂乱&#xff1b; 将这些文件分为4类&#xff0c;并保存到4个不同的文件夹里。 首先在新的工程文件夹里创建一个之后我们编写的类似led驱动&#xff0…

Linux部署Sonic前后端(详细版)(腾讯云)

系统用的是Ubuntu 22.04 LTS 1、安装Docker sudo apt update sudo apt install -y docker.io docker-compose sudo systemctl start docker sudo systemctl enable docker# 如果不想每次用 sudo&#xff0c;可以加权限 sudo usermod -aG docker $USER 2、安装 docker-compose…

腾讯云CBS:企业级云存储的性能与可靠性重构

摘要 根据Forrester 2025年网络分析与可见性&#xff08;NAV&#xff09;报告&#xff0c;东西向流量安全与加密威胁检测成为企业核心痛点&#xff08;误报率降低需求↑40%&#xff09;。腾讯云CBS作为底层存储支柱&#xff0c;通过三副本跨可用区冗余架构与毫秒级故障切换能力…

ubuntu 22.04 更换阿里源 (wsl2 参照)

步骤 1: 备份当前源列表 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 步骤 2: 编辑源列表文件 sudo nano /etc/apt/sources.list 步骤 3: 添加阿里云镜像源 ubuntu 阿里源地址可以在这查看 ubuntu镜像_ubuntu下载地址_ubuntu安装教程-阿里巴巴开源镜像站 …

idea中push拒绝,merge,rebase的区别

在 IntelliJ IDEA 中进行 Git 操作时&#xff0c;Push 拒绝&#xff08;Push Rejected&#xff09;、Merge 和 Rebase 是常见的冲突解决方式。它们有不同的适用场景和影响&#xff0c;下面详细说明它们的区别&#xff0c;并附上流程图帮助理解。 1. Push 拒绝&#xff08;Push …

轻松实现PDF局部擦除的技术级解决方案

在处理PDF文档时&#xff0c;我们常常会遇到这样的场景&#xff1a;想要删除某段文字、擦除一张图片&#xff0c;或者对页面内容进行局部调整。但很多编辑工具要么操作繁琐&#xff0c;要么功能受限&#xff0c;甚至还需要付费解锁核心功能。 这是一款轻便又实用的PDF编辑工具…

css color 十六进制颜色透明度

css color 十六进制颜色透明度 例&#xff1a;#FFFFFF ~~ #FFFFFF1A(10% ) 0% 为 FF10% 为 1A20% 为 3330% 为 4D40% 为 6650% 为 8060% 为 9970% 为 B380% 为 CC90% 为 E6100% 为 00

Git简介和常用命令

Git简介 Git是一款版本管理软件&#xff0c;可以在任何时间点保存文件&#xff0c;也能够恢复到以前任意时间点保存的文档&#xff0c;Git作用简单举例来说就是&#xff0c;写论文&#xff0c;有很多个版本&#xff0c;将原来的论文保存起来&#xff0c;新建一个副本&#xff…

Kafka 性能调优指南

文章目录 概述操作系统层面调优文件系统优化内存管理磁盘 I/O 优化 JVM 调优堆内存设置GC 收集器选择常见 GC 问题 Broker 端调优版本兼容性关键参数配置日志段大小调优设置原则推荐配置调优考虑因素监控命令 应用层调优客户端复用资源管理多线程消费模式 性能指标调优吞吐量优…

佰力博科技与您探讨低温真空探针台如何保养

低温真空探针台是一种用于在低温或真空环境下进行电学性能测试的精密仪器&#xff0c;其保养和维护对于确保设备的稳定运行和延长使用寿命至关重要。 一、日常清洁与检查 1、使用后应立即清洁探针台&#xff0c;尤其是探针、接口和连接器&#xff0c;避免灰尘和杂质影响精度。…

MySQL:深入总结锁机制

写在前面 在 MySQL 数据库中&#xff0c;锁机制是保障并发控制和数据一致性的关键。合理运用锁机制&#xff0c;能有效避免数据竞争&#xff0c;提升数据库性能。接下来&#xff0c;我们就深入了解 MySQL 中的各类锁。 博主总结&#xff08;注&#xff1a;针对总结的详解补充在…