账号绑定
小程序账号与微信身份绑定流程
账号绑定
一、需求概述
1.1 目标
为系统用户建立账号与微信身份之间的关联通道,以实现通过微信公众号向指定用户发送业务通知(如对账完成、状态变更)。本方案的核心是**"自动绑定OpenID,授权获取头像昵称"**,旨在简化流程,提升用户体验。
1.2 核心原则
- 静默绑定OpenID:用户通过账号密码登录小程序时,系统自动获取并绑定其微信OpenID,无感知、无额外操作
- 授权获取头像与昵称:仅在需要完善或展示用户信息时(如个人中心),引导用户授权获取微信头像和昵称
- 关注公众号是消息接收的前提:绑定后,系统需引导用户关注服务号,否则无法成功接收模板消息
- 超级管理员例外:系统唯一的超级管理员账号不参与任何微信绑定流程
二、核心流程与规则
2.1 用户登录与自动绑定主流程
graph TD
A[用户使用账号密码登录小程序] --> B{系统账号鉴定}
B -->|是超级管理员| C[跳过全部微信绑定逻辑,直接进入系统]
B -->|是普通用户| D[静默调用 wx.login 获取 code]
D --> E[后端通过 code 换取 OpenID]
E --> F{检查 OpenID 绑定关系}
F -->|未绑定| G[将当前系统账号与此 OpenID 自动绑定]
F -->|已绑定,且为本账号| H[验证通过,登录成功]
F -->|已绑定,但属于其他账号| I[触发"身份冲突"警示流程]
G --> J[登录成功,进入系统]
H --> J
I --> J2.2 微信头像与昵称授权流程(非强制)
- 触发时机:用户进入个人中心页面时
- 判断逻辑:系统检查该账号是否已保存微信头像和昵称
- 用户界面:
- 若未获取:在个人资料区域友好提示:"完善您的信息?一键同步微信头像和昵称",旁边放置【去同步】按钮
- 若已获取:正常显示已同步的头像和昵称
- 授权操作:用户点击【去同步】后,调用
wx.getUserProfile弹窗请求授权。用户同意后,系统更新资料
2.3 公众号关注引导流程
- 检查时机:在自动绑定OpenID成功后,以及用户进入个人中心时
- 引导逻辑:
- 若检测到该
OpenID未关注公众号,则在个人中心顶部或绑定状态区显示强引导条:"关注公众号,即可接收业务通知",并提供【立即关注】按钮(可跳转或展示二维码) - 若已关注,则无提示
- 若检测到该
- 消息发送前置条件:系统在发送任何模板消息前,必须校验
已绑定OpenID且已关注公众号,否则发送失败并记录日志
三、页面与状态设计
3.1 个人中心 - 微信状态显示区
该区域清晰展示当前账号与微信的绑定及通知状态。
| 状态 | 显示内容 | 用户可操作项 |
|---|---|---|
| 状态1:基础绑定完成 | • 微信状态:已绑定 • 通知状态:公众号未关注,无法接收消息 | 【去关注公众号】 (主按钮) 【同步微信信息】 |
| 状态2:信息已同步,未关注 | • 微信状态:已绑定 (显示微信头像/昵称) • 通知状态:公众号未关注,无法接收消息 | 【去关注公众号】 (主按钮) |
| 状态3:全功能就绪 | • 微信状态:已绑定 (显示微信头像/昵称) • 通知状态:公众号已关注,通知已启用 ✅ | 无 (或提供【重新同步】入口) |
| 状态4:身份冲突警示 | • 警示:当前账号已绑定其他微信用户 • (显示被绑定的微信昵称) • 通知将发往该微信 | 【联系管理员解绑】 |
3.2 异常流程:身份冲突处理
- 触发:用户A的账号已绑定微信A,用户B用账号A密码登录
- 前端处理:登录成功后,在个人中心顶部显示固定警示条,明确告知:
┌─────────────────────────────────────────┐
│ 账号绑定冲突 │
│ 检测到当前账号已绑定其他微信用户: 张伟 │
│ 绑定时间: 2024年1月15日 │
│ │
│ 可能产生的后果: │
│ • 所有系统通知将发送至该微信 │
│ • 您无法通过当前微信接收任何通知 │
│ • 您的操作记录将计入账号所有者名下 │
│ │
│ [退出登录] [继续使用] │
└─────────────────────────────────────────┘四、后台管理需求
4.1 绑定关系管理
- 路径:管理后台 > 用户管理
- 视图:列表展示所有用户的系统账号、绑定的微信OpenID/昵称、是否关注公众号、绑定时间
- 操作:超级管理员有权手动解除任何绑定关系(系统自动解绑后,用户下次登录将重新静默绑定)
4.2 通知发送日志
在消息发送记录中,明确标注每条消息的发送状态(成功/失败),失败原因需包含"用户未绑定"或"用户未关注公众号"。
五、接口逻辑要点(供技术参考)
5.1 登录接口 (/api/auth/login)
- 接收账号密码
- 验证成功后,自动调用微信
wx.login获取code并传至后端 - 后端用
code换OpenID,执行自动绑定逻辑,并将绑定结果及是否需要"身份冲突警示"返回前端
5.2 获取用户信息接口 (/api/user/profile)
- 返回字段需包含:
isSuperAdmin、wechatInfo(含hasBound,nickname,avatar,hasSubscribed)
5.3 同步微信信息接口 (/api/user/sync-wechat-info)
- 由前端在用户授权后调用,传递
encryptedData和iv,用于解密并保存头像昵称
六、非功能性要求
| 项目 | 要求 |
|---|---|
| 性能 | 静默绑定流程不应影响正常登录速度 |
| 安全性 | OpenID绑定过程需保证传输安全;解除绑定需有管理员权限或二次确认 |
| 可追溯性 | 所有自动绑定、授权同步、消息发送失败事件均需记录日志 |
文档版本:精简版 来源文档:小程序账号绑定微信用户身份流程.md