微信公衆號網頁授權獲取用戶信息

之前寫了公衆號項目,這幾天需求網頁直接獲取用戶信息小編直接用之前的獲取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生成一下吧,都可以快捷直接生成的
}

不出意外的話你就可以獲取到用戶信息了~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章