小程序获取rundata解密-java后台

本文介绍了如何在Java后台处理小程序发送的rundata进行解密操作。首先,在项目pom文件中引入解密所需的jar包,然后提供Java解密代码示例,最后展示了小程序端发送数据的代码片段,并强调了控制器接收参数的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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就是要注意接受对应的参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值