用戶點擊view類型按鈕后,微信客戶端將會打開開發者在按鈕中填寫的url值 (即網頁鏈接),達到打開網頁的目的,但是view不能獲取用戶的openid,需與網頁授權獲取用戶基本信息接口結合使用,獲得用戶的登入個人信息。
方法/步驟
-
對比view和click菜單
{
"type":"click",
"name":"今日歌曲",
"key":"V1001_TODAY_MUSIC"
},
{
"type":"view",
"name":"歌手簡介",
"url":"http://www.baidu.com/"
}
從上面可以看出,click類型的菜單有key屬性,而view類型的菜單沒有key屬性,與之對應的是url屬性。key值是用於判斷用戶點擊了哪個click類型的菜單項。而view類型的菜單沒有key屬性,無法在公眾賬號后台判斷是否有用戶點擊了view類型的菜單項,也就沒辦法知道哪個用戶點擊了view類型的菜單項,好在騰訊開放了高級接口,運用OAuth2.0網頁授權接口可以獲取openid,下面將介紹網頁授權獲取用戶基本信息接口。
-
網頁授權獲取用戶基本信息
服務號獲得高級接口后,默認帶有scope參數中的snsapi_base和snsapi_userinfo。這里使用snsapi_base獲取openid,把上面的url換成
-
配置授權回調頁面域名
進入微信公眾平台后台后,依次進入 服務-我的服務,找到OAuth2.0網頁授權,
-
點擊右側的修改
授權回調域名配置規范為全域名並且不帶http。
這里我們填寫上面的ip地址,192.168.1.1
-
用戶授權並獲取code,把菜單更換成
{
"type":"view",
"name":"歌手簡介",
"url":"https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxcd983566d32442bc&redirect_uri=http://192.168.1.1/weixin/weixin.do?action=viewtest&response_type=code&scope=snsapi_base&state=1#wechat_redirect"
}
菜單跳轉的action
String code = request.getParameter("code");//我們要的code
code說明 : code作為換取access_token的票據,每次用戶授權帶上的code將不一樣,code只能使用一次,5分鍾未被使用自動過期。
-
使用code換取access_token
網頁授權的作用域為snsapi_base,本步驟中獲取到網頁授權access_token的同時,也獲取到了openid,snsapi_base式的網頁授權流程即到此為止。
換取網頁授權access_token頁面的構造方式:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
-
正確時返回json數據
{ "access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
到此我們成功獲取到了用戶的openid
-