微信视频号解密服务 - 部署文档
环境要求
- Python 3.8+
- 依赖包
- 代码包下载: https://qyapi.ipaybuy.cn/upload/wx_down.zip
安装依赖
pip install fastapi uvicorn httpx pydantic目录结构
├── sph-decrypt # 主程序
├── downloads/ # 加密视频临时目录
├── decrypted/ # 解密后视频目录
├── logs/ # 日志目录
│ └── sph-decrypt.log # 日志文件启动服务
python sph-decrypt服务启动后显示:
==================================================
微信视频号解密服务 - FastAPI 版本
==================================================
日志文件: d:\api\GolandProjects\goVideoWatermarking\download\py\logs\sph-decrypt.log
服务地址: http://0.0.0.0:9888
API文档: http://0.0.0.0:9888/docs
==================================================配置说明
在 sph-decrypt 文件中可修改以下配置:
| ()配置项 | 说明 | 默认值 |
|---|---|---|
KEYSTREAM_API_URL | 密钥流获取API地址,奇云部署提供 | http://43.240.222.230:3000/api/keystream |
FILE_EXPIRE_HOURS | 视频文件过期时间(小时)可自行配置 | 2 |
CLEANUP_INTERVAL | 清理检查间隔(次) | 10 |
| 服务端口 | HTTP服务端口 | 9888 |
- 宝塔用户可按图片操作,1、在python项目下,选择对应的项目和入口文件 2、选择依赖安装文件,点击确认后等待安装,3、配置域名和https(ssl)

启动完成好后,到项目的配置文件Nginx配置去添加以下内容
# HTTP反向代理相关配置开始 >>>
location / {
proxy_pass http://127.0.0.1:9888;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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;
proxy_cache_bypass $http_upgrade;
# 超时设置
proxy_connect_timeout 500s;
proxy_send_timeout 500s;
proxy_read_timeout 500s;
}
微信视频号解密服务 - API接口文档说明
基础信息
- 基础URL:http://{host}:9888
- API文档(Swagger):http://{host}:9888/docs
1. 解密视频
解密并获取视频,支持多种返回模式。
请求
GET /decrypt参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| encrypted_url | string | 是 | 加密视频的URL(奇云去水印或视频号解析,返回的video_url字段的内容) 提醒:为了无缝过度已上线的,当iteration = 1:使用video_url_v2,2:则使用video_url,最终是使用video_url,video_url_v2是为了过度上线的。请尽快开发调整,后面video_url返回是一个视频号原加密视频地址,不再是中转地址。请根据这篇文章去部署好自己的中转下载服务。 去水印视频号接口返回: "video_url": videoUrl, "video_url_v2": encrypted, "iteration": 1, // 1:使用video_url_v2,2:则使用video_url |
| decode_key | string | 是 | 解密密钥(奇云去水印或视频号解析,返回的decode_key字段的内容) |
| sync | int | 否 | 返回模式,默认1,更多查看sync 参数说明 |
sync 参数说明
| 值 | 名称 | 说明 |
|---|---|---|
| 1 | 同步模式(默认) | 解密完成后返回JSON,包含视频URL |
| 2 | 异步模式 | 立即返回JSON,视频在后台处理 |
| 3 | 流式返回 | 解密完成后直接返回视频文件流支持在线播放 |
| 4 | 重定向模式 | 解密完成后重定向到视频URL支持在线播放 |
示例
同步解密(小文件推荐)
curl "http://localhost:9888/decrypt?encrypted_url=https://example.com/video.mp4&decode_key=abc123&sync=1"响应示例(sync=1/2)
{
"success": true,
"video_id": "20260506143025_abc123",
"message": "解密完成",
"video_url": "http://localhost:9888/video/20260506143025_abc123",
"file_size": 1048576
}流式返回(sync=3)
- 直接返回视频文件流(MP4格式)
- 支持断点续传和进度条拖动
重定向模式(sync=4)
- 返回 HTTP 302 重定向
- 下载并解密成功后自动跳转到视频地址
缓存说明
- 同一 decode_key 的视频解密后会被缓存
- 再次请求相同 decode_key 时,直接返回已解密视频
- 视频文件名格式:{时间戳}_{decode_key}.mp4
2. 获取视频
通过 video_id 获取已解密的视频文件。
请求
GET /video/{video_id}示例
curl "http://localhost:9888/video/20260506143025_abc123"参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| video_id | string | 是 | 接口返回的视频ID |
响应
- 200 OK:视频流或文件
- 404 Not Found:视频不存在或还在处理中
3. 查询状态
查询视频的处理状态。
请求
GET /status/{video_id}示例
curl "http://localhost:9888/status/20260506143025_abc123"响应示例
{
"status": "ready",
"video_url": "/video/20260506143025_abc123"
}status 状态说明
| 状态 | 说明 |
|---|---|
| ready | 视频已就绪,可访问 |
| processing | 视频正在处理中 |
| not_found | 视频不存在 |
4. 服务健康检查
请求
GET /响应示例
{
"message": "微信视频号解密服务",
"version": "1.0.0",
"endpoints": ["/decrypt", "/video/{video_id}"]
}使用流程(可根据场景选择合适的)
方式一:同步解密(小文件推荐)
1. GET /decrypt?encrypted_url=xxx&decode_key=yyy&sync=1
2. 返回 video_url
3. 通过 GET /video/{video_id} 播放或下载方式二:一次搞定(小文件推荐)
1. GET /decrypt?encrypted_url=xxx&decode_key=yyy&sync=3
2. 直接返回视频流方式三:异步解密(大文件推荐)
1. GET /decrypt?encrypted_url=xxx&decode_key=yyy&sync=2
2. 返回 video_url
3. 通过 GET /video/{video_id} 播放或下载方式四:重定向模式(小文件推荐)
1. GET /decrypt?encrypted_url=xxx&decode_key=yyy&sync=4
2. 自动重定向到视频页面错误码
| HTTP状态码 | 说明 |
|---|---|
| 200 | 成功 |
| 302 | 重定向 |
| 404 | 资源不存在 |
| 500 | 服务器内部错误(解密失败) |
