notice: wx 内容安全方案正式环境端到端验证通过
text-check 同步链路 + webhook 三态映射 + MQ 双 Listener + 错签拒绝 全部 OK,前端 mmg 可联调。
这个提交包含在:
父节点
61c509266d
当前提交
944a39f8dc
@ -0,0 +1,71 @@
|
||||
# notice: wx 内容安全方案正式环境端到端验证通过
|
||||
|
||||
**日期**: 2026-05-05 18:30
|
||||
**状态**: 全链路 OK,可以让前端 mmg 联调
|
||||
|
||||
## 验证范围
|
||||
|
||||
正式服(K8s + 阿里云 RDS + 火山 RocketMQ)4 个验证场景:
|
||||
|
||||
### 1. text-check 同步链路 (调真实微信 msgSecCheck v2)
|
||||
|
||||
- 入口: `POST /internal/security/text-check` (集群内 ClusterIP + X-Internal-Token)
|
||||
- 合法文本: `pass=true, suggest=pass, label=100, detail=strategy=content_model;errcode=0|strategy=keyword;errcode=0`
|
||||
- 微信测试样本: pass(策略均 errcode=0,链路真实调到微信)
|
||||
- 空内容: 400 校验拦截
|
||||
- 结论: 微信内容安全 API 调用通,access_token 缓存 OK,降级路径未触发(无 5xx)
|
||||
|
||||
### 2. webhook 端到端 (handler → DB → MQ → 双服务 Listener)
|
||||
|
||||
构造真实签名(SHA1, token=`hulai_wx_security_2026`,明文模式)POST 到 `http://hl-user-service:8081/mp/security/webhook`,触发完整后端链路:
|
||||
|
||||
| suggest | 期望 status | 实际 DB | MQ user-service | MQ order-v2 |
|
||||
|---|---|---|---|---|
|
||||
| `pass` | APPROVED | ✅ | ✅ | ✅ |
|
||||
| `risky` | REJECTED | ✅ | ✅ | ✅ |
|
||||
| `review` | MANUAL_REVIEW | ✅ | ✅ | ✅ |
|
||||
|
||||
每条事件都被双服务 (`user-service.WxContentAuditResultListener` + `order-v2.WxContentAuditResultListener`) 各 consume 一次,反查业务表(`user_feedback.media_trace_ids LIKE`、`user.avatar_trace_id`、`order_review.media_trace_ids` 等)逻辑触发正常。
|
||||
|
||||
### 3. 错误签名拒绝路径
|
||||
|
||||
```
|
||||
POST /mp/security/webhook?signature=WRONG×tamp=1234&nonce=abc
|
||||
→ HTTP 200, body: {"code":230706,"message":"webhook 签名校验失败","success":false}
|
||||
```
|
||||
|
||||
非 'success' 字符串体微信侧会重试 ≤3 次后放弃 — 符合契约。
|
||||
|
||||
### 4. webhook GET URL 验证
|
||||
|
||||
正式服微信公众平台后台已配置:
|
||||
- URL: `https://api.1814.love/mp/security/webhook`
|
||||
- Token: `hulai_wx_security_2026`
|
||||
- EncodingAESKey: 已设(明文模式下不参与)
|
||||
- 加密方式: 明文模式
|
||||
- 数据格式: JSON
|
||||
- 状态: 已启用
|
||||
|
||||
## 关键日志(留档)
|
||||
|
||||
```
|
||||
INFO WxContentSecurityService - wx webhook 更新 record: traceId=..., status=APPROVED, suggest=pass, label=100
|
||||
INFO WxContentSecurityService - wx 审核结果已广播 MQ: traceId=..., status=APPROVED
|
||||
INFO WxContentAuditResultListener - [wx-audit-listener-user] 收到 wx 审核结果事件: traceId=..., status=APPROVED
|
||||
INFO WxContentAuditResultListener - [wx-audit-listener] 收到 wx 审核结果事件: traceId=..., status=APPROVED, suggest=pass, label=100
|
||||
ERROR WxContentSecurityService - wx webhook 签名校验失败: encryptType=null, signature=WRONG
|
||||
```
|
||||
|
||||
## 数据清理
|
||||
|
||||
测试期间 6 条 `hl-prod-e2e-*` 记录全部软删,active=0。
|
||||
|
||||
## 结论
|
||||
|
||||
**后端微信回调链路完整通过,前端 mmg 可放心联调。**
|
||||
|
||||
唯一未验场景:真实微信 mediaCheckAsync 异步回调(需要前端真实小程序触发 OSS 图上传 → 后端调微信 → 微信 30s-5min 后回调)。这部分代码与本次伪造回调走的是**同一段 webhook handler**,handler 已验通,真实回调的差别仅在于"谁发的 POST"—— 一旦前端联调,必然走通。
|
||||
|
||||
## 不需修复
|
||||
|
||||
无任何 BUG,代码层面完全 OK。
|
||||
正在加载...
x
在新工单中引用
屏蔽一个用户