在pom文件中引入解密jar包
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.59</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>
java解密代码
public class SecretUtils {
private SecretUtils(){}
public static String AES128CBCdecrypt(String encryptedData,String iv,String appId,String sessionKey) throws Exception {
// 被加密的数据
byte[] dataByte= Base64.decodeBase64(encryptedData);
// 加密秘钥
byte[] keyByte= Base64.decodeBase64(sessionKey);
// 偏移量
byte[] ivByte= Base64.decodeBase64(iv);
Security.addProvider(new BouncyCastleProvider());
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) {
String result=new String(resultByte,"UTF-8");
JSONObject obj= JSONObject.parseObject(result);
JSONObject watermark=obj.getJSONObject("watermark");
if(!watermark.getString("appid").equals(appId)){
throw new Exception("与小程序appid不符合");
}
if(System.currentTimeMillis()-watermark.getLong("timestamp")*1000>10000){
throw new Exception("验证时间过长");
}
return result;
}else {
return null;
}
}
}
小程序端代码
onLoad: function (options) {
var that = this;
wx.login({
success: function (res) {
if (res.code) {
wx.request({
url: 'http://xxx/xxx/xxx.html?js_code=' + res.code,
header: {
'content-type': 'json'
},
success: function (res) {
var sessionkey = res.data.session_key;
wx.getSetting({
success: function (res) {
if (!res.authSetting['scope.werun']) {
wx.showModal({
title: '提示',
content: '获取微信运动步数,需要开启计步权限',
success: function (res) {
if (res.confirm) {
//跳转去设置
wx.openSetting({
success: function (res) {
}
})
} else {
//不设置
wx.navigateTo({
url: '../index/index',
})
}
}
})
} else {
wx.getWeRunData({
success: function (res) {
var encryptedData1 = res.encryptedData;
var iv1 = res.iv;
wx.request({
url: 'http://xxx/xxx/xxx.html',
data: {
encryptedData: encryptedData1,
iv: iv1,
session_key: sessionkey
},
method: 'GET',
header: {
'content-type': 'json'
},
success: function(e) {
console.log(e.data.stepInfoList[30])
},
fail: function(e) {
console.log("fail")
}
})
},
fail: function (res) {
wx.showModal({
title: '提示',
content: '开发者未开通微信运动,请关注“微信运动”公众号后重试',
showCancel: false,
confirmText: '知道了'
})
}
})
}
}
})
}
})
}
}
})
}
基本的代码已经完成,接下来的controller就是要注意接受对应的参数。