JAVA微信小程序--手机号解密--代码亲测可用

最近项目在完成后台+微信小程序。后台方面问题并没有很大,主要是小程序需要对用户手机号进行解密,做的时候确实出现了一些问题,微信官网也给了一下相关文件,但是好像解密并没有JAVA的demo。查找了很多博客和相关资料,最后也算是比较幸运的拿到了解密后的手机号码。
话不多说,直接上代码:

@ResponseBody
	  	@RequestMapping("/loginapp.do")
	    public DataResponse decodeUser(@RequestParam("encryptedData")String encryptedData, 
	            @RequestParam("iv")String iv,  
	            @RequestParam("code")String code) {  // 这三个参数是前端传过来的数据
	        DataResponse response = new DataResponse();
	        Map<String, Object> map = new HashMap<>(); 
	        //登录凭证不能为空 
	        if (code == null || code.length() == 0) { 
	            /*map.put("status", 0); 
	            map.put("msg", "code 不能为空");
			     return map;*/
	            response.setResult_code("failed");
	            response.setResult_msg("code 不能为空");
                return response; 
	        } 
	        //小程序唯一标识  (在微信小程序管理后台获取) 
	        String wxspAppid = "获取你的appid"; 
	        //小程序的 app secret (在微信小程序管理后台获取) 
	        String wxspSecret = ""获取你的 secret"; 
	        //授权(必填) 
	        String grant_type = "authorization_code"; 

	        // 1、向微信服务器 使用登录凭证 code 获取 session_key 和 openid 
	        //请求参数 
	        String params = "appid=" + wxspAppid + "&secret=" + wxspSecret + "&js_code=" + code + "&grant_type=" + grant_type; 
	        //发送请求 
	        String sr = HttpRequest.sendGet("https://api.weixin.qq.com/sns/jscode2session", params); 
	        //解析相应内容(转换成json对象) 
	        Gson gson = new Gson();
	        JsonObject json = gson.fromJson(sr, JsonObject.class);
	        System.out.println(json);
//	      JSONObject json = JSONObject.fromObject(sr);
	        if (json.get("session_key") == null) {
	            /*map.put("status", 0); 
	            map.put("msg", "解密失败");
	            return map;*/  
	            response.setResult_code("failed");
	            response.setResult_msg("解密失败:" + json.get("errmsg").toString().replaceAll("\"", ""));
	            return response;
	        }
	        //获取会话密钥(session_key) 
	        String session_key = json.get("session_key").toString(); 
	        //用户的唯一标识(openid) 

	        String openid = json.get("openid").toString();
	         2、对encryptedData加密数据进行AES解密  
	        try { 
	            String result = AesCbcUtil.decrypt(encryptedData, session_key, iv, "UTF-8"); 
	            if (null != result && result.length() > 0) { 
	                JsonObject userInfoJSON = gson.fromJson(result, JsonObject.class);
	                System.out.println("user: " + userInfoJSON);
	                Map<String, Object> userInfo = new HashMap<>(); 
	                userInfo.put("openId", openid.replaceAll("\"", ""));	              
	                userInfo.put("phoneNumber", userInfoJSON.get("phoneNumber").toString().replaceAll("\"", "")); 
	               TUser tUser=new TUser();
	               String telnum=userInfoJSON.get("phoneNumber").toString().replaceAll("\"", "");
	               tUser.setTelnum(telnum);
	               String name="";  
	               for(int i=0;i<6;i++){  
	                   int intVal=(int)(Math.random()*26+65);  
	                   name=name+(char)intVal;  
	               }
	               TUser uu=tUserService.selectbytelnum(telnum);//检测该手机号是否已经存在 如果不存在,添加默认信息
	               if(uu ==null){
	            	   tUser.setTest(0);
	            	   tUser.setName(name);
		               tUser.setSex("男");
		               tUser.setAge(18);;
		               tUser.setOpenid(openid);
		               tUser.setSessionkey(session_key);
		               tUser.setCreatetime(new Date());
		               tUserService.insert(tUser); 
	               }	               
	                map.put("userInfo", userInfo);
	                System.out.println("map: " + map);
	                response.setResult_code("success");
	                response.setResult_msg("解密成功");
	                response.setData(userInfo);
	                return response; 
	            } 
	        } catch (Exception e) { 
	            e.printStackTrace(); 
	        } 
	        response.setResult_code("failed");
	        response.setResult_msg("解密失败");
	        return response; 
	    } 

这样就可以直接解析到手机号(phoneNumber)了,代码亲测可用。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值