微信小程序Java后台接口获取用户信息(这是只写进后台java接口部分)

本次案例主要是以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);
             }                  
         }
}
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值