微信公眾平台--服務號/訂閱號--網頁授權獲取用戶基本信息


 

 

官方Api文檔:

http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html

說的很清楚,可以仔細看看。

 

1.登錄微信公眾平台

https://mp.weixin.qq.com/advanced/advanced?action=dev&t=advanced/dev&token=42879889&lang=zh_CN

2.點擊開發者中心

點擊修改

 

填寫授權回調頁面域名,我寫的是我本機的局域網IP地址

然后點擊確定。

 

3.誘導用戶微信打開授權頁面:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
 
用戶會看到如下類似頁面:

如果用戶同意授權,頁面將跳轉至 redirect_uri/?code=CODE&state=STATE。若用戶禁止授權,則重定向后不會帶上code參數,僅會帶上state參數redirect_uri?state=STATE

code說明 :
code作為換取access_token的票據,每次用戶授權帶上的code將不一樣,code只能使用一次,5分鍾未被使用自動過期。
 

4.通過code獲取網頁授權access_token

參數 是否必須 說明
appid 公眾號的唯一標識
secret 公眾號的appsecret
code 填寫第一步獲取的code參數
grant_type 填寫為authorization_code

返回說明

正確時返回的JSON數據包如下:

{
   "access_token":"ACCESS_TOKEN",
   "expires_in":7200,
   "refresh_token":"REFRESH_TOKEN",
   "openid":"OPENID",
   "scope":"SCOPE"
}


參數 描述
access_token 網頁授權接口調用憑證,注意:此access_token與基礎支持的access_token不同
expires_in access_token接口調用憑證超時時間,單位(秒)
refresh_token 用戶刷新access_token
openid 用戶唯一標識,請注意,在未關注公眾號時,用戶訪問公眾號的網頁,也會產生一個用戶和公眾號唯一的OpenID
scope 用戶授權的作用域,使用逗號(,)分隔

 

 

 

5.拉取用戶信息

如果網頁授權作用域為snsapi_userinfo,則此時開發者可以通過access_token和openid拉取用戶信息了。

請求方法

http:GET(請使用https協議)
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

參數說明

參數 描述
access_token 網頁授權接口調用憑證,注意:此access_token與基礎支持的access_token不同
openid 用戶的唯一標識
lang 返回國家地區語言版本,zh_CN 簡體,zh_TW 繁體,en 英語

返回說明

正確時返回的JSON數據包如下:

{
   "openid":" OPENID",
   " nickname": NICKNAME,
   "sex":"1",
   "province":"PROVINCE"
   "city":"CITY",
   "country":"COUNTRY",
    "headimgurl":    "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46", 
        "privilege":[
        "PRIVILEGE1"
        "PRIVILEGE2"
    ]
    "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}

后端簡單代碼如下:
復制代碼
    /**
* 獲取微信登錄用戶信息
*
@param code
*
@param request
*
@param response
*
@throws IOException
*
@throws ServletException
*/
@RequestMapping(value
= "vote/getCode")
public void getCode(String code,HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException{
System. out.println(code);
//https://open.weixin.qq.com/connect/oauth2/authorize?appid=XXXXXXX&redirect_uri=http://192.168.246.172/business/vote/getCode.do&response_type=code&scope=snsapi_userinfo &state=STATE#wechat_redirect
//格式https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
//1.通過code換取網頁授權access_token的URL連接
tokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" +WeixinConf.AppID+"&secret="+WeixinConf. AppSecret+ "&code="+code+ "&grant_type=authorization_code";
//System.out.println("拼接后的token連接:" + tokenUrl);
//獲取access_token
token = WebUtils. getUrlReturnData(tokenUrl);
access_token
= token.substring( token.indexOf( "\":\"") + 3 , token.indexOf( "\",\""));
openId
= token.substring( token.indexOf( "openid\":\"")+9,token .indexOf("\",\"scope\"" ));
//2.獲取用戶信息 請求格式:https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN String userUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" +access_token +"&openid=" +openId +"&lang=zh_CN" ;
String userInfo
= WebUtils. getUrlReturnData(userUrl);
nickname
= userInfo.substring(userInfo.indexOf("nickname\":\"" )+11,userInfo.indexOf("\",\"sex" ));
sex
= userInfo.substring(userInfo.indexOf("sex\":" )+5,userInfo.indexOf(",\"language\":\"" ));
headimgurl
= userInfo.substring(userInfo.indexOf("\"headimgurl\":\"" )+14,userInfo.indexOf("\",\"privilege\"" ));
System. out.println(
" token = " + token);
System. out.println(
"access_token = " + access_token );
System. out.println(
"openID = "+ openId);
System. out.println(
"userInfo = " + userInfo);
System. out.println(
"nickname = " + nickname);
System. out.println(
"sex = " + sex);
System. out.println(
"imgurl = " + headimgurl);
if(code == null || "".equals(code) || token == null || "".equals(token ) || userInfo == null || "".equals(userInfo)){
//登錄失敗,用戶重新登錄,從新拉取用戶信息
String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxfb42d3d1c8d4c11b&redirect_uri=http://192.168.246.172/business/vote/getCode.do&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect" ;
response.sendRedirect(url);
}
else{
//登錄成功后要跳到的頁面
response.sendRedirect( "http://192.168.246.172/business/index.html" );
}
}
復制代碼

測試結果圖如下:



注:
1.此為網頁授權獲取用戶基本信息,必須為服務號,訂閱號是沒有權限通過網頁授權來獲取用戶基本信息的
2.必須是80端口
3.用戶授權獲取code連接必須在微信客戶端打開
4.開發者中心的服務器配置可以不用啟用,最后我還是成功的獲取到了用戶的信息

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM