前言
最近在做微信網(wǎng)頁項目時,發(fā)現(xiàn)服務(wù)號授權(quán)域名只能有兩個,而多個項目都需要用到微信授權(quán)獲取用戶信息,這就導(dǎo)致了域名不夠用的問題。如果給每個項目都配一個服務(wù)號,這顯然是不現(xiàn)實的,不僅需要成本而且很浪費資源。通過思考以及網(wǎng)絡(luò)查找之后,總結(jié)出了以下方法:
通過中間頁面代理獲取微信授權(quán)code,然后跳轉(zhuǎn)到對應(yīng)需要使用授權(quán)的項目上
一、在已授權(quán)的域名目錄下,添加授權(quán)代理中間頁
在已授權(quán)的域名目錄下(根目錄,子目錄都可以),添加授權(quán)代理的中間頁B。假如頁面A需要使用微信授權(quán),而此時授權(quán)域名已經(jīng)滿了,不夠用了。此時就到了授權(quán)代理中間頁B出場了。
在頁面A一加載時就跳轉(zhuǎn)到中間頁B,window.location.href = “中間頁B”,需要注意的是,在中間頁B中,里面的redirect_uri寫的是上圖中寫的用于獲取code后的頁面==(其他網(wǎng)上的說法是,redirect_uri寫的是需要授權(quán)的頁面,而我嘗試了之后,發(fā)現(xiàn)redirect_uri參數(shù)錯誤,估計是該域名沒有授權(quán)的問題)==,所以需要用一個轉(zhuǎn)發(fā)頁代理,從而獲取code。
二、在已授權(quán)的域名目錄下,添加一個用于獲取code之后轉(zhuǎn)發(fā)的頁面
在第一步,用戶一打開頁面A時,頁面A就會跳轉(zhuǎn)到中間頁B,而此時就會詢問用戶是否授權(quán)(這里有分靜默授權(quán)與非靜默授權(quán),具體自行查看微信開放文檔),當(dāng)用戶允許授權(quán)時,頁面就會跳轉(zhuǎn)到redirect_uri所填寫的回調(diào)地址,也就是我們第二步要添加的這個頁面C;原理很簡單,就是當(dāng)從中間頁B回調(diào)到頁面C時,會自動附帶上code,這樣我們就能拿到code后,跳轉(zhuǎn)回頁面A,而此時頁面A就可以拿到code,利用 code ,請求自己后端服務(wù)器,獲取微信用戶信息。

我這里用的是PHP,拿到code后,將code附帶回頁面A中(code直接附帶在鏈接上,其實是不安全的,目前還沒想到什么其他的方法,還請大佬指教!?。。?。
使用中間頁的方式,雖然多了一次請求。但是滿足了多個域名使用同一個微信號進(jìn)行網(wǎng)頁授權(quán)。在實際的使用過程中,經(jīng)測試,跳轉(zhuǎn)都在毫秒級完成,用戶幾乎無感知。
但是,也有不足的地方。使用中間頁后,當(dāng)用戶不想進(jìn)行授權(quán)時,微信授權(quán)頁不會自動關(guān)閉,而是停留在中間頁。直接授權(quán)方式,卻可以自動關(guān)閉授權(quán)流程,回到原位置(聊天窗口或朋友圈等)。
通過自己摸索了一兩天的時間,也看著官方文檔以及網(wǎng)絡(luò)查找的資料,一步一步去實現(xiàn),還是挺簡單的。對于本人的總結(jié),有錯誤之處,敬請各位大佬指正!