From 71fd1accb1587e44d9fd7fb4fc766a3cddb43760 Mon Sep 17 00:00:00 2001
From: zhibing.pu <393733352@qq.com>
Date: 星期四, 22 八月 2024 15:09:12 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 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..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,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, "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