获取微信用户信息-实战(4)(java)

  前面的理论知识已经说过了,下面就直接上代码了。

  

//----底层的一些方法,供
//获取签名需要用到的一系列方法
//获取AccessToken
public static String getAccessToken() {  // runBatch(){
   String access_token = "";  
   String grant_type = "client_credential";//获取access_token填写client_credential   
   //这个url链接地址和参数皆不能变  
   String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type="+grant_type+"&appid="+Constants.APP_ID+"&secret="+Constants.APPSECRET;  
      
   try {  
       URL urlGet = new URL(url);  
       HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();  
       http.setRequestMethod("GET"); // 必须是get方式请求  
       http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");  
       http.setDoOutput(true);  
       http.setDoInput(true);  
       System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒  
       System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒  
       http.connect();  
       InputStream is = http.getInputStream();  
       int size = is.available();  
       byte[] jsonBytes = new byte[size];  
       is.read(jsonBytes);  
       String message = new String(jsonBytes, "UTF-8");  
       JSONObject demoJson = JSONObject.fromObject(message);  
       access_token = demoJson.getString("access_token");  
      
   } catch (Exception e) {  
           e.printStackTrace();  
   }  
   return access_token;  
}  



//通过网页版授权获取当前用户的信息,网页版授权可以获取code,根据code获取信息 OpenId
public static  String getOpenId(String code){
  JSONObject demoJson = null;
  String openId="";
  try{

  String url="https://api.weixin.qq.com/sns/oauth2/access_token?appid="+Constants.APP_ID+"&secret="+Constants.APPSECRET+"&code="+code+"&grant_type=authorization_code";
  URL urlGet = new URL(url);  
       HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();  
       http.setRequestMethod("GET"); // 必须是get方式请求  
       http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");  
       http.setDoOutput(true);  
       http.setDoInput(true);  
       System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒  
       System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒  
       http.connect();  
       InputStream is = http.getInputStream();  
       int size = is.available();  
       byte[] jsonBytes = new byte[size];  
       is.read(jsonBytes);  
       String message = new String(jsonBytes, "UTF-8");  
       demoJson = JSONObject.fromObject(message);  
       openId= demoJson.getString("openid");
      }catch(Exception e){
  
  }
  return openId;
}






//通过code获取到的openid,根据openId 获取用户基本信息(这种方法只能获取已关注的)
public static JSONObject getWeixinYonghu(String code,String access_token){
JSONObject jsonObj=null;
  try{
String  openid= WeixinUtil.getOpenId(code);
String url= "https://api.weixin.qq.com/cgi-bin/user/info?access_token="+access_token+"&openid="+openid+"&lang=zh_CN";
   URL urlGet = new URL(url);  
       HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();  
       http.setRequestMethod("GET"); // 必须是get方式请求  
       http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");  
       http.setDoOutput(true);  
       http.setDoInput(true);  
       System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒  
       System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒  
       http.connect();  
       InputStream is = http.getInputStream();  
       int size = is.available();  
       byte[] jsonBytes = new byte[size];  
       is.read(jsonBytes);  
       String message = new String(jsonBytes, "UTF-8");  
   jsonObj = JSONObject.fromObject(message);  
      }catch(Exception e){
  
  }
return jsonObj;
}



//-----springMvc Control层 --获取数据后入库操作
@RequestMapping(value = "/index.jspx", method = RequestMethod.GET)
public String modelmain(String code, ModelMap model,
HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();


// 用户关注后获取用户信息,没当前用户的话进行入库操作start
        String memberId = "";
String memberName = "";
String accokenToken = WeixinUtil.getToken();
JSONObject jsonObj = WeixinUtil.getWeixinYonghu(code, accokenToken); // 根据code返回json用户字符串
if (jsonObj.has("openid")) {
String openid = jsonObj.getString("openid");
if (!HelpFunctions.isEmpty(openid)) {
Member member1 = memberService.findMember(openid); // 根据openId在系统里面查不到用户的话
// 将此用户添加到member表里面
if (member1 != null && !member1.equals("")) {
memberId = openid;
memberName = member1.getMemberName();
} else {
Member member = new Member();
memberId = openid;
int subscribe = jsonObj.getInt("subscribe");
String nickname = jsonObj.getString("nickname");
int sex = jsonObj.getInt("sex");
String province = jsonObj.getString("province");
String city = jsonObj.getString("city");
String country = jsonObj.getString("country");
String headimgurl = jsonObj.getString("headimgurl");
String subscribe_time = jsonObj.getString("subscribe_time");
String language = jsonObj.getString("language");


memberName = nickname;
member.setCountry(country);
member.setHeadImgUrl(headimgurl);
member.setProvince(province);
member.setCity(city);
member.setMemberName(nickname);
member.setSex(sex);
member.setMemberId(memberId);
member.setSubscribe(subscribe);
member.setSubscribeTime(subscribe_time);
member.setLanguage(language);
member.setCreationTime(new Date());


memberService.saveMember(member);
}
}
}


model.addAttribute("memberName", memberName);
model.addAttribute("memberId", memberId);
             // 用户关注后获取用户信息,没当前用户的话进行入库操作end

         return "index.html";
}

 代码已经写好了,肯定会有人说,直接访问的时候还是获取不到微信用户信息,我们需要用微信静默授权的方式进行访问,举个简单的例子,我们在微信公众号首页填写的链接是

  http://www.ceshi.com/ceshi/index.jspx  采用静默授权的方式链接需要更改为:

  https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx167d04ca46d8595c&redirect_uri=http%3A%2F%2Fwww.ceshi.com%2Fceshi%2Findex.jspx&response_type=code&scope=snsapi_base&state=123#wechat_redirect





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值