欢迎您光临深圳塔灯网络科技有限公司!
电话图标 余先生:13699882642

网站百科

为您解码网站建设的点点滴滴

SpringBoot微信小程序解密获取unionId(JAVA)

发表日期:2019-08 文章编辑:小灯 浏览次数:1528

如果该用户登录过小程序或者登陆过tong同一平台下的小程序,可以直接根据openid获取到微信用户唯一标识unionId

代码如下

@ApiOperation(value = "获取UnionID")@PostMapping(value = "/getUnionID")public SuccessOutPut<AppOutPut> getUnionID(@RequestBody StringInput code) throws Exception {HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON_UTF8);StringBuffer info = new StringBuffer("https://api.weixin.qq.com/cgi-bin/user/info?");String accessToken = AccessToken.getAccessToken();if (null != accessToken) {info.append("access_token=").append(accessToken).toString();} else {String accessToken2 = AccessToken.getAccessToken();info.append("access_token=").append(accessToken2).toString();}info.append("&openid="+code.getStrValue()).append("&lang=zh_CN").toString();HttpEntity<String> entity = new HttpEntity<String>(headers);String strbody = restTemplate.exchange(info.toString(), HttpMethod.GET, entity, String.class).getBody();LOG.info(strbody);return new SuccessOutPut<AppOutPut>(JsonUtil.jsonToObject(strbody, AppOutPut.class));}

如果没有登陆的用户向进行同一平台下小程序之前的跳转不再进行授权,还要保留该小程序的用户的信息和资料,当跳转到不同的小程序,要根据用户的唯一标识去获取用户自己的信息,这就需要加密解密。

该方法是CSDN一位博主分享的,具体的忘了在哪看到的,sorry。

 

代码如下,根据自己的需要进行更改:

@ApiOperation(value = "加密解密")@PostMapping(value = "/decodeUserInfo")public SuccessOutPut<Map<String,Object>> decodeUserInfo(@RequestBody WxInput input) { Map<String,Object> map = new HashMap<String,Object>(); //登录凭证不能为空if (input.getCode() == null || input.getCode().length() == 0) {map.put("status", 0);map.put("msg", "code 不能为空");return new SuccessOutPut<Map<String,Object>>(map);}//小程序唯一标识 (在微信小程序管理后台获取)String wxspAppid = "在微信小程序管理后台获取";//小程序的 app secret (在微信小程序管理后台获取)String wxspSecret = "在微信小程序管理后台获取";//授权(必填)String grant_type = "authorization_code";//////////////// 1、向微信服务器 使用登录凭证 code 获取 session_key 和 openid //////////////////请求参数String params = "appid=" + wxspAppid + "&secret=" + wxspSecret + "&js_code=" + input.getCode() + "&grant_type=" + grant_type;//发送请求String sr = HttpRequest.sendGet("https://api.weixin.qq.com/sns/jscode2session", params);//解析相应内容(转换成json对象)JSONObject json = JSONObject.parseObject(sr);//获取会话密钥(session_key)String session_key = json.get("session_key").toString();//用户的唯一标识(openid)String openid = (String) json.get("openid");System.out.println(openid); //////////////// 2、对encryptedData加密数据进行AES解密 ////////////////try {String result = AesUtil.decrypt(input.getEncryptedData(), session_key, input.getIv(), "UTF-8");if (null != result && result.length() > 0) {map.put("status", 1);map.put("msg", "解密成功"); JSONObject userInfoJSON = JSONObject.parseObject(result);Map<String,Object> userInfo = new HashMap<String,Object>();userInfo.put("openId", userInfoJSON.get("openId"));userInfo.put("nickName", userInfoJSON.get("nickName"));userInfo.put("gender", userInfoJSON.get("gender"));userInfo.put("city", userInfoJSON.get("city"));userInfo.put("province", userInfoJSON.get("province"));userInfo.put("country", userInfoJSON.get("country"));userInfo.put("avatarUrl", userInfoJSON.get("avatarUrl"));userInfo.put("unionId", userInfoJSON.get("unionId"));map.put("userInfo", userInfo); return new SuccessOutPut<Map<String,Object>>(map);}} catch (Exception e) {e.printStackTrace();}map.put("status", 0);map.put("msg", "解密失败");return new SuccessOutPut<Map<String,Object>>(map);

 


本页内容由塔灯网络科技有限公司通过网络收集编辑所得,所有资料仅供用户学习参考,本站不拥有所有权,如您认为本网页中由涉嫌抄袭的内容,请及时与我们联系,并提供相关证据,工作人员会在5工作日内联系您,一经查实,本站立刻删除侵权内容。本文链接:https://www.dengtar.com/20822.html
相关小程序
    SQL执行错误,请检查