本人從事互聯網項目java開發五年,會java,,python,nodejs,前端,爬蟲等技術,對發票項目,營銷活動,微信業務(公共號,支付,小程序,第三開放平臺)很精通。本人也正在努力去實現一套微信第三開放平臺( JWechat),到時會開源出來。
QQ技術交流羣:131831533 本文章來源於我的站點: 浩瀚飛龍
最近整合設計一個第三方受權的項目,就將流程記錄下來了,話很少說上乾貨。前端
1.微信網頁受權設置(微信開放平臺)java
ps:爲了開發方便,建議你們建立多個環境應用,不用改動太頻繁!node
2.微信公共號網頁受權(微信公共號平臺)python
找到 公衆號設置---》網頁受權域名進行設置git
ps: 這兩個平臺是不一樣系統,微信開發平臺是解決微信與各類應用交互的平臺,而微信公共號,只能在微信中使用。github
微信受權登陸流程sql
微信公共號網頁受權數據庫
從上面兩個圖能夠看到兩個流程圖,先獲取的是openId,可是不一樣appId對應不一樣openId,不能保證最終惟一性,可是最終unionId是能保證用戶惟一的,這樣就能夠低耦合去整合咱們現有的用戶中心。這樣就能夠設計以下圖:小程序
ps:1.微信網頁受權登陸若是沒有帳戶先一個臨時用戶,在系統內設計一個設計一個綁定老用戶的功能。若是有能查詢到用戶,直接作登陸獲取該用戶信息 2.微信公衆號進入能夠設置受權方式爲snsapi_userinfo,先經過openId去查詢用戶,沒有再經過unionId去查用戶,這時候都沒有直接跳到登陸頁面進行登陸。登陸完成綁定openId與userCode的關係,綁定userCode與unionId關係。api
-- 用戶信息表
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='微信受權用戶惟一標誌';
複製代碼
經過對這些表操做就能夠完成總體微信受權流程了,具體功能實現,只是寫代碼的問題,這裏就不公開代碼了!
後話:這裏有一個容易出問題的地方就是老用戶被重複綁定。頁面受權在作這個功能時,若是老用戶重複綁定時,能夠跳到重複綁定提示的異常頁面。而微信公共號頁面受權跳到登陸頁面,這時候帳號若是已經被其餘帳號綁定時,建議作成能夠作相似踢出功能,直接將這個老用戶綁定新帳號。