From a2620230c68cf6e8c732311b65aa4912efb350a4 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期四, 22 八月 2024 15:31:26 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile --- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/ali/tools/AliAppletTools.java | 63 +++++++++++++++++++++++++++++-- 1 files changed, 59 insertions(+), 4 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 8a60f08..0678b48 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,16 +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.AlipayUserUserinfoShareRequest; +import com.alipay.api.request.AlipayUserInfoShareRequest; import com.alipay.api.response.AlipaySystemOauthTokenResponse; -import com.alipay.api.response.AlipayUserUserinfoShareResponse; +import com.alipay.api.response.AlipayUserInfoShareResponse; 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 @@ -60,12 +68,12 @@ * 支付宝小程序授权获取手机号 * @return */ - public AlipayUserUserinfoShareResponse getUserInfo(String accessToken) { + public AlipayUserInfoShareResponse getUserInfo(String accessToken) { try { // 初始化SDK AlipayClient alipayClient = new DefaultAlipayClient(new AliAppletTools(aliProperties).getAlipayConfig(AliConstant.LOGIN_SERVER_URL)); //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.user.userinfo.share - AlipayUserUserinfoShareRequest request = new AlipayUserUserinfoShareRequest(); + AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest(); //授权类接口执行API调用时需要带上accessToken return alipayClient.execute(request,accessToken); } catch (AlipayApiException e) { @@ -74,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, "XABBSOeWDakvuG9TDez4Qg====", 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