如何解決微信網(wǎng)頁授權(quán)回調(diào)域名只能設(shè)置一個

問題

在實際的需求中,我們常常遇到多個部署在不同域名下的業(yè)務(wù),想使用同一個「微信服務(wù)號」進(jìn)行微信網(wǎng)頁授權(quán)。但是微信的網(wǎng)頁授權(quán)只能設(shè)置一個回調(diào)地址。為了滿足業(yè)務(wù)需求,有人想到給每個業(yè)務(wù)部門配置一個微信服務(wù)號,但是這樣的成本太高昂。每個服務(wù)號需要定期繳納年檢費用,而且每一個網(wǎng)頁授權(quán)都需要配置相應(yīng)后端。

那么,如何解決多個域名使用同一個微信服務(wù)號進(jìn)行網(wǎng)頁授權(quán)呢?

解決辦法

假設(shè)我們有 A.example.com 、 B.example.com、C.example.com域名想使用微信授權(quán),我們可以將網(wǎng)頁授權(quán)域名設(shè)置為A.example.com。

步驟如下:

  1. 設(shè)置回調(diào)域名。將域名 A.example.com

微信公眾平臺->設(shè)置->公眾號設(shè)置->功能設(shè)置->網(wǎng)頁授權(quán)域名

  1. 在域名 A.example.com 添加中間頁 get-weixin-code.html

中間頁不一定在根域名下。在這里我們放在根域名下。中間頁的訪問地址如下,https://A.example.com/get-weixin-code.html

  1. 假設(shè)域名 B.example.com/game需要進(jìn)行網(wǎng)頁授權(quán)。我們可以使用下面鏈接進(jìn)行授權(quán),獲取微信的授權(quán)code
    https://A.example.com/get-weixin-code.html?appid=XXXX&scope=snsapi_base&state=hello-world&redirect_uri=https%3A%2F%2FB.example.com%2Fgame
授權(quán)地址參數(shù)說明
  1. 最終會回調(diào)到這個地址 https://B.example.com/game?code=XXXXXXXXXXXXXXXXX&state=hello-world,這樣就可以拿到授權(quán) codestate 參數(shù)。

  2. 利用授權(quán) code ,請求自己后端服務(wù)器,獲取微信用戶信息。

原理

從原理圖中可以看到,我們還是以類型直接授權(quán)的方式獲取微信的授權(quán)code。但是,我們增加了一次跳轉(zhuǎn),以滿足多個不同域名使用同一微信號進(jìn)行授權(quán)。

image.png

中間頁的原理

中間頁主要做了依次做了兩件事情:

  1. 跳轉(zhuǎn)到微信授權(quán)頁
  2. 授權(quán)成功,重定向到目標(biāo)頁。

微信后端邏輯

微信授權(quán)流程

  1. 第一步:用戶同意授權(quán),獲取code
  2. 第二步:通過code換取網(wǎng)頁授權(quán)access_token
  3. 第三步:刷新access_token(如果需要)
  4. 第四步:拉取用戶信息(需scope為 snsapi_userinfo)

總結(jié)

使用中間頁的方式,雖然多了一次請求。但是滿足了多個域名使用同一個微信號進(jìn)行網(wǎng)頁授權(quán)。在實際的使用過程中,我們將get-weixin-code.html頁,放在了nginx所在的服務(wù)器上。經(jīng)測試,跳轉(zhuǎn)都在毫秒級完成,用戶幾乎無感知。

但是,也有不足的地方。使用中間頁后,當(dāng)用戶不想進(jìn)行授權(quán)時,微信授權(quán)頁不會自動關(guān)閉,而是停留在中間頁。直接授權(quán)方式,卻可以自動關(guān)閉授權(quán)流程,回到原位置(聊天窗口或朋友圈)。相關(guān)issue

相關(guān)資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容