hl-api-changelog/changelogs/2026-05/05_notice_wx-security-real-callback-verified.md
API Changelog Bot e94ce62e2d notice: wx 内容安全 — 真实微信 mediaCheckAsync 回调端到端验证通过
自己调微信 API 拿 trace_id, 等微信真的 POST 到 api.1814.love/mp/security/webhook, ~2s 内 record APPROVED + MQ 广播 + 双 Listener 收到。
2026-05-05 18:42:29 +08:00

3.3 KiB

notice: wx 内容安全方案 — 真实微信 mediaCheckAsync 异步回调端到端验证通过

日期: 2026-05-05 18:35 关联: 衔接 05_notice_wx-security-prod-e2e-verified.md(伪造签名验 handler 内部链路)

验证手法

不依赖前端联调,我自己在 Node1 直接调微信 mediaCheckAsync API,让微信真的发回调到我们的 webhook URL。

完整流程

我(Node1) → 微信 cgi-bin/token API → 拿 access_token
我(Node1) → 微信 wxa/media_check_async API → 拿 trace_id="69f9c7ef-32f7c85c-5d87f592"
我(Node1) → 阿里云 RDS INSERT wx_media_check_record(PENDING)
微信 → 异步检测图片 (~30 秒)
微信 → POST https://api.1814.love/mp/security/webhook?signature=&timestamp=&nonce= + JSON body
gateway → user-service:8081/mp/security/webhook
handler → 验签通过(明文模式 SHA1)
handler → 解析 JSON 拿 trace_id/suggest/label
handler → UPDATE wx_media_check_record SET status='APPROVED', suggest='pass', label=100, callback_at=NOW()
handler → 推 MQ topic=HL_WX_CONTENT_AUDIT_RESULT_TOPIC
user-service Listener → 收到 MQ → 反查业务表
order-v2 Listener → 收到 MQ → 反查业务表

时间线证据

18:34:xx  Node1 调微信 mediaCheckAsync → 微信返回 errcode=0, trace_id=69f9c7ef-32f7c85c-5d87f592
18:35:30  Node1 INSERT wx_media_check_record(trace_id, PENDING) 到正式 RDS
18:35:32  微信公网 POST 到 api.1814.love/mp/security/webhook (~30s 延迟)
18:35:32.390  user-service "wx webhook 更新 record: status=APPROVED, suggest=pass, label=100"
18:35:32.392  user-service "wx 审核结果已广播 MQ"
18:35:32.397  user-service Listener 收到
              order-v2 Listener 收到 (跨服务)

callback_at = 2026-05-05 18:35:32 与 user-service 日志时间戳完全一致 — 这是微信真实公网回调,不是伪造。

输入图片

默认头像 OSS URL: https://hlgl-test.oss-cn-beijing.aliyuncs.com/test/material/2026/05/05/7558036ffa6d59a26013cf36248ff0a7.png (用户提供,合法图片)

微信判定:suggest=pass, label=100(正常图片)。

与上一份验证的关系

维度 上次伪造签名验证 本次真实微信回调
调微信 API 仅本地构造 真实调 mediaCheckAsync
webhook 验签 本地用同 token 自签 微信用 token 真签
webhook handler 已验 已验
DB UPDATE
MQ 广播
跨服务 Listener
公网 → 网关 → user-service 路径 走 ClusterIP 走 api.1814.love + hl-gateway
微信 IP 白名单 N/A (微信真实出口 IP 能进网关)
webhook URL 配置正确性 N/A (微信真的找到了我们)
token 配对 N/A (微信用 nacos 配的 hulai_wx_security_2026 算签名,我们能验过)
30s 延迟在线 SLA N/A 测得实际 ~2s,远低于 5min 上限

两份一起把 wx 内容安全的所有路径都覆盖了。

数据清理

trace_id=69f9c7ef-32f7c85c-5d87f592 软删,active=0。

结论

  • 后端代码
  • 网关白名单
  • nacos 配置(token/appid/secret)
  • 微信公众平台 webhook URL 配置
  • 微信公网 → 公网回调路径
  • DB UPDATE + MQ 广播 + 跨服务 Listener

前端 mmg 接入后零阻力,直接联调即可。