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