From d10e18bc5b40cbc943736f1d1cb62aa859bb0116 Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期四, 09 七月 2026 10:05:47 +0800
Subject: [PATCH] 支付对接

---
 ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AliLoginController.java |   68 ++++++++++++++++++++++++++++++++-
 1 files changed, 65 insertions(+), 3 deletions(-)

diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AliLoginController.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AliLoginController.java
index 6db885e..1c775d9 100644
--- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AliLoginController.java
+++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/controller/AliLoginController.java
@@ -9,6 +9,7 @@
 import com.alipay.api.response.AlipaySystemOauthTokenResponse;
 import com.alipay.api.response.AlipayUserInfoShareResponse;
 import com.alipay.api.response.AlipayUserUserinfoShareResponse;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ruoyi.account.ali.Constant.AliConstant;
@@ -28,6 +29,7 @@
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
@@ -56,8 +58,16 @@
         // 登录
         AlipaySystemOauthTokenResponse response = new AliAppletTools(aliProperties).login(appletUserLogin.getCode());
         if (response.isSuccess()) {
-            // 获取用户信息
-//            AlipayUserInfoShareResponse userInfo = new AliAppletTools(aliProperties).getUserInfo(response.getAccessToken());
+            String aliUnionId = firstNotBlank(readStringProperty(response, "getUnionId"), readStringProperty(response, "getUnion_id"),
+                    getResponseBodyValue(response, "union_id"), getResponseBodyValue(response, "unionId"));
+            String aliUserId = firstNotBlank(response.getUserId(), getResponseBodyValue(response, "user_id"), getResponseBodyValue(response, "userId"));
+            log.info("支付宝授权换取用户标识成功,openId:{},userId:{},unionId:{}", response.getOpenId(), aliUserId, aliUnionId);
+            AlipayUserInfoShareResponse userInfo = new AliAppletTools(aliProperties).getUserInfo(response.getAccessToken());
+            log.info("支付宝用户信息接口返回:{}", JSON.toJSONString(userInfo));
+            aliUserId = firstNotBlank(aliUserId, userInfo == null ? null : userInfo.getUserId(),
+                    getResponseBodyValue(userInfo, "user_id"), getResponseBodyValue(userInfo, "userId"));
+            aliUnionId = firstNotBlank(aliUnionId, readStringProperty(userInfo, "getUnionId"), readStringProperty(userInfo, "getUnion_id"),
+                    getResponseBodyValue(userInfo, "union_id"), getResponseBodyValue(userInfo, "unionId"));
             if(StringUtils.isEmpty(appletUserLogin.getToken())){
                 return AjaxResult.success("已拒绝授权");
             }
@@ -65,7 +75,8 @@
             String phoneNumber = new AliAppletTools(aliProperties).getPhoneNumber(appletUserLogin.getToken());
             log.info("获取支付宝用户信息:{}", phoneNumber);
             // 用户信息封装
-            return AjaxResult.success(appUserService.aliLogin(response,phoneNumber,appletUserLogin.getInviteUserId()));
+            return AjaxResult.success(appUserService.aliLogin(response,phoneNumber,appletUserLogin.getInviteUserId(),
+                    aliUserId, aliUnionId));
         } else {
              String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response);
              log.warn("诊断结果:{}",diagnosisUrl);
@@ -73,4 +84,55 @@
         }
     }
 
+    private String getResponseBodyValue(Object response, String key) {
+        String body = readStringProperty(response, "getBody");
+        if (StringUtils.isEmpty(body)) {
+            return null;
+        }
+        try {
+            com.alibaba.fastjson.JSONObject bodyJson = JSON.parseObject(body);
+            String value = bodyJson.getString(key);
+            if (StringUtils.isNotEmpty(value)) {
+                return value;
+            }
+            for (String nestedKey : bodyJson.keySet()) {
+                com.alibaba.fastjson.JSONObject nested = bodyJson.getJSONObject(nestedKey);
+                if (nested != null) {
+                    value = nested.getString(key);
+                    if (StringUtils.isNotEmpty(value)) {
+                        return value;
+                    }
+                }
+            }
+            return null;
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    private String readStringProperty(Object target, String methodName) {
+        if (target == null) {
+            return null;
+        }
+        try {
+            Method method = target.getClass().getMethod(methodName);
+            Object value = method.invoke(target);
+            return value == null ? null : String.valueOf(value);
+        } catch (Exception e) {
+            return null;
+        }
+    }
+
+    private String firstNotBlank(String... values) {
+        if (values == null) {
+            return null;
+        }
+        for (String value : values) {
+            if (StringUtils.isNotEmpty(value)) {
+                return value;
+            }
+        }
+        return null;
+    }
+
 }

--
Gitblit v1.7.1