hl-api-changelog/changelogs/2026-05/05_feat_wx-security_phase2a.md

3.9 KiB

feat(wx-security): Phase 2A UGC 接入 + 公开列表过滤 + MQ Consumer

PR: #1661 Issue: #1660 合并: 2026-05-05

让 Phase 1 (#1659) 基础设施真正落地业务,覆盖契约 §3-§5。

UGC API body 字段新增 mediaTraceIds: string[]

前端调 POST /mp/security/media-check 拿到 traceId 后,在以下 5 个业务 API body 中传 traceId 数组:

API 业务表 字段
POST /mp/review/create order_review media_trace_ids
POST /mp/complaint/create order_complaint media_trace_ids
POST /mp/order/{}/refund refund_application media_trace_ids
POST /mp/order/.../appeal /direct-appeal refund_application media_trace_ids
POST /mp/common/feedback user_feedback (V20260505_003 增量 SQL) media_trace_ids

公开列表强制 audit_status='APPROVED' 过滤

8 个 Mapper 公开方法叠加 wx 机审过滤:

  • selectTargetApprovedPage / selectAllReviewsPage / selectFeaturedReviews / selectTargetsApprovedPage / selectSearchPage
  • selectTopRatedByProduct / selectTopLikedByProduct / selectGoodWithImageByProduct / selectCustomizerReviewsPage

/mp/review/my 私有列表过滤;MpReviewVOauditStatus 字段供前端展示状态条文案:

  • PENDING → "审核中,通过后展示"
  • APPROVED → 无提示
  • MANUAL_REVIEW → "审核中,预计 24h 内"
  • REJECTED → "内容未通过审核"

MQ Consumer 双服务订阅 wx-content-audit-result

异步审核结果广播到 order-v2 + user-service,各自按 trace_id 反查更新业务表 audit_status

order-v2 反查 review/complaint/refund 三表:

  • 通过 WxSecurityFeignClient 跨 schema 调 user-service GET /internal/security/trace-status≤50 batch拿其他 trace 状态
  • WxAuditStatusResolver 聚合:任一 REJECTED→REJECTED / 任一 MANUAL→MANUAL / 全 APPROVED→APPROVED / 否则维持 PENDING
  • REJECTED 联动review status=REJECTED + 业务隐藏;complaint status=WITHDRAWN + 软删 deletedAt;refund 仅更新 audit_status

user-service 反查 user_feedback + user.avatar_trace_id

  • avatar REJECTED 时重置为 wechat.miniapp.default-avatar-url 配置项

跨服务接口 (前端不用关心,内部调用)

  • WxSecurityFeignClient (hl-common-feign) + Fallback (返空 List 不阻塞业务)
  • GET /internal/security/trace-status?traceIds=t1,t2,... user-service 暴露
  • POST /internal/mp/feedback mp-service 透传 feedback 到 user-service 落库

跨服务统一常量

WxAuditStatusConstants (hl-common-core) PENDING/APPROVED/MANUAL_REVIEW/REJECTED,替换 17+ 散落字面量。

前端契约要点 (mmg)

  • 评价/投诉/退款/申诉/反馈 5 个业务 API body 加 mediaTraceIds: string[] 字段(前端先调 /mp/security/media-check 拿 traceId 数组)
  • 评价响应 VO 加 auditStatus 字段(私有列表展示用)
  • 公开列表(产品评价、首页精选、定制师评价、旅行相册)已自动过滤未审核内容

Phase 2 剩余范围(独立工单跟进)

  • Phase 2B评价举报子系统POST /mp/review/report + 阈值 3/10
  • Phase 2C出行人三层兜底异步审 + 选用挡 REJECTED + 本地正则)
  • Phase 2Dhl-admin 后台(复审队列 + 命中日志 + 白名单 + 举报队列 + 头像违规处置)
  • Phase 2EAES 加密回调模式Phase 1 仅明文)

待办(无新增,与 Phase 1 共用)

  • 微信公众平台开通「内容安全」接口权限
  • 配置回调 URL + Token明文模式
  • nacos wechat.miniapp.webhook.token + wechat.miniapp.default-avatar-url新加,REJECTED 头像重置目标 URL,未配置则只更新 audit_status 不动 avatar

测试

  • mvn compile 全工程 BUILD SUCCESS
  • mvn test 145/145 全绿user-service 44 + order-v2 101
  • CR 通过2 P0 + 3 P1 全修(详见 PR body
  • 留 cleanup PRP1-4 / P1-5 / 6 P2