学校外卖柜的机制是通过手机号后四位进行扫码开柜,但是手机号后四位有相同的现象,因而经常有同学拿错外卖。
点击空白处退出提示
学校外卖柜的机制是通过手机号后四位进行扫码开柜,但是手机号后四位有相同的现象,因而经常有同学拿错外卖。
功能主线:
微信登录 → 拿错上报 → 系统匹配 → 双向确认 → 匿名沟通 → 处理完成
功能模块
1. 微信登录与身份认证
入口与安全凭证
• wx.login 获取 code
• code2Session 换 openid
• Bearer token 缓存、过期重登 2. 外卖拿错上报
用户提交错拿信息
• 手机号后四位 + 柜号 + 格子号
• 可授权订阅消息
• 匹配成功进入详情,否则等待 3. 自动匹配引擎
系统核心判断
• 同柜号、同格子号、尾号一致
• 不同用户且未过期
• 仅唯一候选才自动匹配
4. 我的上报管理
个人记录中心
• 查看柜号、格子号、状态
• open 可取消或生成认领码
• 已匹配可进详情,支持刷新 5. 匹配详情与双向确认
防误匹配机制
• 展示脱敏手机号与柜格信息
• 双方确认后开放留言
• 可拒绝误匹配或标记已处理 6. 匿名留言
隐私沟通
• 双方确认后可发 1–500 字
• 仅显示“我 / 对方”
• 不暴露 openid、完整手机号、微信号
7. 认领码机制
对方未知柜号时补救
• open 记录可生成短期认领码
• 默认 2 小时有效
• 只存哈希,手机号尾号一致才匹配 8. 订阅消息通知
异步提醒
• 匹配成功通知
• 匿名留言提醒
• 模板独立配置,失败不阻塞主流程 9. 帮助与隐私说明
说明与信任建设
• 说明上报流程、匹配规则、通知条件
• 业务页均可进入帮助页
• 手机号 AES-GCM 加密 + HMAC 哈希
设计重点:唯一候选才自动匹配;确认后才开放匿名留言;手机号全程脱敏与加密存储;通知失败不阻塞主流程。
匹配边界:同柜号 + 同格子号 + 手机尾号一致 + 不同用户 + 未过期 隐私边界:不展示完整手机号,不暴露 openid、微信号,认领码不明文落库 流程边界:open 可取消/认领;
技术栈说明:
• 前端框架/平台: 微信小程序原生开发
• 后端:Python,FastAPI,SQLAlchemy,Pydantic,Uvicorn
• 数据存储:SQLite
• 主要依赖库/组件:后端: FastAPI + SQLAlchemy + SQLite,小程序端:原生微信小程序,安全加密:cryptography,部署:Nginx + systemd
项目亮点:
1. 问题定义很具体
不是泛泛做“失物招领”,而是抓住外卖柜误拿的根因:同柜、同格、手机号后四位相同。
影响是:匹配规则简单、直接、解释得清楚,适合校园小范围试运行。
2. 隐私边界做得比较认真
手机号不明文落库,使用 phone_last4 做匹配、phone_hash 做审计/去重准备、phone_encrypted 做 AES-GCM 可逆加密;页面只
展示脱敏手机号。
影响是:即使数据库泄露,风险也比直接存手机号低很多。
3. 快速找回闭环完整
已覆盖:上报、自动匹配、我的上报、取消、认领码、匹配详情、双方确认、误匹配拒绝、匿名留言、标记已处理。
影响是:用户不用默认回到群聊扩散,能在小程序内完成主要流程。
4. 误匹配控制设计合理
多候选人不自动配对;双方确认后才开放匿名留言;任一方拒绝后关闭沟通。
影响是:降低误通知、误打扰和隐私暴露风险。
5. 微信订阅消息接入不是“糊上去”的
匹配通知和留言提醒分成两个模板;后端有 access_token 缓存、发送日志、失败记录、可选重试调度。
影响是:真机调试时能从 notification_logs 查问题,不是靠猜。
6. 登录方案克制
使用 wx.login -> code2




评论