微信公衆號開發(二)--掃碼綁定微信帳號

簡書地址:https://www.jianshu.com/p/b2884a226247html

當業務系統產生消息須要經過微信推送給指定的用戶時,首頁須要將業務系統類的用戶和微信帳號創建一個關係。這裏採用的是微信網頁受權接口,得到微信用戶受權後,獲取微信用戶的帳號信息,並與業務系統的用戶進行綁定。nginx

調用微信網頁受權首先要設置回調域名,微信關於回調域名的說明有:
一、在微信公衆號請求用戶網頁受權以前,開發者須要先到公衆平臺官網中的「開發 - 接口權限 - 網頁服務 - 網頁賬號 - 網頁受權獲取用戶基本信息」的配置選項中,修改受權回調域名。請注意,這裏填寫的是域名(是一個字符串),而不是URL,所以請勿加 http:// 等協議頭;
二、受權回調域名配置規範爲全域名,好比須要網頁受權的域名爲:www.qq.com,配置之後此域名下面的頁面http://www.qq.com/music.htmlhttp://www.qq.com/login.html 均可以進行OAuth2.0鑑權。但http://pay.qq.comhttp://music.qq.comhttp://qq.com沒法進行OAuth2.0鑑權
三、若是公衆號登陸受權給了第三方開發者來進行管理,則沒必要作任何設置,由第三方代替公衆號實現網頁受權便可。
回調域名要求
由上圖可知,回調域名不支持IP地址、端口號、短鏈域名,域名需經過ICP備案驗證,這給開發過程當中的調試帶來了必定的困難,咱們的作法是使用在系統主域名創建一個二級域名,而後在公網服務器上使用nginx作了一個代理,將請求轉發至公司內網,在公司內網的防火牆上設置了端口的轉發,而後就能夠在本地進行開發調試了。web

微信網頁受權流程主要有4步:
一、引導用戶進入受權頁面贊成受權,獲取code。
二、經過code換取網頁受權access_token(與基礎支持中的access_token不一樣)。
三、若是須要,開發者能夠刷新網頁受權access_token,避免過時。
四、經過網頁受權access_token和openid獲取用戶基本信息(支持UnionID機制)。瀏覽器

微信網頁受權的接口在微信的官方幫助文檔微信網頁受權中有詳細的說明,就再也不詳述,本文主要說明在開發過程當中對一些問題的處理和注意項。安全

  1. 在第一步「引導用戶進入受權頁面贊成受權,獲取code」的過程當中,獲取用戶受權須要引導用戶在手機微信上打開連接https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect。通常狀況下,業務系統的用戶都是經過pc瀏覽器訪問業務系統,因而在此步,咱們將上述連接生成二維碼圖片(QrCode.Net),用戶使用微信掃描二維碼,而後就打開了連接。
  2. redirect_uri(受權後重定向的回調連接地址)中,咱們生成了一個隨機的用戶token放在回調的url中,在微信受權成功後重定向回來時,經過識別url中的用戶token,進而識別出是哪一個用戶。
  3. 在用戶查看二維碼的同時,咱們從用戶pc瀏覽器使用singalr在pc瀏覽器與服務器之間創建了一個websock通道,在獲取用戶信息後,經過此通道告訴還在pc瀏覽器上的用戶微信掃碼成功或失敗。
  4. 考慮到安全性問題,用戶的token以及前臺二維碼的時效性均作了時間限制,超時後用戶須要刷新從新生成二維碼。
  5. 在微信網頁受權接口中獲取到的用戶微信帳號信息並未標明該微信用戶是否關注了咱們的微信公衆號,此時須要根據獲取到的用戶id調用另外的獲取用戶基本信息(UnionID機制)來獲取用戶信息,此接口返回的用戶信息中有subscribe字段,該字段爲1時,說明用戶已關注咱們的微信公衆號。
  6. 若是用戶未關注微信公衆號,則在用戶使用微信掃碼時,將公衆號的二維碼返回給用戶微信瀏覽器,用戶能夠長按二維碼識別後關注公衆號。注意:此步驟在網上有其餘人實現點擊按鈕進入微信公衆號主頁進而關注公衆號的功能,此方式在微信中,若是用戶首次關注微信公衆號,按鈕不能正常顯示,因此使用二維碼替代了按鈕。
相關文章
相關標籤/搜索