微信小程序登录状态 Java 后台解密,主要是通过解密过程,获取登录凭证和用户的唯一标识 openID,然后根据此信息进行业务操作或者用户信息获取。具体步骤如下:
- 获取前端传来的 code
前端获取登录凭证 code,然后通过接口传给后台,后台通过微信提供的接口获取 session_key 和 openid。具体代码如下:
String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appid + "&secret=" + secret + "&js_code=" + code + "&grant_type=authorization_code";
JSONObject jsonObject = JSONObject.fromObject(httpsGet(url));
String openid = jsonObject.getString("openid");
String sessionKey = jsonObject.getString("session_key");
- 解密用户信息
解密用户信息步骤如下:
- 将加密字符串和方式传递给 AES 解密函数
- 使用 session_key 对称解密算法解密出用户信息的字符串
- 将得到的字符串解析为JSON对象
解密代码如下:
// 模式填充方式
String AES_MODEL = "AES/ECB/PKCS5Padding";
// 解密算法
String AES_ALGORITHM = "AES";
// SessionKey 16位
String SESSION_KEY_ASE = sessionKey;
try {
// 1. 对称解密器 AES
Cipher cipher = Cipher.getInstance(AES_MODEL);
byte[] sessionKeyByte = Base64.decodeBase64(SESSION_KEY_ASE.getBytes());
SecretKeySpec secretKeySpec = new SecretKeySpec(sessionKeyByte, AES_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
// 2. 构建解密对象解密循环
byte[] ivByte = Base64.decodeBase64(iv.getBytes());
byte[] encryptedDataByte = Base64.decodeBase64(encryptedData.getBytes());
byte[] decryptedDataByte = cipher.doFinal(encryptedDataByte);
String result = new String(decryptedDataByte, "UTF-8");
// 3. 将解密出来的字符串转为JSON
JSONObject json = JSONObject.fromObject(result);
String code = json.getString("code");
String openId = json.getString("openId");
String nickName = json.getString("nickName");
……
} catch (Exception e) {
e.printStackTrace();
}
- 完整示例说明
我们举例一个小程序用于门店的展示和预约的情况来说明,具体步骤如下:
- 用户登录并获取登录凭证 code
- 前台调用接口传递登录凭证给后台
- 后台根据code获取session_key和openid
- 微信小程序传递给后台的数据包括了encryptedData(包括敏感信息的前端code)、iv(解密向量)和key(解密秘钥)
- 建议将秘钥和向量保存在常量中
- 解密encryptedData,获取其中含有的主要信息:用户名、真实姓名等,并进行数据库操作。同时将验证过的用户信息写入session中
- 后续的操作直接调用session信息,如“我的申请记录”等,无须请求前端加密信息
// 小程序登录操作,返回JSON
@RequestMapping("login")
@ResponseBody
public Result login(String code) {
// ... 获取 openid 和 session_key ....
}
// 返回给前端展示信息,需要提供给前端准确的门店信息(北京、上海、广州等)用于展示,并保存到session中
@RequestMapping("getShopList")
@ResponseBody
public Result getShopList() {
// ... 读取session中的openid ...
// 操作数据库查询门店信息
// 将数据打包为JSON对象返回给前端
}
- 总结
以上就是微信小程序登录状态 Java 后台解密的完整攻略。需要注意的是,每个小程序拥有独立的 App ID 和 Secret Key,因此需要根据不同小程序进行开发调试。同时,在实际开发中,建议加入合理的安全性校验机制,保障用户数据安全。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序登录状态java后台解密 - Python技术站