java-解密支付宝小程序运动步数

/**
     * 解密支付宝步数
     * @param aliChatStepDto 解密支付宝步数的参数对象
     * @return 用户当前的支付宝步数
     */
    @Transactional(rollbackFor = Exception.class)
    public ResultData<Object> decodeAliChatStep(AliChatStepDto aliChatStepDto) {
    
    
        // 前端传过来的密文(一个json字符串,里面有两个属性,一个response,一个sign)
        String response = aliChatStepDto.getEncryptedData();
        
        //1. 获取验签和解密所需要的参数
        Map<String, String> openapiResult = JSON.parseObject(response, new TypeReference<Map<String, String>>() {
    
    }, Feature.OrderedField);
        String signType = "RSA2";
        String charset = "UTF-8";
        String encryptType = "AES";
        String sign = openapiResult.get("sign");
        String content = openapiResult.get("response");

        //判断是否为加密内容
        boolean isDataEncrypted = !content.startsWith("{");
        boolean signCheckPass = false;

        //2. 验签
        String signContent = content;
        //如果是加密的报文则需要在密文的前后添加双引号
        if (isDataEncrypted) {
    
    
            signContent = "\"" + signContent + "\"";
        } try {
    
    
            // signVeriKey 支付宝公钥
            signCheckPass = AlipaySignature.rsaCheck(signContent, sign, signVeriKey, charset, signType);
        } catch (AlipayApiException e) {
    
    
            logger.info("验签异常");
            return ResultData.error("验签异常");
        } if (!signCheckPass) {
    
    
            logger.info("验签失败");
            return ResultData.error("验签失败");
        }

        //3. 解密
        String plainData = null;
        if (isDataEncrypted) {
    
    
            try {
    
    
                //decryptKey AES秘钥
                plainData = AlipayEncrypt.decryptContent(content, encryptType, decryptKey, charset);
            } catch (AlipayApiException e) {
    
    
                logger.info("解密异常");
                return ResultData.error("解密异常");
            }
        } else {
    
    
            plainData = content;
        }

        logger.info("解密支付宝密文后的数据:"+plainData);

        // 解析明文为json格式
        Double step = 0.0;
        JSONObject jsonObject = JSONObject.parseObject(plainData);
        if(!jsonObject.isEmpty() && "10000".equals(jsonObject.getString("code"))){
    
    
            step = Convert.toDouble(jsonObject.getString("count"));
        }
        return ResultData.ok("获取支付宝步数成功!", step);
    }

猜你喜欢

转载自blog.csdn.net/gelinwangzi_juge/article/details/124987857