獲取微信用戶信息-實戰(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





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