/**
* 获取用户openid
* @param request
* @return
*/
@RequestMapping(value="/openid")
public Object openid(HttpServletRequest request){
Map<String,Object> map = new HashMap<String,Object>();
Map<String,Object> datamap = new HashMap<String,Object>();
try {
String code = request.getParameter("code");
log.info("openid ----- code :"+code);
if (StringUtils.isBlank(code)){
map.put("res", 0);
map.put("error", "code is null");
map.put("data", null);
return map;
}
1、向微信服务器 使用登录凭证 code 获取 session_key 和 openid
//请求参数
String params = "appid=" + wxspAppid + "&secret=" + wxspSecret + "&js_code=" + code + "&grant_type=" + "authorization_code";
//发送请求
String sr = sendGet("https://api.weixin.qq.com/sns/jscode2session", params);
//解析相应内容(转换成json对象)
JSONObject json = JSONObject.fromObject(sr);
log.info("openid ----- json :"+json);
//获取会话密钥(session_key)
String session_key = json.get("session_key").toString();
//用户的唯一标识(openid)
String openid = (String) json.get("openid");
map.put("res",1);
map.put("error","");
datamap.put("openid",openid);
datamap.put("session_key",session_key);
map.put("data",datamap);
}catch (Exception e){
log.error("-----openid error:"+e);
map.put("res", 0);
map.put("error", "error");
map.put("data", null);
}
log.info("openid-----map:"+map);
return map;
}
/**
* 获取用户详细信息,获取用户unionId的唯一方式
* @param request
* @return
*/
@RequestMapping(value="/user")
public Object user(HttpServletRequest request){
Map<String,Object> map = new HashMap<String,Object>();
Map<String,Object> userInfo = new HashMap<>();
try {
HttpSession session = request.getSession();
String openId = request.getParameter("openid");
String encryptedData = request.getParameter("encryptedData");
String iv = request.getParameter("iv");
String session_key = request.getParameter("session_key");
String code = request.getParameter("code");
log.info("userinfo-----encryptedData:"+encryptedData);
log.info("userinfo-----iv:"+iv);
log.info("userinfo-----session_key:"+session_key);
log.info("userinfo-----code:"+code);
if (StringUtils.isBlank(encryptedData)||StringUtils.isBlank(iv)){
map.put("res", 0);
map.put("error", "encryptedData || iv is null");
map.put("data", null);
return map;
}
String result = decrypt(encryptedData, session_key, iv);
log.info("user-----result:"+result);
if (result != null && result.length() > 0) {
JSONObject userInfoJSON = JSONObject.fromObject(result);
String openid = (String) userInfoJSON.get("openId");
userInfo.put("openid", 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"));
}
}catch (Exception e){
log.error("-----user error:"+e);
map.put("res", 0);
map.put("error", "error");
map.put("data", null);
}
log.info("user-----map:"+map);
return map;
}
/**
* AES解密
* @param data //密文,被加密的数据
* @param key //秘钥
* @param iv //偏移量
* @return
* @throws Exception
*/
public static String decrypt(String data, String key, String iv) throws Exception {
// initialize();
//被加密的数据
byte[] dataByte = Base64.decodeBase64(data);
//加密秘钥
byte[] keyByte = Base64.decodeBase64(key);
//偏移量
byte[] ivByte = Base64.decodeBase64(iv);
// Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding","BC");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
parameters.init(new IvParameterSpec(ivByte));
cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
byte[] resultByte = cipher.doFinal(dataByte);
if (null != resultByte && resultByte.length > 0) {
String result = new String(resultByte, "UTF-8");
return result;
}
return null;
}
微信小程序授权后端几个常用的接口
最新推荐文章于 2024-05-30 12:58:04 发布