需要把小程序 放在 同一个 微信开发者 下
1 先按照loginInfo信息查询有无有unionID
2 如果有,直接返回 ,程序结束
3 如果没有,将用于解密的session_key获取
4 根据userInfo拿取encryptedData等加密数据
5 对加密数据进行逆解密
6 拿到unionID 返回,程序结
userInfo 注意一下:通过user.getInfo获取的和通过button授权获取的格式不一样
/**
* 根据logininfo 的code尝试获取unionID
* @param request
* @return
*/
public static Map<String, String> getUnionIDByLoginInfo(String resCode, HttpServletRequest request) {
JSONObject loginRes = null;
Map<String, String> loginResMap = new HashMap<>();
try {
// 网址看参数说明: https://developers.weixin.qq.com/miniprogram/dev/api/api-login.html#wxloginobject
String url = SysConstants.WEICHAT_UNIONID_URL+"?appid="+SysConstants.WECHAT_APPID+ "&secret="+ SysConstants.WECHAT_SECRET + "&js_code=" + resCode + "&grant_type="+SysConstants.WECHAT_FRANT_TYPE;
loginRes = HttpClientUtils.doGet(url);
} catch (Exception e) {
throw new RuntimeException(e);
}
String openid = (String) loginRes.get("openid");
String session_key = (String) loginRes.get("session_key"); 【如果没有需要解密 】
String unionid = (String) loginRes.get("unionid"); 【判断有没有】
loginResMap.put("openid", openid);
loginResMap.put("unionid", unionid);
loginResMap.put("session_key", session_key);
return loginResMap;
}
session_key 解密 encryptedData iv
/**
* @param session_key
* @return
*/
public static JSONObject decipherByUserInfo(String session_key,String encryptedData,String iv ) {
LOG.info(">>>start 解密需要的数据为:encryptedData:{},iv:{},session_key:{}", encryptedData, iv, session_key);
// 被加密的数据
byte[] dataByte = Base64.decodeBase64( encryptedData.replaceAll(" ", "+") );
// 加密秘钥
byte[] aeskey = Base64.decodeBase64(session_key);
// 偏移量
byte[] ivByte = Base64.decodeBase64( iv.replaceAll(" ", "+") );
String newuserInfo = "";
try {
AES aes = new AES();
byte[] resultByte = aes.decrypt(dataByte, aeskey, ivByte);
if (null != resultByte && resultByte.length > 0) {
newuserInfo = new String(resultByte, "UTF-8");
LOG.info(">>>end 解密完毕,解密结果为newuserInfo:{}", newuserInfo);
return JSONObject.parseObject(newuserInfo);
}
} catch (Exception e) {
LOG.info("解密异常!检查解密数据 {}", newuserInfo, e);
e.printStackTrace();
}
return null;
}
转载地址: https://blog.csdn.net/weixin_39214304/article/details/79158750