赞
踩
本次案例主要是以springmvc为框架的java接口;
controller
/**
* 功能描述: 微信用户数据解密用户敏感数据-存入user库中
* @return
* (复杂方法描述主要逻辑 – 可选)
* 创建时间:2018年6月16日 下午5:21:21
* 修改人 修改时间 修改内容
* @param encryptedData 明文,加密数据
* @param iv 加密算法的初始向量
* @param code 用户允许登录后,回调内容会带上 code(有效期五分钟),开发者需要将 code 发送到开发者服务器后台,使用code 换取 session_key api,将 code 换成 openid 和 session_key
* @return
* ModelAndView
*/
@RequestMapping(value = "/decodeUserInfo")
public ModelAndView addWechat(String encryptedData, String iv, String code){
LOGGER.info("解密微信用户入库参数:encryptedData=" + encryptedData + "||iv=" + iv +"||code= "+ code);
Result rt = new Result();
if(StringUtils.isBlank(encryptedData)|| StringUtils.isBlank(iv) ||StringUtils.isBlank(code) ){
rt.setData("");
rt.setCode(ReturnCode.PARAMS_ERROR);
return new ModelAndView(new FastJsonAdaptIE8View(rt));
}
try {
//小程序唯一标识 (在微信小程序管理后台获取)
String wxspAppid = collage.getWexinAppId();
//小程序的 app secret (在微信小程序管理后台获取)
String wxspSecret = collage.getWexinAppSecret();
//授权(必填)
String grant_type = collage.getWexinAppGrantType();
//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对象)
if(StringUtils.isBlank(sr)){
rt.setData("");
rt.setCode(ReturnCode.PARAMS_ERROR);
return new ModelAndView(new FastJsonAdaptIE8View(rt));
}
JSONObject json = JSONObject.parseObject(sr);
//获取会话密钥(session_key)
String session_key = json.get("session_key").toString();
//用户的唯一标识(openid)
// String openid = (String) json.get("openid");
//2、对encryptedData加密数据进行AES解密
String result = AesCbcUtil.decrypt(encryptedData, session_key, iv, "UTF-8");
// 对加密数据进行解密操作并入库
this.requetAesResult(result);
} catch (Exception e) {
LOGGER.info("解密微信用户接口报错,{}", e);
rt.setData(null);
rt.setCode(ReturnCode.FAIL_SERVICE);
return new ModelAndView(new FastJsonAdaptIE8View(rt));
}
return new ModelAndView(new FastJsonAdaptIE8View(rt));
}
/**
*
* 功能描述: 对加密数据进行解密操作并入库
* (复杂方法描述主要逻辑 – 可选)
* 创建人: wx
* 创建时间:2018年6月16日 下午5:20:47
* 修改人 修改时间 修改内容
* @param result
* void
*/
public void requetAesResult(String result){
if (null != result && result.length() > 0) {
JSONObject userInfoJSON = JSONObject.parseObject(result);
User user = new User();
if(null != user ){
if(null!= userInfoJSON.get("nickName")
&& StringUtils.isNotBlank(userInfoJSON.get("nickName").toString())){
user.setRealName(userInfoJSON.get("nickName").toString());
user.setWeixinNickname(userInfoJSON.get("nickName").toString());
}
if(null != userInfoJSON.get("gender")
&& StringUtils.isNotBlank(userInfoJSON.get("openId").toString())){
String sex = userInfoJSON.get("gender").toString();
// 性别 1 是男 2是女
if("1".equals(sex)){
user.setSex("m");
}else{
user.setSex("f");
}
}
if(null != userInfoJSON.get("openId")
&& StringUtils.isNotBlank(userInfoJSON.get("openId").toString())){
user.setWeixinOpenId(userInfoJSON.get("openId").toString());
}
if(null != userInfoJSON.get("unionId")
&& StringUtils.isNotBlank(userInfoJSON.get("unionId").toString())){
user.setUnionid(userInfoJSON.get("unionId").toString());
}
this.schoolForecastService.addUser(user);
}
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。