新发雷盛西瓜系统

账号绑定

小程序账号与微信身份绑定流程

账号绑定

一、需求概述

1.1 目标

为系统用户建立账号与微信身份之间的关联通道,以实现通过微信公众号向指定用户发送业务通知(如对账完成、状态变更)。本方案的核心是**"自动绑定OpenID,授权获取头像昵称"**,旨在简化流程,提升用户体验。

1.2 核心原则

  1. 静默绑定OpenID:用户通过账号密码登录小程序时,系统自动获取并绑定其微信OpenID,无感知、无额外操作
  2. 授权获取头像与昵称:仅在需要完善或展示用户信息时(如个人中心),引导用户授权获取微信头像和昵称
  3. 关注公众号是消息接收的前提:绑定后,系统需引导用户关注服务号,否则无法成功接收模板消息
  4. 超级管理员例外:系统唯一的超级管理员账号不参与任何微信绑定流程

二、核心流程与规则

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 --> J

2.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 并传至后端
  • 后端用 codeOpenID,执行自动绑定逻辑,并将绑定结果及是否需要"身份冲突警示"返回前端

5.2 获取用户信息接口 (/api/user/profile)

  • 返回字段需包含:isSuperAdminwechatInfo(含 hasBound, nickname, avatar, hasSubscribed

5.3 同步微信信息接口 (/api/user/sync-wechat-info)

  • 由前端在用户授权后调用,传递 encryptedDataiv,用于解密并保存头像昵称

六、非功能性要求

项目要求
性能静默绑定流程不应影响正常登录速度
安全性OpenID绑定过程需保证传输安全;解除绑定需有管理员权限或二次确认
可追溯性所有自动绑定、授权同步、消息发送失败事件均需记录日志

文档版本:精简版 来源文档:小程序账号绑定微信用户身份流程.md