java微信页面授权及获取微信用户基本数据

//微信的AppId(公众号配置中‘公众号开发信息’)

private static String WX_APP_ID = "wx80**********981c";

//微信的AppSecret(公众号配置中‘公众号开发信息’)

private static String WX_APP_SECRET = "5287517****************f2638ae0f";

//获取当前域名

public String getVisitPrefix(HttpServletRequest request){
	String scheme = request.getScheme();  		//返回当前链接使用的协议;一般应用返回http;SSL返回https;
	String domain = request.getServerName();		//服务器主机名
	int serverPort = request.getServerPort();	//服务器上web应用的访问端口
	if(serverPort==80 || serverPort==443){
		return scheme+"://"+domain;
	}else{
		return scheme+"://"+domain+":"+serverPort;
	}
}

//微信页面授权方法

@RequestMapping("/wx/wxAuthorization.do")
public String wxAuthLogin(HttpServletRequest request,ModelMap model) {
	//获取当前域名
    String visitPrefix = getVisitPrefix(request);
    //公众号回调链接
    String REDIRECT_URI = visitPrefix+"/wx/wxPageVerify.do";
    //获取一个随机的4位数的字符串
    String STATE = RandomUtil.randomString(4);
    //微信请求连接
    String authUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+WX_APP_ID+"&redirect_uri="+URLEncoder.encode(REDIRECT_URI)+"&response_type=code&scope=snsapi_base&state="+STATE+"#wechat_redirect";
    return "redirect:" + authUrl;
}

//微信回调方法 页面授权及获取当前微信用户的基本信息

@RequestMapping("/wx/wxPageVerify.do")
public void wxPageVerify(HttpServletRequest request,HttpServletResponse response,ModelMap model, String code) {
    if(StringUtils.isNotBlank(code)) {
          //通过code换取网页授权access_token
          JSONObject authAccessToken = getAuthAccessToken(WX_APP_ID, WX_APP_SECRET, code);
          if(authAccessToken != null && authAccessToken.containsKey("access_token") && StringUtils.isNotBlank(authAccessToken.getString("access_token"))) {
              //获取用户的基本信息
        	  JSONObject userinfo = getUserinfo(authAccessToken.getString("access_token"), authAccessToken.getString("openid"));
        	  //获取session
              HttpSession session = request.getSession();
              //将微信数据放入session中
              session.setAttribute("wx", userinfo);
          }
    }
}

//微信页面授权

public JSONObject getAuthAccessToken(String appId, String appSecret,String code) {
	//微信页面授权url
    String authTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+appId+"&secret="+appSecret+"&code="+code+"&grant_type=authorization_code";
    //HttpEntity
    RestTemplate restTemplate = new RestTemplate();
    //post
    ResponseEntity<String> responseEntity = restTemplate.getForEntity(authTokenUrl, String.class);
    HttpStatus statusCode = responseEntity.getStatusCode();
    if (statusCode == HttpStatus.OK) {
        System.out.println("网络请求成功");
        String body = responseEntity.getBody();
        JSONObject jsonObject = JSONObject.parseObject(body);
        if (null != jsonObject) {
            if(jsonObject.containsKey("errcode")){
                int errorCode = jsonObject.getInteger("errcode");
                String errorMsg = jsonObject.getString("errmsg");
                if(errorCode != 0){
                	System.out.println("获取AuthAccessToken失败 errcode:{"+errorCode+"} errmsg:{"+errorMsg+"}");
                }
            }
        }
        return jsonObject;
    }
    return null;
}

获取微信用户基本数据

public JSONObject getUserinfo(String access_token, String openid) {
   //如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。
    String url = "https://api.weixin.qq.com/sns/userinfo?access_token="+access_token+"&openid="+openid+"&lang=zh_CN";
    //HttpEntity
    RestTemplate restTemplate = new RestTemplate();
    // 设置restemplate编码为utf-8
    restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8));
    MediaType type = MediaType.parseMediaType("application/json;charset=UTF-8");
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(type);
    headers.add("Accept", MediaType.APPLICATION_JSON.toString());
    //post
    ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class);
    HttpStatus statusCode = responseEntity.getStatusCode();
    if (statusCode == HttpStatus.OK) {
        System.out.println("网络请求成功");
        String body = responseEntity.getBody();
        JSONObject jsonObject = JSONObject.parseObject(body);
        if (null != jsonObject) {
            if(!jsonObject.containsKey("errcode") || (jsonObject.containsKey("errcode") && jsonObject.getInteger("errcode").intValue()==0)) {
            	return jsonObject;
            }else {
                System.out.println("获取WxUserinfo失败 errcode:{"+jsonObject.getInteger("errcode")+"} errmsg:{"+jsonObject.getString("errmsg")+"}");
            }
        }
    }
    return null;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值