微信公共號系列---快速整合微信多端頁面受權之單點登陸

本人從事互聯網項目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='微信受權用戶惟一標誌';


複製代碼

經過對這些表操做就能夠完成總體微信受權流程了,具體功能實現,只是寫代碼的問題,這裏就不公開代碼了!

後話:這裏有一個容易出問題的地方就是老用戶被重複綁定。頁面受權在作這個功能時,若是老用戶重複綁定時,能夠跳到重複綁定提示的異常頁面。而微信公共號頁面受權跳到登陸頁面,這時候帳號若是已經被其餘帳號綁定時,建議作成能夠作相似踢出功能,直接將這個老用戶綁定新帳號。

相關文章
相關標籤/搜索