之前寫了公衆號項目,這幾天需求網頁直接獲取用戶信息小編直接用之前的獲取openid接口的方式一頓操作······猛如虎,結果到官網一看網頁授權的接口和之前用的不一樣(定睛一看原地杵)~下面代碼搞起來
首先前端頁面生成二維碼:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge, chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1">
<title>XXX</title>
<script src="/js/jquery-1.11.1.min.js"></script>
<script src="/js/jquery.qrcode.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<!--生成二維碼位置-->
<div class="weixin-tip" style="width:150px; float:left;"></div>
<script language="javascript">
$(function() {
$(".weixin-tip").qrcode({
width : 200,
height : 200,
text : "https://open.weixin.qq.com/connect/oauth2/authorize?appid=你的APPID&redirect_uri=你的地址&response_type=code&scope=snsapi_userinfo&connect_redirect=1#wechat_redirect"
});
});
</script>
</body>
</html>
後端:controller代碼
@RequestMapping("/haha")
public String hytg(HttpServletRequest request) {
//通過前端接口掃描進來可以直接獲得code
String code = request.getParameter("code");
//通過網頁授權接口可以同時獲取openid和access_token
net.sf.json.JSONObject wxInfo = WeixinUtil.getOpenid(code);
//通過openid和access_token獲取用戶信息
net.sf.json.JSONObject wxUserInfo = WeixinUtil.getUserInfo(wxInfo.getString("access_token"), wxInfo.getString("openid"));
String nickName = wxUserInfo.getString("nickname");
String sex = wxUserInfo.getString("sex");
//還想獲取哪些信息,自己在下面獲取就行然後實現你的邏輯
return "";
}
WeixinUtil代碼
public class WeixinUtil {
//公衆號配置
public static final String APPID="你的APPID";
public static final String APPSECRET="你的APPSECRET";
public static final String URL="你的URL";
//接口地址
public static final String GET_OPENID_URL="https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
public static final String GET_USERINFO = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";
//通過code獲取openid和access_token
public static JSONObject getApenid(String code){
Openid open =new Openid();
String url=GET_OPENID_URL.replace("APPID", APPID).replace("SECRET", APPSECRET).replace("CODE", code);
JSONObject jsonObject=doGetStr(url);
return jsonObject;
}
//獲取授權用戶信息
public static JSONObject getUserInfo (String access_token, String openid) {
String url = GET_USERINFO.replace("ACCESS_TOKEN", access_token).replace("OPENID", openid);
JSONObject jsonObject=doGetStr(url);
return jsonObject;
}
public static JSONObject doGetStr(String url){
DefaultHttpClient httpClient=new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
JSONObject jsonObject=null;
try {
HttpResponse httpResponse=httpClient.execute(httpGet);
HttpEntity entity = httpResponse.getEntity();
if(entity!=null){
String result=EntityUtils.toString(entity,"UTF-8");
jsonObject=JSONObject.fromObject(result);
}
} catch (Exception e) {
e.printStackTrace();
}
return jsonObject;
}
}
openid實體類
public class Openid {
private String accessToken;
private String expiresIn;
private String refreshToken;
private String openid;
private String scope;
private String errcode;
private String errmsg;
//下面的get、set各位拿eclipse或者idea生成一下吧,都可以快捷直接生成的
}
不出意外的話你就可以獲取到用戶信息了~