# feat(wx-security): Phase 2E AES 加密回调 + 全 cleanup (final)

**PR**: [#1669](https://git.1814.love:8443/wx/HL/pulls/1669) **Issue**: [#1665](https://git.1814.love:8443/wx/HL/issues/1665) **合并**: 2026-05-05

wx 内容安全方案最后一个 Phase。AES 加密回调实现 + Phase 2A/2B 全部 P2 cleanup。

## AES 加密回调

新建 `WxBizMsgCryptUtil`（user-service.wx.util，与企微 WxCryptUtil 解耦）。`WxContentSecurityService.handleWebhook` AES 分支：验签 → 解密 XML → 解析 trace_id+suggest+label → 走和明文相同的 update + MQ。解密失败抛 BusinessException → GlobalExceptionHandler 转 200+JSON。

公众平台后台支持「明文模式」(Phase 1 默认) / 「兼容模式」 / 「安全模式」三种切换；nacos 配 `wechat.miniapp.webhook.encoding-aes-key` 真值后即可切 AES 模式。

## Phase 2A 6 P2 cleanup

| # | 修复 |
|---|---|
| P2-1 | LIKE 性能 → TODO 注释 |
| P2-2 | WxSecurityFeignClient.batchTraceStatus 改 POST + DTO |
| P2-3 | UserFeedback extends BaseDO + V20260505_009 |
| P2-4 | Listener 三段事务设计 javadoc |
| P2-5 | WxAuditStatusResolver 50 batch 超限 log.warn |

## Phase 2B 6 P2 cleanup

| # | 修复 |
|---|---|
| P2-1 | reviewId @JsonFormat(STRING) + ToStringSerializer |
| P2-2 | SCENE_COMMENT 引枚举 |
| P2-3 | anonymousUserId 单测 |
| P2-4 | OPENID_FETCH_FAILED 错误码（551006）|
| P2-6 | alreadyHidden CAS 防并发再机审 |

## schema 跨 service 同步

- order_complaint schema.sql 同步
- refund_application / order_invoice order_service_v2_init.sql 同步
- user_feedback sql/common_tables.sql 真相源同步

## 测试

- mvn compile 全工程 BUILD SUCCESS
- 173/173 全绿（user 112 + order 61）

## 🎯 wx 内容安全方案全链路闭环

- Phase 1 #1659 基础设施
- Phase 2A #1661 UGC 接入 + 公开列表 + MQ
- Phase 2B #1667 评价举报子系统
- Phase 2C #1666 出行人三层兜底
- Phase 2D #1668 admin 后台 + Phase 2C cleanup
- **Phase 2E #1669 AES 加密 + 全 cleanup**

## 部署注意事项

- V20260505_009 在 hl_user_service schema
- nacos 配 `wechat.miniapp.webhook.encoding-aes-key` 真值后才能切兼容/安全模式
- 微信公众平台后台仍可用明文模式（不强制升级）

## 不在范围（后续工单）

- Phase 2D-B 跨服务复审聚合
- Phase 2D-C user_risk 规则实际应用
- 站内信 SDK 集成
