java获取微信openid绑定用户,免登陆。

  1. JS接口安全域名 填写你自己穿透本地后的域名 不带http://
  2. 体验接口权限表-->网页服务-->网页帐号还是填写上一步的域名 不带http://

  • 下面代码开始↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
  •  @RequestMapping(params = "toUrl",method=RequestMethod.GET)
    	    public void toUrl(HttpServletRequest request,HttpServletResponse response){
    	    	StringBuffer sb = new StringBuffer();
    	        //公众号appId
    	        String appId = "appidxxxxxxxxxxxxxxx";
    	        //目标方法或者页面 先获取code 换取openId 一个微信用户对应关注的微信号只有一个唯一的openId  在其他关注的公账号下openId不同 
    	        String doname = "带http://的域名/xxxxxController.do?getCode";
    	        sb.append("https://open.weixin.qq.com/connect/oauth2/authorize?appid=");
    	        sb.append(appId);
    	        String url = "";
    	        try {
    //	            url = URLEncoder.encode(encodeUrl.toString(), "utf-8");
    	            url = URLEncoder.encode(doname, "utf-8");
    	            sb.append("&redirect_uri=").append(url);
    	            //网页授权的静默授权snsapi_base
    	            sb.append("&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect");
    	            response.sendRedirect(sb.toString());
    	        } catch (UnsupportedEncodingException e) {
    	            System.out.println("重定向url编码失败:>>" + e.getMessage());   
    	            e.printStackTrace();
    	        } catch (Exception e) {
    	        	 System.out.println("response重定向失败:>>" + e.getMessage());   
    	            e.printStackTrace();
    	        }
    	    }
    	    
      @RequestMapping(params = "getCode",method=RequestMethod.GET)
    	    public void toMyPage(HttpServletRequest request,HttpServletResponse response){
    	        //获取重定向携带的code参数值
    	        String code = request.getParameter("code");
    	        String openId = "";
    	        if (StringUtils.isEmpty(openId)) {
    	            /*
    	            * 根据得到的code参数,内部请求获取openId的方法。
    	             */
    	            openId = getOpenId(request,response,code);
    	        }
    	    }
    
    
    
     //发送请求,根据code获取openId
    	    public String getOpenId(HttpServletRequest request, HttpServletResponse response,String code) {
    	        String content = "";
    	        String openId = "";
    	        String unionId = "";
    	        String appId = "appidxxxxxxxxxxxxxxx";//公众号的appId
    	        String appsecret="appsecretxxxxxxxxxxxxx"; //公众号的appsecret
    	        //封装获取openId的微信API
    	        StringBuffer url = new StringBuffer();
    	        url.append("https://api.weixin.qq.com/sns/oauth2/access_token?appid=")
    	        .append(appId)
    	        .append("&secret=")
    	        .append(appsecret)
    	        .append("&code=")
    	        .append(code)
    	        .append("&grant_type=authorization_code");
    	        
    	        ObjectMapper objectMapper = new ObjectMapper();
    	        try {
    	        	CloseableHttpClient httpClient = HttpClientBuilder.create().build();
    	        	HttpGet httpGet = new HttpGet(url.toString());
    	        	CloseableHttpResponse re = null;
    	        	re = httpClient.execute(httpGet);
    	        	HttpEntity responseEntity = re.getEntity();
    	        	
    	            content = EntityUtils.toString(responseEntity);
    	            Map map = objectMapper.readValue(content, Map.class);
    	            openId = String.valueOf(map.get("openid"));
    	            unionId = String.valueOf(map.get("unionid"));
    	            System.out.println("获取的openID:" + openId);
    	            /*
    		             * 将openId保存到session中,当其他业务获取openId时,
    		             * 可先从session中获取openId.
    	             */
    	            request.getSession().setAttribute("openId", openId);
                     /*
    		             
    		             * 获取到openid就可写绑定用户方法了
    	             */
                   
    	        } catch (JsonParseException e) {
    	        	 System.out.println("json解析失败:");
    	        } catch (JsonMappingException e) {
    	        	 System.out.println("map转换成json失败:");
    	        } catch (Exception e) {
    	        	 System.out.println("http获取openId请求失败:");
    	        }
    	        return openId;
    	    }

    小弟才疏学浅,希望写的明白说的清楚了。

发布了1 篇原创文章 · 获赞 1 · 访问量 102

猜你喜欢

转载自blog.csdn.net/u010242480/article/details/105186650
今日推荐