跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonWeChat

企业微信视频号去水印解析机器人搭建指南

介绍如何基于企业微信 API 和 Python Flask 框架搭建一个视频号去水印解析机器人。主要步骤包括注册企业微信应用并配置消息接收权限,部署云服务器环境(安装 Python、Nginx、SSL 证书),编写回调代码处理视频素材 ID 并调用解析接口获取无水印链接,最后通过 Nginx 反向代理启动服务。用户转发视频号给机器人即可自动回复下载链接。

PgDevote发布于 2026/3/29更新于 2026/9/974 浏览
企业微信视频号去水印解析机器人搭建指南

🎯核心目标

用户将微信视频号视频转发给机器人 → 机器人自动提取视频号原始链接 → 解析无水印视频地址 → 回复给用户

⚡第一阶段:注册企业微信 + 创建机器人应用

步骤 1:注册企业微信

  1. 打开企业微信官网 → 点击'立即注册' → 选择'企业/团队' → 填写企业名称、行业、人员规模 → 用个人微信扫码验证 → 完成注册。
  2. 登录企业微信管理后台,记录右上角'企业 ID'(后续开发用,格式:wxXXXXXXX)。

步骤 2:创建机器人应用

  1. 管理后台左侧菜单 →「应用管理」→「应用」→「创建应用」。
  2. 填写应用信息:
    • 应用名称:视频号解析助手(可自定义)
    • 应用头像:上传一张图片
    • 可见范围:选'全部成员'或自己的账号
  3. 点击'创建应用' → 进入应用详情页,记录 3 个关键信息:
    • AgentId(应用 ID,如 1000002)
    • Secret(应用密钥,需扫码验证查看)
    • 企业 ID(已在步骤 1 记录)

步骤 3:配置应用接收消息权限

  1. 应用详情页 →「接收消息」→ 开启「消息接收 API」。
  2. 填写配置信息(服务器部署后再修改):
    • 消息接收 URL:暂时填 http://你的服务器公网 IP/wechat/callback
    • Token:自定义字符串(如 videoparse2025)
    • EncodingAESKey:点击'随机生成'并复制
  3. 点击'保存' → 提示'验证 URL'(服务器部署后回来验证)。

步骤 4:添加机器人为好友

  1. 企业微信管理后台 →「我的企业」→「企业信息」→ 记录'企业微信名称'。
  2. 打开个人微信 → 搜索企业微信名称 → 找到应用 → 发送消息'测试',确认能正常对话。

🎨 第二阶段:配置云服务器

步骤 1:登录服务器

  1. 云服务器控制台 → 找到你的服务器 → 记录「公网 IP」、「登录账号」(默认 ubuntu 或 root)、「登录密码」。
  2. 使用 SSH 客户端工具连接:
    • 主机:填写服务器公网 IP
    • 端口:22
  3. 输入登录账号和密码 → 成功登录(界面显示 ubuntu@xxx:~$ 即为成功)。

步骤 2:安装基础环境

在终端中执行以下命令:

# 1. 更新系统软件(Ubuntu 系统)
sudo apt update && sudo apt upgrade -y

# 2. 安装 Python3、pip3
sudo apt install python3 python3-pip -y

# 3. 安装 Flask、requests、加密库
pip3 install flask requests pycryptodome gunicorn

# 4. 安装 Nginx
 apt install nginx -y


 apt install certbot python3-certbot-nginx -y
sudo
# 5. 安装 Certbot(申请免费 SSL 证书)
sudo

执行完后,输入 python3 --version,显示 Python 3.8.x 以上即为成功。

步骤 3:开放服务器端口

  1. 云服务器控制台 →「安全组」→「配置规则」→「入方向规则」→「添加规则」。
  2. 设置:
    • 端口范围:80(HTTP)、443(HTTPS)、22(SSH)
    • 授权对象:0.0.0.0/0
    • 描述:允许 HTTP/HTTPS 访问
  3. 确保 3 个端口都已开放。

步骤 4:申请免费 SSL 证书

在终端执行以下命令(替换为你的服务器公网 IP):

sudo certbot --nginx -d 你的服务器公网 IP

提示'Successfully obtained certificate'即为申请成功。

🧠 第三阶段:开发机器人代码

步骤 1:创建代码文件

mkdir -p /home/ubuntu/video_parse_bot
cd /home/ubuntu/video_parse_bot
nano video_bot.py

步骤 2:完整代码

from flask import Flask, request, jsonify
import requests
from Crypto.Cipher import AES
import base64
import json
import time

# -------------------------- 替换为你的企业微信信息(必改!)--------------------------
CORP_ID = "你的企业ID"          # 步骤 1.2 记录的企业 ID(wxXXXXXXX)
CORP_SECRET = "你的应用 Secret"  # 步骤 1.2 记录的应用 Secret
AGENT_ID = "你的 AgentId"        # 步骤 1.2 记录的 AgentId(数字,如 1000002)
TOKEN = "videoparse2025"         # 步骤 1.3 自定义的 Token
ENCODING_AES_KEY = "你的 EncodingAESKey"  # 步骤 1.3 生成的 EncodingAESKey

# -------------------------- 替换为你的解析接口(必改!)--------------------------
PARSE_API = "https://your-parser-api.com/parse"  # 替换为你的解析接口
# ----------------------------------------------------------------------------------

app = Flask(__name__)

# 1. 缓存 access_token(2 小时过期,避免重复调用接口)
access_token_cache = {
    "token": None,
    "expire_time": 0
}

def get_access_token():
    """获取企业微信 access_token(接口调用凭证)"""
    global access_token_cache
    if access_token_cache["token"] and time.time() < access_token_cache["expire_time"]:
        return access_token_cache["token"]
    url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={CORP_ID}&corpsecret={CORP_SECRET}"
    try:
        res = requests.get(url, timeout=10)
        res.raise_for_status()
        data = res.json()
        if data.get("errcode") == 0:
            access_token = data["access_token"]
            access_token_cache["token"] = access_token
            access_token_cache["expire_time"] = time.time() + 7100
            return access_token
        else:
            print(f"获取 access_token 失败:{data}")
            return None
    except Exception as e:
        print(f"获取 access_token 异常:{str(e)}")
        return None

def decrypt_msg(msg_signature, timestamp, nonce, encrypt_msg):
    """解密企业微信加密消息"""
    try:
        aes_key = base64.b64decode(ENCODING_AES_KEY + "=")
        cipher = AES.new(aes_key, AES.MODE_CBC, aes_key[:16])
        decrypt_data = cipher.decrypt(base64.b64decode(encrypt_msg))
        msg_len = int.from_bytes(decrypt_data[16:20], byteorder="big")
        real_msg = decrypt_data[20:20+msg_len].decode("utf-8")
        return json.loads(real_msg)
    except Exception as e:
        print(f"解密消息失败:{str(e)}")
        return None

def extract_weixin_video_url(video_id):
    """通过视频号临时素材 ID,提取原始链接"""
    access_token = get_access_token()
    if not access_token:
        return None
    url = f"https://qyapi.weixin.qq.com/cgi-bin/media/get?access_token={access_token}&media_id={video_id}"
    try:
        res = requests.get(url, timeout=15)
        res.raise_for_status()
        data = res.json()
        if data.get("url"):
            print(f"提取到视频号链接:{data['url']}")
            return data["url"]
        else:
            print(f"提取视频号链接失败:{data}")
            return None
    except Exception as e:
        print(f"获取临时素材异常:{str(e)}")
        return None

def parse_video_no_watermark(original_url):
    """调用解析接口,获取无水印链接"""
    if not original_url:
        return "提取视频号链接失败,请重试"
    try:
        encoded_url = requests.utils.quote(original_url)
        parse_url = f"{PARSE_API}?url={encoded_url}"
        res = requests.get(parse_url, timeout=20)
        res.raise_for_status()
        data = res.json()
        if data.get("code") == 0 and data.get("data", {}).get("no_watermark_url"):
            return data["data"]["no_watermark_url"]
        elif data.get("success") and data.get("url"):
            return data["url"]
        else:
            print(f"解析无水印失败:{data}")
            return f"解析失败,错误信息:{data.get('msg', '未知错误')}"
    except Exception as e:
        print(f"解析接口异常:{str(e)}")
        return "解析接口超时,请稍后再试"

def send_msg_to_user(user_id, content):
    """给用户发送消息(企业微信文本消息接口)"""
    access_token = get_access_token()
    if not access_token:
        return
    url = f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={access_token}"
    data = {
        "touser": user_id,
        "agentid": int(AGENT_ID),
        "msgtype": "text",
        "text": {"content": content},
        "safe": 0,
        "enable_id_trans": 0,
        "enable_duplicate_check": 0
    }
    try:
        res = requests.post(url, json=data, timeout=10)
        res.raise_for_status()
        result = res.json()
        if result.get("errcode") == 0:
            print(f"回复用户{user_id}成功:{content}")
        else:
            print(f"回复用户失败:{result}")
    except Exception as e:
        print(f"发送消息异常:{str(e)}")

@app.route("/wechat/callback", methods=["POST"])
def wechat_callback():
    """接收企业微信消息回调(用户转发视频号触发)"""
    msg_signature = request.args.get("msg_signature")
    timestamp = request.args.get("timestamp")
    nonce = request.args.get("nonce")
    encrypt_msg = request.data.decode("utf-8", errors="ignore")

    real_msg = decrypt_msg(msg_signature, timestamp, nonce, encrypt_msg)
    if not real_msg:
        return jsonify({"errcode": -1, "errmsg": "decrypt failed"})

    print(f"收到用户消息:{real_msg}")

    if real_msg.get("MsgType") == "video" and real_msg.get("VideoMsg"):
        user_id = real_msg.get("FromUserName")
        video_id = real_msg["VideoMsg"].get("MsgId")

        original_url = extract_weixin_video_url(video_id)
        no_watermark_url = parse_video_no_watermark(original_url)
        reply_content = f"✅ 视频号无水印链接已生成:\n{no_watermark_url}\n\n💡 提示:链接有效期 24 小时,建议及时保存"
        send_msg_to_user(user_id, reply_content)
    else:
        user_id = real_msg.get("FromUserName")
        send_msg_to_user(user_id, "❌ 请转发「微信视频号视频」给我,我会自动生成无水印链接~")

    return jsonify({"errcode": 0, "errmsg": "success"})

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8080, debug=True)

步骤 3:修改代码中的关键信息

  • CORP_ID:步骤 1.2 记录的企业 ID
  • CORP_SECRET:步骤 1.2 记录的应用 Secret
  • AGENT_ID:步骤 1.2 记录的 AgentId
  • ENCODING_AES_KEY:步骤 1.3 生成的 EncodingAESKey
  • PARSE_API:替换为你找到的视频号解析接口

步骤 4:配置 Nginx 反向代理

  1. 编辑 Nginx 配置文件:
    sudo nano /etc/nginx/sites-available/default
    
  2. 找到 server { ... }块,替换为以下内容(替换你的服务器公网 IP 为实际 IP):
    server {
        listen 80;
        listen [::]:80;
        server_name 你的服务器公网 IP;  # 替换为你的服务器 IP 或域名
        location / {
            return 301 https://$host$request_uri;
        }
    }
    server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name 你的服务器公网 IP;  # 替换为你的服务器 IP 或域名
        ssl_certificate /etc/letsencrypt/live/你的服务器公网 IP/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/你的服务器公网 IP/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
        location /wechat/callback {
            proxy_pass http://127.0.0.1:8080;  # 转发到本地 8080 端口
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
    

步骤 5:启动机器人服务

  1. 在代码目录下,执行以下命令启动服务:
    cd /home/ubuntu/video_parse_bot
    nohup gunicorn -w 4 -b 127.0.0.1:8080 video_bot:app &
    
  2. 查看服务是否启动成功:
    ps aux | grep gunicorn
    
  3. 查看日志(排查错误用):
    tail -f nohup.out
    

🎯 第四阶段:验证企业微信回调 + 测试机器人

步骤 1:更新企业微信回调 URL

  1. 登录企业微信管理后台 →「应用管理」→ 找到你的机器人应用 →「接收消息」。
  2. 修改「消息接收 URL」为:https://你的服务器公网 IP/wechat/callback(注意是 HTTPS 开头)。
  3. 确认「Token」和「EncodingAESKey」与代码中一致 → 点击「保存」→ 提示'验证成功'即为配置完成。

步骤 2:测试机器人功能

  1. 打开个人微信 → 找到你的机器人 → 转发一个视频号视频给机器人。
  2. 等待 10 秒内,机器人回复无水印链接 → 点击链接,即可下载无水印视频(测试成功!)。

目录

  1. 🎯核心目标
  2. ⚡第一阶段:注册企业微信 + 创建机器人应用
  3. 步骤 1:注册企业微信
  4. 步骤 2:创建机器人应用
  5. 步骤 3:配置应用接收消息权限
  6. 步骤 4:添加机器人为好友
  7. 🎨 第二阶段:配置云服务器
  8. 步骤 1:登录服务器
  9. 步骤 2:安装基础环境
  10. 1. 更新系统软件(Ubuntu 系统)
  11. 2. 安装 Python3、pip3
  12. 3. 安装 Flask、requests、加密库
  13. 4. 安装 Nginx
  14. 5. 安装 Certbot(申请免费 SSL 证书)
  15. 步骤 3:开放服务器端口
  16. 步骤 4:申请免费 SSL 证书
  17. 🧠 第三阶段:开发机器人代码
  18. 步骤 1:创建代码文件
  19. 步骤 2:完整代码
  20. -------------------------- 替换为你的企业微信信息(必改!)--------------------------
  21. -------------------------- 替换为你的解析接口(必改!)--------------------------
  22. ----------------------------------------------------------------------------------
  23. 1. 缓存 access_token(2 小时过期,避免重复调用接口)
  24. 步骤 3:修改代码中的关键信息
  25. 步骤 4:配置 Nginx 反向代理
  26. 步骤 5:启动机器人服务
  27. 🎯 第四阶段:验证企业微信回调 + 测试机器人
  28. 步骤 1:更新企业微信回调 URL
  29. 步骤 2:测试机器人功能

更多推荐文章

查看全部
  • Windows 搭建闲鱼 AI 自动回复系统部署指南
  • 鸿蒙 V2 状态管理:@Monitor 装饰器使用详解
  • LangChain 核心解析:从 LLM 调用到 Agent 架构
  • 2025年12月电子学会青少年软件编程Python三级等级考试真题
  • 前端通用 AI Rules 定义:适配 Cursor、Trae 等主流工具
  • 哈希表实现原理与代码详解
  • MySQL 复合查询与子查询详解
  • 基于 Three.js 渲染三维无人机模型(WebGL / Vue / React)
  • 在 Linux 上把 OpenClaw 接到 QQ 机器人
  • Python 实现 MCP 客户端调用高德地图天气查询示例
  • Windows 或 macOS 系统安装配置 Miniforge3
  • 无人机视觉任务常用数据集汇总:检测与分割资源整理
  • AI 网络技术编程测试:从理论到实践
  • Go Web 开发核心理论:HTTP、数据库与模板实战
  • 自动驾驶技术入门:Apollo 8.0 学习笔记
  • Claude Code 高级编程技巧与实战项目详解
  • 大厂 AI 产品经理招聘数据分析:薪资与能力要求
  • 练习开发Skill——网页内容抓取Skill(website-content-fetch)
  • OpenClaw 结合 cpolar 实现公网访问与应用场景
  • 双指针算法进阶:三角形与多数之和

相关免费在线工具

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online