用户中心功能设计快速整合第三方微信或微信公共号授权
2018-01-16 00:00
316 查看
最近整合设计一个第三方授权的项目,就将流程记录下来了,话不多说上干货。
ps:为了开发方便,建议大家创建多个环境应用,不用改动太频繁!
2.微信公共号网页授权(微信公共号平台)
找到 公众号设置---》网页授权域名进行设置
ps: 这两个平台是不同系统,微信开发平台是解决微信与各种应用交互的平台,而微信公共号,只能在微信中使用。
微信公共号网页授权
从上面两个图可以看到两个流程图,先获取的是openId,但是不同appId对应不同openId,不能保证最终唯一性,但是最终unionId是能保证用户唯一的,这样就可以低耦合去整合我们现有的用户中心。这样就可以设计如下图:
ps:1.微信网页授权登录如果没有账户先一个临时用户,在系统内设计一个设计一个绑定老用户的功能。如果有能查询到用户,直接做登录获取该用户信息 2.微信公众号进入可以设置授权方式为snsapi_userinfo,先通过openId去查询用户,没有再通过unionId去查用户,这时候都没有直接跳到登录页面进行登录。登录完成绑定openId与userCode的关系,绑定userCode与unionId关系。
通过对这些表操作就可以完成整体微信授权流程了,具体功能实现,只是写代码的问题,这里就不公开代码了!
后话:这里有一个容易出问题的地方就是老用户被重复绑定。页面授权在做这个功能时,如果老用户重复绑定时,可以跳到重复绑定提示的异常页面。而微信公共号页面授权跳到登录页面,这时候账号如果已经被其他账号绑定时,建议做成可以做类似踢出功能,直接将这个老用户绑定新账号。
微信相关设置
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='微信授权用户唯一标志';
通过对这些表操作就可以完成整体微信授权流程了,具体功能实现,只是写代码的问题,这里就不公开代码了!
后话:这里有一个容易出问题的地方就是老用户被重复绑定。页面授权在做这个功能时,如果老用户重复绑定时,可以跳到重复绑定提示的异常页面。而微信公共号页面授权跳到登录页面,这时候账号如果已经被其他账号绑定时,建议做成可以做类似踢出功能,直接将这个老用户绑定新账号。
相关文章推荐
- Android仿微信通讯录滑动快速定位功能
- 手机wap端开发微信绑定第三方登陆功能
- springmvc+activiti 完美整合- 流程在线设计+代码生成器+UI快速开发库,提高一半的开发效率
- 集成微信第三方登录功能获取微信用户信息
- HTTP服务端接口模拟工具-HttpServerMockTool 1 工具功能介绍 这个工具可以通过简单的配置达到快速模拟第三方HTTP服务端接口的作用,替代以前要手写servlet代码再放到to
- [置顶] 在Android中使App快速、简单地支持新浪微博、微信、QQ、facebook等十几个主流社交平台的分享功能
- 电子商务系统的设计与实现(十):DWZ框架与第三方分页组件整合
- Cordova --- 第三方app实现微信登录功能
- 微信开发(3):微信公众号发现金红包功能开发,利用第三方SDK实现(Java)
- QQ/微博/微信第三方网站登录总结整合
- 微信多客服功能与第三方授权客服系统的冲突问题
- SSM对第三方登陆(QQ/微信/Github/微博/开源中国/人人网/豆瓣/百度)进行整合
- springmvc+activiti 完美整合- 流程在线设计+代码生成器+UI快速开发库,提高一半的开发效率
- 设计对浏览器更加友好的网站——整合搜索功能(针对Google Chrome)
- 程序设计,功能设计,数据库设计,第三方支付,web安全
- ionic第三方QQ,微博,微信的登录,分享功能的实现和注意事项
- Android 支付宝支付、微信支付、银联支付 整合第三方支付接入方法(后台订单支付API设计)
- 整合微信小程序的Web API接口层的架构设计
- java微信二次第三方开发,token认证,消息事件接收,图文素材库,自定义菜单等功能