fix(nginx): 调整企业微信回调代理路径 feat(gateway): 添加企业微信消息处理功能 docs: 更新项目规划文档和企业微信配置详情 refactor(XCamera): 重构LED检测和图像处理逻辑 test: 添加ONVIF抓图测试功能
140 lines
12 KiB
Plaintext
140 lines
12 KiB
Plaintext
C:\Disk\Gateway>gateway.exe
|
||
🚀 网关服务启动中...
|
||
📍 绑定地址: 127.0.0.1:8000 (通过nginx代理)
|
||
📝 日志级别: info
|
||
🔧 版本: 0.1.0
|
||
🎯 环境: development
|
||
🌐 外部访问: https://pactgo.cn (nginx代理)
|
||
[03-23 13:08:18.414] 🚀 创建WebSocket连接池
|
||
[03-23 13:08:18.415] ⚙️ 创建默认通信配置
|
||
[03-23 13:08:18.415] 🚀 初始化任务处理服务
|
||
[03-23 13:08:18.415] 📋 WebSocket连接池已创建
|
||
[03-23 13:08:18.415] ⚙️ 通信配置已加载: "ws://localhost:8000/api/v1/ws/control"
|
||
[03-23 13:08:18.415] 🏭 创建生产环境通信配置 (心跳: 30s, 超时: 60s)
|
||
[03-23 13:08:18.415] 🚀 创建WebSocket客户端,配置URL: ws://pactgo.cn/api/v1/ws/control
|
||
[2026-03-23T05:08:18Z INFO actix_server::builder] starting 2 workers
|
||
✅ 网关服务已启动在 127.0.0.1:8000 (通过nginx代理)
|
||
🔍 可用接口:
|
||
🎯 企业微信回调 - 直接匹配企业微信配置
|
||
POST /wecom - 企业微信回调(必须直接匹配企业微信配置)
|
||
|
||
📋 API接口(通过 /api/v1 前缀):
|
||
GET /api/v1/health - 健康检查
|
||
GET /api/v1/system - 系统信息
|
||
POST /api/v1/task - 处理任务
|
||
GET /api/v1/task/<task_id> - 查询任务状态
|
||
GET /api/v1/tasks - 查询任务列表
|
||
POST /api/v1/wechat/miniprogram/callback - 微信小程序回调
|
||
GET /api/v1/ws/control - WebSocket控制通道
|
||
GET /api/v1/ws/task - WebSocket任务通道
|
||
POST /api/v1/test/websocket/send - WebSocket发送测试
|
||
POST /api/v1/test/websocket/send_and_wait - WebSocket发送并等待测试
|
||
GET /api/v1/test/websocket/get_manager - WebSocket管理器测试
|
||
GET /api/v1/test/websocket/connection_send - WebSocket连接发送测试
|
||
POST /api/v1/test/websocket/direct_send - WebSocket直接发送测试
|
||
POST /api/v1/test/websocket/direct_send_and_wait - WebSocket直接发送并等待测试
|
||
🌐 外部访问: https://pactgo.cn (nginx代理)
|
||
🔗 WebSocket连接: wss://pactgo.cn/api/v1/ws/control
|
||
[2026-03-23T05:08:18Z INFO actix_server::server] Actix runtime found; starting in Actix runtime
|
||
[2026-03-23T05:08:18Z INFO actix_server::server] starting service: "actix-web-service-127.0.0.1:8000", workers: 2, listening on: 127.0.0.1:8000
|
||
🔄 启动WebSocket客户端连接测试...
|
||
[03-23 13:08:18.425] 🔗 正在连接到网关WebSocket: ws://pactgo.cn/api/v1/ws/control
|
||
[03-23 13:08:18.425] 🔍 验证通信配置...
|
||
[03-23 13:08:18.425] ✅ 通信配置验证通过 (URL: ws://pactgo.cn/api/v1/ws/control, 最大连接数: 100)
|
||
[03-23 13:08:18.425] ✅ WebSocket连接成功 (模拟)
|
||
✅ WebSocket客户端连接成功
|
||
[03-23 13:08:18.426] 🔗 WebSocket客户端连接状态: 已连接
|
||
🔗 WebSocket客户端已连接
|
||
[03-23 13:08:18.426] 📤 WebSocket客户端发送任务: TextProcessing (心跳: 30s, 超时: 60s)
|
||
✅ 测试任务发送成功: "任务处理成功(WebSocket模拟)"
|
||
[03-23 13:08:18.428] 📋 获取所有连接信息: 0个连接
|
||
[03-23 13:08:18.556] 🔗 收到WebSocket连接请求:
|
||
[03-23 13:08:18.556] HttpRequest GET HTTP/1.1:/api/v1/ws/control
|
||
[03-23 13:08:18.557] headers:
|
||
[03-23 13:08:18.557] "upgrade": "websocket"
|
||
[03-23 13:08:18.557] "x-api-key": "claw_secret_key"
|
||
[03-23 13:08:18.557] "sec-websocket-version": "13"
|
||
[03-23 13:08:18.558] "x-real-ip": "222.211.215.207"
|
||
[03-23 13:08:18.558] "connection": "upgrade"
|
||
[03-23 13:08:18.559] "host": "pactgo.cn"
|
||
[03-23 13:08:18.560] "x-forwarded-for": "222.211.215.207"
|
||
[03-23 13:08:18.560] "x-forwarded-proto": "https"
|
||
[03-23 13:08:18.560] "sec-websocket-key": "xV8B16meVWRnAZI8FHb1ig=="
|
||
[03-23 13:08:18.560] ✅ WebSocket连接认证通过
|
||
[03-23 13:08:18.560] 🎯 检测到SmartClaw服务连接 (控制通道)
|
||
[03-23 13:08:18.560] 🔗 开始WebSocket握手...
|
||
[03-23 13:08:18.560] ✅ WebSocket握手成功
|
||
[03-23 13:08:18.561] 🔌 添加新连接: 26dd6cb5-c305-421d-a8a3-753d0455b1c6
|
||
[03-23 13:08:18.561] 🔌 添加WebSocket会话: 26dd6cb5-c305-421d-a8a3-753d0455b1c6
|
||
[03-23 13:08:18.561] 🔌 创建新的WebSocket连接: id=26dd6cb5-c305-421d-a8a3-753d0455b1c6, type=SmartClaw
|
||
[03-23 13:08:18.561] 🔄 启动WebSocket消息处理循环...
|
||
[03-23 13:08:18.561] ✅ WebSocket连接已建立
|
||
[03-23 13:08:18.561] ✅ WebSocket消息处理循环已启动
|
||
[03-23 13:08:18.570] 📨 收到消息: {"service":"smartclaw","timestamp":1774242498,"type":"connect","version":"0.1.0"}
|
||
[03-23 13:08:18.570] 🔗 收到连接消息
|
||
[03-23 13:08:18.594] 📨 收到消息: {"service":"smartclaw","timestamp":1774242498,"type":"heartbeat"}
|
||
[03-23 13:08:18.594] 💓 收到心跳消息
|
||
[03-23 13:08:22.292] 📨 收到消息: {"service":"smartclaw","timestamp":1774242502,"type":"heartbeat"}
|
||
[03-23 13:08:22.293] 💓 收到心跳消息
|
||
[03-23 13:08:23.435] 🔌 断开WebSocket连接: ws://pactgo.cn/api/v1/ws/control
|
||
🔌 WebSocket客户端已断开
|
||
[03-23 13:08:37.412] 📱 收到企业微信回调
|
||
[03-23 13:08:37.412] 请求方法: POST
|
||
[03-23 13:08:37.414] 查询参数: msg_signature=d3c4aaed9b7bfdb3b7ac17119762e639bcaa3e2a×tamp=1774242517&nonce=1774420742
|
||
[03-23 13:08:37.414] 📥 开始消息推送处理流程
|
||
[03-23 13:08:37.415] 消息内容: <xml><ToUserName><![CDATA[wwa7bb7aec981103b4]]></ToUserName><Encrypt><![CDATA[sTK12sXLTGbDIHop8a/0+8lehw6CBjCdfXBdR1DwpyFWmt8fttKjChwIzocwgWXaPDPaB68Cs7+MHVg6VINthu4bLHS/lNgKGjYYsQHe5vrdEQ2OGUBOWIQqNNX3bb0e7Ls/zBecAw7blSQNKi4akxGF1anvMVuVfv8ZspdkkongM3jXFiQ0HJJJDv68ejWRpW9iY3XR5F3FsQgYB0UbJguKtO+JuBdxlLQ30PdI0VrNtWL6XbMZN1xwXWTqxwy/A7aXFv/7nc2w/HnPJZW21/2AX0K/1MIdQpOamtZ3LaV5/tu/bSqUaSEF8n2PHN3tpmynYQKtcq0+KZWEnUXmxqvTWotLkV8f6MPlkPrQ5cEmXZ+EcV8jS4v2y9gZvhQ7IUYJ3H78eoqKm0uGlKCnRM9Ac22F961lRKuT9Y+ggsCtlKwU3eDuKLNJ2rdAQ0oO4OxcvPVguuy9c5m6CepL2g==]]></Encrypt><AgentID><![CDATA[1000002]]></AgentID></xml>
|
||
[03-23 13:08:37.415] 🔐 开始验证企业微信签名
|
||
[03-23 13:08:37.415] 🔐 验证企业微信签名:
|
||
[03-23 13:08:37.415] msg_signature: d3c4aaed9b7bfdb3b7ac17119762e639bcaa3e2a
|
||
[03-23 13:08:37.415] timestamp: 1774242517
|
||
[03-23 13:08:37.415] nonce: 1774420742
|
||
[03-23 13:08:37.415] data: sTK12sXLTGbDIHop8a/0+8lehw6CBjCdfXBdR1DwpyFWmt8fttKjChwIzocwgWXaPDPaB68Cs7+MHVg6VINthu4bLHS/lNgKGjYYsQHe5vrdEQ2OGUBOWIQqNNX3bb0e7Ls/zBecAw7blSQNKi4akxGF1anvMVuVfv8ZspdkkongM3jXFiQ0HJJJDv68ejWRpW9iY3XR5F3FsQgYB0UbJguKtO+JuBdxlLQ30PdI0VrNtWL6XbMZN1xwXWTqxwy/A7aXFv/7nc2w/HnPJZW21/2AX0K/1MIdQpOamtZ3LaV5/tu/bSqUaSEF8n2PHN3tpmynYQKtcq0+KZWEnUXmxqvTWotLkV8f6MPlkPrQ5cEmXZ+EcV8jS4v2y9gZvhQ7IUYJ3H78eoqKm0uGlKCnRM9Ac22F961lRKuT9Y+ggsCtlKwU3eDuKLNJ2rdAQ0oO4OxcvPVguuy9c5m6CepL2g==
|
||
[03-23 13:08:37.416] token: mytoken123456
|
||
[03-23 13:08:37.416] 排序后拼接字符串: 17742425171774420742mytoken123456sTK12sXLTGbDIHop8a/0+8lehw6CBjCdfXBdR1DwpyFWmt8fttKjChwIzocwgWXaPDPaB68Cs7+MHVg6VINthu4bLHS/lNgKGjYYsQHe5vrdEQ2OGUBOWIQqNNX3bb0e7Ls/zBecAw7blSQNKi4akxGF1anvMVuVfv8ZspdkkongM3jXFiQ0HJJJDv68ejWRpW9iY3XR5F3FsQgYB0UbJguKtO+JuBdxlLQ30PdI0VrNtWL6XbMZN1xwXWTqxwy/A7aXFv/7nc2w/HnPJZW21/2AX0K/1MIdQpOamtZ3LaV5/tu/bSqUaSEF8n2PHN3tpmynYQKtcq0+KZWEnUXmxqvTWotLkV8f6MPlkPrQ5cEmXZ+EcV8jS4v2y9gZvhQ7IUYJ3H78eoqKm0uGlKCnRM9Ac22F961lRKuT9Y+ggsCtlKwU3eDuKLNJ2rdAQ0oO4OxcvPVguuy9c5m6CepL2g==
|
||
[03-23 13:08:37.416] 计算签名: d3c4aaed9b7bfdb3b7ac17119762e639bcaa3e2a
|
||
[03-23 13:08:37.416] 验证结果: ✅ 通过
|
||
[03-23 13:08:37.416] ✅ 签名验证通过,开始处理消息
|
||
[03-23 13:08:37.416] 📄 开始解析企业微信XML消息
|
||
[03-23 13:08:37.417] 🔒 发现加密消息,开始解密
|
||
[03-23 13:08:37.417] 提取到加密内容
|
||
[03-23 13:08:37.417] ✅ 消息解密成功
|
||
[03-23 13:08:37.417] 解密后内容: <xml><ToUserName><![CDATA[wwa7bb7aec981103b4]]></ToUserName><FromUserName><![CDATA[ZengQingMing]]></FromUserName><CreateTime>1774242517</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[好 像通了]]></Content><MsgId>7620313586460205140</MsgId><AgentID>1000002</AgentID></xml>
|
||
[03-23 13:08:37.417] 发送者: ZengQingMing
|
||
[03-23 13:08:37.417] 消息内容: 好像通了
|
||
[03-23 13:08:37.417] 消息类型: text
|
||
[03-23 13:08:37.418] 📋 获取所有连接信息: 1个连接
|
||
[03-23 13:08:37.418] - 连接: 26dd6cb5-c305-421d-a8a3-753d0455b1c6 (连接时长: 18.8562652s)
|
||
[03-23 13:08:37.418] 📤 准备发送回复消息给用户: ZengQingMing
|
||
[03-23 13:08:37.418] ✅ 已开始发送回复消息: 思考中...
|
||
[03-23 13:08:37.418] 🔄 开始转发消息到SmartClaw
|
||
[03-23 13:08:37.418] 📤 发送消息到SmartClaw: Object {"data": Object {"content": String("好像通了"), "event": Null, "from_user_name": String("ZengQingMing"), "msg_signature": String("d3c4aaed9b7bfdb3b7ac17119762e639bcaa3e2a"), "msg_type": String("text"), "nonce": String("1774420742"), "raw_body": String("<xml><ToUserName><![CDATA[wwa7bb7aec981103b4]]></ToUserName><Encrypt><![CDATA[sTK12sXLTGbDIHop8a/0+8lehw6CBjCdfXBdR1DwpyFWmt8fttKjChwIzocwgWXaPDPaB68Cs7+MHVg6VINthu4bLHS/lNgKGjYYsQHe5vrdEQ2OGUBOWIQqNNX3bb0e7Ls/zBecAw7blSQNKi4akxGF1anvMVuVfv8ZspdkkongM3jXFiQ0HJJJDv68ejWRpW9iY3XR5F3FsQgYB0UbJguKtO+JuBdxlLQ30PdI0VrNtWL6XbMZN1xwXWTqxwy/A7aXFv/7nc2w/HnPJZW21/2AX0K/1MIdQpOamtZ3LaV5/tu/bSqUaSEF8n2PHN3tpmynYQKtcq0+KZWEnUXmxqvTWotLkV8f6MPlkPrQ5cEmXZ+EcV8jS4v2y9gZvhQ7IUYJ3H78eoqKm0uGlKCnRM9Ac22F961lRKuT9Y+ggsCtlKwU3eDuKLNJ2rdAQ0oO4OxcvPVguuy9c5m6CepL2g==]]></Encrypt><AgentID><![CDATA[1000002]]></AgentID></xml>"), "timestamp": String("1774242517")}, "type": String("wechat_message")}
|
||
[03-23 13:08:37.418] ✅ 企业微信消息处理完成,返回 success
|
||
[03-23 13:08:37.419] 📤 开始发送企业微信消息
|
||
[03-23 13:08:37.420] 📋 获取所有连接信息: 1个连接
|
||
[03-23 13:08:37.420] - 连接: 26dd6cb5-c305-421d-a8a3-753d0455b1c6 (连接时长: 18.858536s)
|
||
[03-23 13:08:37.420] 📢 WebSocket连接池广播消息到 1 个SmartClaw连接
|
||
[03-23 13:08:37.420] ✅ 发送消息到SmartClaw连接: 26dd6cb5-c305-421d-a8a3-753d0455b1c6
|
||
[03-23 13:08:37.421] ✅ 消息已成功转发到SmartClaw
|
||
[03-23 13:08:37.432] 📨 收到消息: {"data":{"content":"我收到了你的消息,正在处理...","from_user_name":"ZengQingMing","msg_type":"text","timestamp":1774242517},"type":"wechat_message_response"}
|
||
[03-23 13:08:37.438] 📱 收到SmartClaw的微信消息回复
|
||
[03-23 13:08:37.438] 回复发送者: ZengQingMing
|
||
[03-23 13:08:37.438] 回复内容: 我收到了你的消息,正在处理...
|
||
[03-23 13:08:37.438] 📤 开始发送企业微信消息
|
||
[03-23 13:08:37.756] 获取到访问令牌: mUca6bQOJQ3fPnLdoZU9__QOLXUnBU9amY9yl-y1QJCb3oumKzRhKS_poGcXkOzaA58q221dGtVGISkQANsamvXYpM-q5bCQs-ok_WpzqZwBCiBuiVkZpzyQoBxPE_OKUCLvMKQW0Rx381LOBMK8G34ngBvUodnWo9hlvosPHe48qLpunLdQJjXtekpJe0HHOaAAoWfWWJLY1G60IMPIvA
|
||
[03-23 13:08:37.811] 获取到访问令牌: mUca6bQOJQ3fPnLdoZU9__QOLXUnBU9amY9yl-y1QJCb3oumKzRhKS_poGcXkOzaA58q221dGtVGISkQANsamvXYpM-q5bCQs-ok_WpzqZwBCiBuiVkZpzyQoBxPE_OKUCLvMKQW0Rx381LOBMK8G34ngBvUodnWo9hlvosPHe48qLpunLdQJjXtekpJe0HHOaAAoWfWWJLY1G60IMPIvA
|
||
[03-23 13:08:38.187] ✅ 消息发送成功
|
||
[03-23 13:08:38.211] ✅ 消息发送成功
|
||
[03-23 13:08:38.211] ✅ 企业微信回复消息发送成功
|
||
[03-23 13:08:48.436] 📋 获取所有连接信息: 1个连接
|
||
[03-23 13:08:48.436] - 连接: 26dd6cb5-c305-421d-a8a3-753d0455b1c6 (连接时长: 29.8742601s)
|
||
🔍 测试WebSocket连接 - 发现 1 个连接
|
||
📤 准备向连接 26dd6cb5-c305-421d-a8a3-753d0455b1c6 发送测试消息
|
||
✅ 模拟发送测试消息: {"message":"连接健康检查","timestamp":1774242528,"type":"health_check"}
|
||
🧪 测试WebSocketConnection的send方法
|
||
📤 send方法测试结果: {"connection_id":"26dd6cb5-c305-421d-a8a3-753d0455b1c6","test_message":"这是send方法的测试消息","type":"test_send"}
|
||
🧪 测试WebSocketConnection的send_and_wait方法
|
||
⏱️ send_and_wait方法测试结果: {"connection_id":"26dd6cb5-c305-421d-a8a3-753d0455b1c6","request":"这是send_and_wait方法的测试请求","response":"模拟响应数据","timeout":5000,"type":"test_send_and_wait"}
|
||
[03-23 13:08:48.572] 📨 收到消息: {"service":"smartclaw","timestamp":1774242528,"type":"heartbeat"}
|
||
[03-23 13:08:48.572] 💓 收到心跳消息
|
||
[03-23 13:08:52.293] 📨 收到消息: {"service":"smartclaw","timestamp":1774242532,"type":"heartbeat"}
|
||
[03-23 13:08:52.293] 💓 收到心跳消息 |