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

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 java-解密支付宝小程序运动步数,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

/**
     * 解密支付宝步数
     * @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);
    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/137472.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!