簡書地址:https://www.jianshu.com/p/b2884a226247
當業務系統產生消息需要通過微信推送給指定的用戶時,首頁需要將業務系統類的用戶和微信賬號建立一個關系。這里采用的是微信網頁授權接口,獲得微信用戶授權后,獲取微信用戶的賬號信息,並與業務系統的用戶進行綁定。
調用微信網頁授權首先要設置回調域名,微信關於回調域名的說明有:
1、在微信公眾號請求用戶網頁授權之前,開發者需要先到公眾平台官網中的“開發 - 接口權限 - 網頁服務 - 網頁帳號 - 網頁授權獲取用戶基本信息”的配置選項中,修改授權回調域名。請注意,這里填寫的是域名(是一個字符串),而不是URL,因此請勿加 http:// 等協議頭;
2、授權回調域名配置規范為全域名,比如需要網頁授權的域名為:www.qq.com,配置以后此域名下面的頁面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以進行OAuth2.0鑒權。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com無法進行OAuth2.0鑒權
3、如果公眾號登錄授權給了第三方開發者來進行管理,則不必做任何設置,由第三方代替公眾號實現網頁授權即可。

由上圖可知,回調域名不支持IP地址、端口號、短鏈域名,域名需通過ICP備案驗證,這給開發過程中的調試帶來了一定的困難,我們的做法是使用在系統主域名建立一個二級域名,然后在公網服務器上使用nginx做了一個代理,將請求轉發至公司內網,在公司內網的防火牆上設置了端口的轉發,然后就可以在本地進行開發調試了。
微信網頁授權流程主要有4步:
1、引導用戶進入授權頁面同意授權,獲取code。
2、通過code換取網頁授權access_token(與基礎支持中的access_token不同)。
3、如果需要,開發者可以刷新網頁授權access_token,避免過期。
4、通過網頁授權access_token和openid獲取用戶基本信息(支持UnionID機制)。
微信網頁授權的接口在微信的官方幫助文檔微信網頁授權中有詳細的說明,就不再詳述,本文主要說明在開發過程中對一些問題的處理和注意項。
- 在第一步“引導用戶進入授權頁面同意授權,獲取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),用戶使用微信掃描二維碼,然后就打開了鏈接。 - 在
redirect_uri(授權后重定向的回調鏈接地址)中,我們生成了一個隨機的用戶token放在回調的url中,在微信授權成功后重定向回來時,通過識別url中的用戶token,進而識別出是哪個用戶。 - 在用戶查看二維碼的同時,我們從用戶pc瀏覽器使用singalr在pc瀏覽器與服務器之間建立了一個websock通道,在獲取用戶信息后,通過此通道告訴還在pc瀏覽器上的用戶微信掃碼成功或失敗。
- 考慮到安全性問題,用戶的token以及前台二維碼的時效性均做了時間限制,超時后用戶需要刷新重新生成二維碼。
- 在微信網頁授權接口中獲取到的用戶微信賬號信息並未標明該微信用戶是否關注了我們的微信公眾號,此時需要根據獲取到的用戶id調用另外的獲取用戶基本信息(UnionID機制)來獲取用戶信息,此接口返回的用戶信息中有
subscribe字段,該字段為1時,說明用戶已關注我們的微信公眾號。 - 如果用戶未關注微信公眾號,則在用戶使用微信掃碼時,將公眾號的二維碼返回給用戶微信瀏覽器,用戶可以長按二維碼識別后關注公眾號。注意:此步驟在網上有其他人實現點擊按鈕進入微信公眾號主頁進而關注公眾號的功能,此方式在微信中,如果用戶首次關注微信公眾號,按鈕不能正常顯示,所以使用二維碼替代了按鈕。
