# Phase 15 Completion Report ## Status ✅ Completed ## Implemented ### P15-T01 ~ P15-T08: 签到核心 - [x] `CheckinService` — Token生成/扫码签到/手工签到/签到统计 - [x] `CheckinController` — 4个API端点 - [x] HMAC-SHA256 签名Token(不含敏感明文) - [x] Redis缓存防重放(Token单次使用) - [x] Token过期检查(默认30分钟) - [x] 重复签到幂等处理 - [x] 审计日志记录 ### Miniapp 页面 - [x] U31 签到码页 — Token展示 + 复制 + 刷新 ## Core Invariants 已保护 - ✅ **二维码不含敏感明文** — Token为HMAC签名,不暴露userId/身份证/手机号 - ✅ **Token过期不可用** — 服务端校验时间戳 - ✅ **重复签到幂等** — 已签到用户再次扫码返回成功而非新增记录 - ✅ **仅approved用户可签到** — 未审核通过不能签到 - ✅ **志愿者Scope限制** — 通过Operator权限控制 ## API 端点(4个) POST /activities/{id}/checkin-token(生成签到码) POST /activities/operator/checkin/scan(扫码签到) POST /activities/operator/{id}/checkin/manual(手工签到) GET /activities/operator/{id}/checkin-stats(签到统计) ## Tests - `CheckinServiceTest`: 4 个用例 ## Next Phase Phase 16: 活动反馈与互选(activity_feedback + activity_interests + 双向互选Match)