如果该用户登录过小程序或者登陆过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);

企业建站知识
推广知识
小程序
微信营销
APP开发

