您的位置:首页 > 移动开发 > 微信开发

用户中心功能设计快速整合第三方微信或微信公共号授权

2018-01-16 00:00 316 查看
最近整合设计一个第三方授权的项目,就将流程记录下来了,话不多说上干货。

微信相关设置

1.微信网页授权设置(微信开放平台)



ps:为了开发方便,建议大家创建多个环境应用,不用改动太频繁!

2.微信公共号网页授权(微信公共号平台)

找到 公众号设置---》网页授权域名进行设置





ps: 这两个平台是不同系统,微信开发平台是解决微信与各种应用交互的平台,而微信公共号,只能在微信中使用。

流程设计

微信授权登录流程



微信公共号网页授权



从上面两个图可以看到两个流程图,先获取的是openId,但是不同appId对应不同openId,不能保证最终唯一性,但是最终unionId是能保证用户唯一的,这样就可以低耦合去整合我们现有的用户中心。这样就可以设计如下图:



ps:1.微信网页授权登录如果没有账户先一个临时用户,在系统内设计一个设计一个绑定老用户的功能。如果有能查询到用户,直接做登录获取该用户信息 2.微信公众号进入可以设置授权方式为snsapi_userinfo,先通过openId去查询用户,没有再通过unionId去查用户,这时候都没有直接跳到登录页面进行登录。登录完成绑定openId与userCode的关系,绑定userCode与unionId关系。

数据库设计

-- 用户信息表
CREATE TABLE `sys_user` (
`userCode` varchar(20) NOT NULL COMMENT '用户编码',
`userName` varchar(50) DEFAULT NULL COMMENT '用户名',
`userFullName` varchar(50) DEFAULT NULL COMMENT '姓名',
`password` varchar(200) DEFAULT NULL COMMENT '密码',
`sex` char(1) DEFAULT NULL COMMENT '性别:0.空、1.男、2.女',
`mobilePhone` varchar(50) DEFAULT NULL COMMENT '手机',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
`company` varchar(100) DEFAULT NULL COMMENT '工作单位',
`address` varchar(100) DEFAULT NULL COMMENT '地址',
`isSuperAdmin` char(1) NOT NULL COMMENT '是否管理员:Y 是,N 否',
`avatarImageUrl` varchar(200) DEFAULT NULL COMMENT '头像图片地址',
`lastLoginDate` datetime DEFAULT NULL COMMENT '最后登录日期',
`lastLoginIp` varchar(20) DEFAULT NULL COMMENT '最后登录ip',
`loginCount` int(11) DEFAULT NULL COMMENT '登录次数',
`enabled` char(1) NOT NULL COMMENT '是否有效:Y.有效、N.无效',
`inputUserCode` varchar(20) NOT NULL COMMENT '录入人',
`inputTime` datetime NOT NULL COMMENT '录入时间',
`updateUserCode` varchar(20) DEFAULT NULL COMMENT '修改人',
`updateTime` datetime DEFAULT NULL COMMENT '修改时间'
PRIMARY KEY (`userCode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户信息';

-- 第三方授权表(支持多种渠道,微信.qq,微博等)
CREATE TABLE `sys_user_oauth` (
`openId` varchar(100) NOT NULL COMMENT 'openid',
`channel` varchar(20) NOT NULL COMMENT '渠道',
`userCode` varchar(20) NOT NULL COMMENT '用户编码',
`userName` varchar(50) NOT NULL,
`inputTime` datetime NOT NULL COMMENT '录入时间',
`updateTime` datetime DEFAULT NULL COMMENT '修改时间',
`createUser` char(1) NOT NULL DEFAULT 'N' COMMENT '创建用户',
PRIMARY KEY (`openId`,`channel`),
KEY `userCode` (`userCode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户登陆授权';

-- 临时用户表
CREATE TABLE `sys_user_temp` (
`userCode` varchar(20) NOT NULL COMMENT '用户编码',
`oldUserCode` varchar(20) DEFAULT NULL COMMENT '旧用户',
`inputTime` datetime NOT NULL COMMENT '录入时间',
`updateTime` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`userCode`),
KEY `userCode` (`userCode`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='临时用户';

-- 微信公共号授权(支持多公众号)
CREATE TABLE `sys_user_weixin` (
`weixinId` varchar(20) NOT NULL COMMENT '绑定微信编码',
`openId` varchar(100) DEFAULT NULL COMMENT '微信openid',
`bindTime` datetime DEFAULT NULL COMMENT '绑定时间',
`appId` varchar(100) DEFAULT NULL COMMENT '公共号Id',
`inputTime` datetime DEFAULT NULL COMMENT '录入时间',
`inputUserCode` varchar(50) DEFAULT NULL COMMENT '录入时间',
`updateTime` datetime DEFAULT NULL COMMENT '修改时间',
`updateUserCode` varchar(50) DEFAULT NULL COMMENT '修改人',
`userCode` varchar(20) NOT NULL COMMENT '用户编码',
PRIMARY KEY (`weixinId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户微信公共号';

-- 微信授权用户唯一标志
CREATE TABLE `sys_user_oauth_union` (
`userCode` varchar(32) NOT NULL COMMENT '用户Code',
`unionId` varchar(64) NOT NULL COMMENT '微信唯一标志',
`inputTime` datetime DEFAULT NULL COMMENT '录入时间',
`inputCode` varchar(32) DEFAULT NULL COMMENT '录入人',
PRIMARY KEY (`userCode`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='微信授权用户唯一标志';

通过对这些表操作就可以完成整体微信授权流程了,具体功能实现,只是写代码的问题,这里就不公开代码了!

后话:这里有一个容易出问题的地方就是老用户被重复绑定。页面授权在做这个功能时,如果老用户重复绑定时,可以跳到重复绑定提示的异常页面。而微信公共号页面授权跳到登录页面,这时候账号如果已经被其他账号绑定时,建议做成可以做类似踢出功能,直接将这个老用户绑定新账号。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐