微信小程序获取用户电话

微信小程序获取用户电话

需要的参数前端应该都能拿到

    public ResponseModel getPhoneNumber(@RequestBody WxEntity wxEntity){
        String encrypteddata = wxEntity.getEncrypteddata();
        String iv = wxEntity.getIv();
        String sessionkey = wxEntity.getSessionKey();

        if (StringUtil.isNullOrEmpty(encrypteddata) || StringUtil.isNullOrEmpty(iv) || StringUtil.isNullOrEmpty(sessionkey)){
            ResponseModel.failed("参数为空");
        }

        String result = "";
        byte[] dataByte = new byte[0];
        byte[] keyByte = new byte[0];
        byte[] ivByte = new byte[0];
        try {
            //这个替换字符特别重要,不写就报错。
            String replace = URLEncoder.encode(encrypteddata, "UTF-8").replace("%3D", "=").replace("%2F", "/").replace("%2B","+");
            dataByte = Base64.decodeBase64(replace);
            String replace2 = URLEncoder.encode(sessionkey, "UTF-8").replace("%3D", "=").replace("%2F", "/").replace("%2B","+");
            keyByte = Base64.decodeBase64(replace2);
            String replace1 = URLEncoder.encode(iv, "UTF-8").replace("%3D", "=").replace("%2F", "/").replace("%2B","+");
            ivByte = Base64.decodeBase64(replace1);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        try {
            // 如果密钥不足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;
            }

            // 初始化
            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 s = resultByte.toString();
                result = new String(resultByte, "UTF-8");
            }
        }catch (Exception e){
            e.printStackTrace();
            log.error("解密用户电话失败 :{}",e.getMessage());
            return ResponseModel.failed("解密电话号码失败请稍后重试");
        }


        com.alibaba.fastjson.JSONObject jsonObject = JSONObject.parseObject(result);
        String purePhoneNumber = jsonObject.getString("purePhoneNumber");
        wxEntity.setClientPhone(purePhoneNumber);
        log.info("解析的电话为:{}",purePhoneNumber);
        return ResponseModel.success(wxEntity);
    }
  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值