微信小程序免登录的验证步骤
验证步骤:
1.首先获取微信的unionId
2.通unionId查询账户。
3.如果查询到,则生成token返回给 小程序 (新增账户信息也要返回过去)
4.如果没有查询到,则将状态码 变成false 返回。 让小程序跳到绑定账号页面
以下是接口中具体的操作步骤:
1.调用wx.login()接口就可获取登录凭证(js_code)
2.去微信公众平台查看appid和appsecret
3.利用以下链接替换appid,secret,js_code后调用即可获取
写一个接口执行小程序免登录状态
传参 code,通过1获取的js_code,
encryptedData 敏感数据在内的完整用户信息的加密数据
iv 偏移量
通过解密算法即可获取如下数据
将你需要的数据set到你的返回实体中就可以了
以下是解密工具类的具体实现
/**
* @Author: wuyue
* @Date: 2020/8/3 18:20
* AES-128-CBC 加密方式
* 注:
* AES-128-CBC可以自己定义“密钥”和“偏移量“。
* AES-128是jdk自动生成的“密钥”。
*/
public class AesCbcUtil {
static {
//BouncyCastle是一个开源的加解密解决方案,主页在http://www.bouncycastle.org/
Security.addProvider(new BouncyCastleProvider());
}
/**
* AES解密
*
* @param data //密文,被加密的数据
* @param key //秘钥
* @param iv //偏移量
* @param encodingFormat //解密后的结果需要进行的编码
* @return
* @throws Exception
*/
public static Stringdecrypt(String data, String key, String iv, String encodingFormat)throws Exception {
// initialize();
String result ="";
//被加密的数据
byte[] dataByte = Base64.decodeBase64(data);
//加密秘钥
byte[] keyByte = Base64.decodeBase64(key);
//偏移量
byte[] ivByte = Base64.decodeBase64(iv);
// 如果密钥不足16位,那么就补足. 这个if 中的内容很重要
int base =16;
if (keyByte.length % base !=0) {
int groups = keyByte.length / base + (keyByte.length % base !=0 ?1 :0);
byte[] temp =new byte[groups * base];
Arrays.fill(temp, (byte)0);
System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
keyByte = temp;
}
// 初始化
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");
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) {
result =new String(resultByte, "UTF-8");
}
return result;
}
具体调用方法
喜欢请微信扫码关注公众号
网友评论