微信官方文檔:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
官方流程
網頁授權流程分為四步:
1、引導用戶進入授權頁面同意授權,獲取code
2、通過code換取網頁授權access_token(與基礎支持中的access_token不同)
3、如果需要,開發者可以刷新網頁授權access_token,避免過期
4、通過網頁授權access_token和openid獲取用戶基本信息(支持UnionID機制)
服務號獲取openid
在微信公眾平台最后接口權限中我們可以發現訂閱號是沒有網頁授權的權限的,服務號必須認證才會有,如圖

一般來說服務號獲取openid的方法是:首先通過前端獲取code,然后請求后台,后台通過AppID,AppSecret和code獲取openid以及用戶信息返回給前端(注:不能在前端獲取,因為AppSecret對於公眾號很重要,放在前端容易被竊取)
下面是我簡單寫的部分前端代碼,具體思路是:進入頁面回跳自身地址(此時URL中已經有了code參數,截取code參數傳到后台),第一次跳轉要緩存一個值,然后判斷這個值來決定是否回跳(不然會一直跳轉)
if(!sessionStorage.getItem('load')){ var appid='你的id'; var redirect_uri=encodeURIComponent(window.location.href) window.location.href="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appid+"&redirect_uri="+redirect_uri+"&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect" sessionStorage.setItem('load','1') }else{ var Url=window.location.href var Urlarr=Url.split("?") var code=Urlarr[1].split("=")[1].split('&')[0] sessionStorage.setItem('code',code) }
后台各語言代碼在官方文檔中都有,可以參考,這里就不再贅述。
訂閱號獲取openid
服務號有網頁授權的權限,但是訂閱號沒有,所以一般來說訂閱號是無法通過網頁授權獲取openid的。
但是服務號可以通過其他方式獲取用戶信息--->這種方式必須要用戶來點擊菜單或者發送信息后台才能獲取到用戶信息,顯然這種不是我們需要的。
那么又沒有其他方法了呢?
當然有!雖然訂閱號沒有網頁授權的權限,但是服務號有啊。所以前提是我們要有一個服務號。
方法就是在我們微信公眾號網頁開發的時候,所有用到Appid與AppSecret的地方全部替換為服務號的Appid與AppSecret,這樣的話就相當於我們的訂閱號也有了權限。親測可用

