From c4664502dfdaffff555b532e65b51a57ac8b29c2 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期三, 16 十月 2024 17:51:32 +0800 Subject: [PATCH] 合并代码 --- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/ali/tools/AliAppletTools.java | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 55 insertions(+), 2 deletions(-) diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/ali/tools/AliAppletTools.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/ali/tools/AliAppletTools.java index a31fb9e..d86465b 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/ali/tools/AliAppletTools.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/ali/tools/AliAppletTools.java @@ -1,18 +1,24 @@ package com.ruoyi.account.ali.tools; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.TypeReference; +import com.alibaba.fastjson.parser.Feature; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.AlipayConfig; import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.internal.util.AlipayEncrypt; +import com.alipay.api.internal.util.AlipaySignature; import com.alipay.api.request.AlipaySystemOauthTokenRequest; import com.alipay.api.request.AlipayUserInfoShareRequest; -import com.alipay.api.request.AlipayUserUserinfoShareRequest; import com.alipay.api.response.AlipaySystemOauthTokenResponse; import com.alipay.api.response.AlipayUserInfoShareResponse; -import com.alipay.api.response.AlipayUserUserinfoShareResponse; import com.ruoyi.account.ali.Constant.AliConstant; import com.ruoyi.account.ali.model.AliProperties; +import com.ruoyi.common.core.exception.ServiceException; import lombok.extern.slf4j.Slf4j; + +import java.util.Map; /** * @author xiaochen @@ -76,6 +82,53 @@ } /** + * 获取用户手机号 + * @param response + * @return + */ + public String getPhoneNumber(String response){ + //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 { + signCheckPass = AlipaySignature.rsaCheck(signContent, sign, aliProperties.getAlipayPublicKey(), charset, signType); + } catch (AlipayApiException e) { + // 验签异常, 日志 + } if (!signCheckPass) { + //验签不通过(异常或者报文被篡改),终止流程(不需要做解密) + throw new ServiceException("验签失败"); + } + //3. 解密 + String plainData = null; + if (isDataEncrypted) { + try { + plainData = AlipayEncrypt.decryptContent(content, encryptType, "84iAz9sTR7siFxTmAD6sfw==", charset); + } catch (AlipayApiException e) { + //解密异常, 记录日志 + throw new ServiceException("解密异常"); + }} else { + plainData = content; + } + log.info("解密后的数据:{}", plainData); + String phoneNumber = ""; + if (plainData.contains("mobile")) { + phoneNumber = JSON.parseObject(plainData).getString("mobile"); + } + return phoneNumber; + } + + /** * 初始化支付宝配置 * @return */ -- Gitblit v1.7.1