微信中控網頁授權的實現

大家都知道,微信公衆號不同於企業微信(原企業號),一個公衆號只有一個應用,只能配一個服務器地址。另一個不同就是,在刷新access_token時,公衆號的access_token會更新,舊的會失效。因此,信平臺建議使用一箇中控服務器來定時刷新access_token,可以使用內存存儲或持久化到數據庫中。保證在有效時間內,所調用的token相同。

我做了一個微信中控的小應用,將所有公衆號的消息及事件請求接收後,根據消息轉發功能,轉發到不同的業務系統中。由它定時獲取access_token,其它業務系統只有讀取的接口,沒有刷新的功能,這樣保證各個系統在同一時間的access_token都是有效的。

但對於微信網頁授權時,一時找不到思路。後來從網上看了別人的解決思路,試着弄成功了(抱歉時間久遠,已經不知道文章來源是哪了)。這裏把我自己的實現方法分享給大家,大家如果有更好的思路,歡迎交流。

 

 

所謂網頁授權,其實就是用戶在微信瀏覽器中打開頁面時,獲取到當前登錄微信的用戶信息。

對於公衆號而言,每個用戶對應唯一的openId,這是根據某種算法生成的字符串,即便用戶是否關注。

除了openId這最基本的信息以外,還包括暱稱、性別、地區、頭像等信息。

獲取用戶的信息,有這麼幾種方式:

用戶關注某個公衆號後,根據API獲取用戶openId列表,根據openId獲取其它基本信息。

用戶給公衆號發送消息或觸發事件,後臺解析發送者的openId,根據API獲取用戶信息

網頁授權只獲取用戶的openId或包括openId在內的基本信息

 

下面介紹微信中控如何接入網頁授權的功能,比如我的中控地址爲:http://dulinan.cn/wechatserver(真實的沒有給提供)

 

1.接入網頁授權

微信服務號平臺地址:https://mp.weixin.qq.com/

登入後在 公衆號設置->功能設置中,將中控地址填入

 

上面設置業務域名,可使得不出現安全提示(輸入賬號密碼之類的)

 

上面設置JS接口安全域名,可在該域名下調用微信開放的JS接口

上面設置網頁授權域名,防止與服務器地址不一致時出現redirect_url錯誤

前兩個可同時設置三個,每月修改三次,最後一個最多隻能設置一個。三個要保證和服務器域名相同,通過ICP的備案驗證,並.txt文件放根目錄下

 

2.微信網頁授權時序圖(具體的代碼將在後面介紹,方便大家理解)

在公衆號直接接入業務系統時,時序圖是這樣的:

在公衆號接入中控時,時序圖是這樣的:

 

 

 

時序圖中的146需要開發者自行開發,235在中控中已處理好。

比如有個掃碼獲取門票的場景:

1)用戶在填寫預約信息後,點擊預約,後臺對預約信息進行保存,同時生成二維碼並與此預約信息綁定作爲門票進行。

2)用戶掃碼後,公衆號對此用戶發送預約成功的模版消息。

3)用戶點擊模版消息,跳轉到驗票頁面。

其中第3步對應網頁授權的點擊鏈接那個環節。

實現步驟:

1.填寫預約信息進行預約

2.生成二維碼

3.用戶掃碼獲取預約信息

4.點擊鏈接進入驗票頁面

 

代碼說明:

1.用戶在點擊場景3中的模版消息時,模版消息帶着一個鏈接,鏈接地址爲中控的地址的一個方法(這個地址是自平臺生成《時序圖那塊》,直接由自平臺發的模版消息),中控根據獲取的appid,重定向地址(肯定是業務系統的地址),以及業務系統中的參數(比如這個例子是二維碼的ticket),獲取code值,並重定向到中控的另一個方法中。

2.另一個方法接收到code值、重定向地址,以及業務系統中的參數。帶着code及業務系統中的參數,重定向到重定向地址中(比如叫a地址的b方法)

3.進入到業務系統的a地址的b方法後,它需要根據code獲取網頁授友的access_token,這樣帶着code,進入到中控中,通過code獲取網頁授權的access_token,獲取到access_token,就可以處理相應的業務了

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章