From ce3a300f4b346b5128adcb1d1dce0d4c1ffbcdd4 Mon Sep 17 00:00:00 2001
From: zhangli <123879394@qq.com>
Date: Sun, 31 Aug 2025 21:48:53 +0800
Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=AE=9D=E6=B3=A8=E5=86=8C?=
=?UTF-8?q?=E6=97=B6=E5=A2=9E=E5=8A=A0=E8=8E=B7=E5=8F=96alipay=E7=9A=84ope?=
=?UTF-8?q?nid?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
.../user/dto/AlipayMiniProgramRegRequest.java | 3 +
.../com/sczx/user/dto/SimpleUserInfoDTO.java | 3 +
.../java/com/sczx/user/po/BaseUserPO.java | 3 +
.../user/service/impl/UserServiceImpl.java | 11 +++-
.../thirdpart/integration/AlipayInteg.java | 60 +------------------
6 files changed, 23 insertions(+), 59 deletions(-)
diff --git a/pom.xml b/pom.xml
index 0270bc0..4b4e4a3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -237,7 +237,7 @@
com.alipay.sdk
alipay-sdk-java
- 4.34.0.ALL
+ 4.40.427.ALL
diff --git a/src/main/java/com/sczx/user/dto/AlipayMiniProgramRegRequest.java b/src/main/java/com/sczx/user/dto/AlipayMiniProgramRegRequest.java
index 53ed7e9..1a85d91 100644
--- a/src/main/java/com/sczx/user/dto/AlipayMiniProgramRegRequest.java
+++ b/src/main/java/com/sczx/user/dto/AlipayMiniProgramRegRequest.java
@@ -14,6 +14,9 @@ public class AlipayMiniProgramRegRequest {
@ApiModelProperty(value = "签名")
private String sign;
+ @ApiModelProperty(value = "支付宝授权码")
+ private String authCode;
+
@ApiModelProperty(value = "推荐人userId")
private Long referralUserId;
}
diff --git a/src/main/java/com/sczx/user/dto/SimpleUserInfoDTO.java b/src/main/java/com/sczx/user/dto/SimpleUserInfoDTO.java
index 71ddb53..a73351f 100644
--- a/src/main/java/com/sczx/user/dto/SimpleUserInfoDTO.java
+++ b/src/main/java/com/sczx/user/dto/SimpleUserInfoDTO.java
@@ -32,6 +32,9 @@ public class SimpleUserInfoDTO {
@ApiModelProperty("支付宝小程序 userid")
private String alipayUserid;
+ @ApiModelProperty("支付宝小程序 openid")
+ private String alipayOpenid;
+
@ApiModelProperty("是否认证0未认证1已认证")
private Integer authed;
diff --git a/src/main/java/com/sczx/user/po/BaseUserPO.java b/src/main/java/com/sczx/user/po/BaseUserPO.java
index f0c81c0..12c9487 100644
--- a/src/main/java/com/sczx/user/po/BaseUserPO.java
+++ b/src/main/java/com/sczx/user/po/BaseUserPO.java
@@ -55,6 +55,9 @@ public class BaseUserPO implements Serializable {
@ApiModelProperty("支付宝小程序 userid")
private String alipayUserid;
+ @ApiModelProperty("支付宝小程序 openid")
+ private String alipayOpenid;
+
@ApiModelProperty("是否认证0未认证1已认证")
private Integer authed;
diff --git a/src/main/java/com/sczx/user/service/impl/UserServiceImpl.java b/src/main/java/com/sczx/user/service/impl/UserServiceImpl.java
index ee02f39..6e1daeb 100644
--- a/src/main/java/com/sczx/user/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/sczx/user/service/impl/UserServiceImpl.java
@@ -234,11 +234,14 @@ public class UserServiceImpl implements IUserService {
public LoginResponse alipayMiniProgramLoginOrReg(AlipayMiniProgramRegRequest alipayMiniProgramRegRequest) {
try {
- // 2. 获取手机号
+ // 1. 获取手机号
String phoneNumber = alipayInteg.getPhoneNumberFromEncryptedData(alipayMiniProgramRegRequest.getEncryptedData(), alipayMiniProgramRegRequest.getSign());
if (StringUtils.isBlank(phoneNumber)) {
throw new BizException("支付宝小程序登录失败,无法获取用户真实手机号");
}
+ //2.获取openId
+ String openId = alipayInteg.getUserInfoByAuthCode(alipayMiniProgramRegRequest.getAuthCode());
+
// 3. 查询用户是否存在
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(BaseUserPO::getPhoneNumber, phoneNumber);
@@ -252,6 +255,7 @@ public class UserServiceImpl implements IUserService {
baseUserPO.setPhoneNumber(phoneNumber);
baseUserPO.setPassword(MD5Utils.md5Hex(phoneNumber, StandardCharsets.UTF_8.name()));
baseUserPO.setRoleId(1);
+ baseUserPO.setAlipayOpenid(openId);
baseUserRepo.saveOrUpdate(baseUserPO);
if(Objects.nonNull(alipayMiniProgramRegRequest.getReferralUserId())){
@@ -270,6 +274,11 @@ public class UserServiceImpl implements IUserService {
baseUserReferralRepo.save(baseUserReferralPO);
}
}
+ }else {
+ if(StringUtils.isBlank(baseUserPO.getAlipayOpenid())){
+ baseUserPO.setAlipayOpenid(openId);
+ baseUserRepo.saveOrUpdate(baseUserPO);
+ }
}
// 5. 返回登录信息
return getLoginResponse(baseUserPO,MiniProgramTypeEnum.ALIPAY);
diff --git a/src/main/java/com/sczx/user/thirdpart/integration/AlipayInteg.java b/src/main/java/com/sczx/user/thirdpart/integration/AlipayInteg.java
index d2112b7..e545612 100644
--- a/src/main/java/com/sczx/user/thirdpart/integration/AlipayInteg.java
+++ b/src/main/java/com/sczx/user/thirdpart/integration/AlipayInteg.java
@@ -7,17 +7,12 @@ import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.internal.util.AlipayEncrypt;
import com.alipay.api.request.AlipaySystemOauthTokenRequest;
-import com.alipay.api.request.AlipayUserInfoShareRequest;
import com.alipay.api.response.AlipaySystemOauthTokenResponse;
-import com.alipay.api.response.AlipayUserInfoShareResponse;
import com.sczx.user.exception.BizException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
-import java.util.HashMap;
-import java.util.Map;
-
@Slf4j
@Component
public class AlipayInteg {
@@ -105,11 +100,11 @@ public class AlipayInteg {
}
/**
- * 通过授权码获取用户信息
+ * 通过授权码获取用户OPENID
* @param authCode 授权码
* @return 用户信息
*/
- public Map getUserInfoByAuthCode(String authCode) {
+ public String getUserInfoByAuthCode(String authCode) {
try {
AlipayClient alipayClient = new DefaultAlipayClient(
gatewayUrl, appId, privateKey, format, charset, publicKey, signType);
@@ -125,60 +120,11 @@ public class AlipayInteg {
log.error("获取支付宝access_token失败: {}", tokenResponse.getSubMsg());
throw new BizException("获取支付宝用户信息失败");
}
-
- // 2. 通过access_token获取用户信息
- AlipayUserInfoShareRequest userInfoRequest = new AlipayUserInfoShareRequest();
- AlipayUserInfoShareResponse userInfoResponse = alipayClient.execute(userInfoRequest, tokenResponse.getAccessToken());
-
- if (!userInfoResponse.isSuccess()) {
- log.error("获取支付宝用户信息失败: {}", userInfoResponse.getSubMsg());
- throw new BizException("获取支付宝用户信息失败");
- }
-
- // 3. 构造返回结果
- Map userInfo = new HashMap<>();
- userInfo.put("userId", userInfoResponse.getUserId());
- userInfo.put("nickName", userInfoResponse.getNickName());
- userInfo.put("avatar", userInfoResponse.getAvatar());
- userInfo.put("mobile", userInfoResponse.getMobile());
-
- return userInfo;
+ return tokenResponse.getOpenId();
} catch (Exception e) {
log.error("获取支付宝用户信息异常", e);
throw new BizException("获取支付宝用户信息异常");
}
}
- /**
- * 通过userId获取用户信息(简化版,适用于已授权用户)
- * @param userId 用户ID
- * @return 用户信息
- */
- public Map getUserInfoByUserId(String userId) {
- try {
- // 这里可以调用支付宝的用户信息接口获取用户详情
- // 为简化实现,直接返回基础信息
- Map userInfo = new HashMap<>();
- userInfo.put("userId", userId);
- return userInfo;
- } catch (Exception e) {
- log.error("获取支付宝用户信息异常", e);
- throw new BizException("获取支付宝用户信息异常");
- }
- }
-
- /**
- * 获取用户手机号(通过支付宝接口)
- * @param authCode 授权码
- * @return 手机号
- */
- public String getPhoneNumber(String authCode) {
- try {
- Map userInfo = getUserInfoByAuthCode(authCode);
- return (String) userInfo.get("mobile");
- } catch (Exception e) {
- log.error("获取支付宝手机号异常", e);
- throw new BizException("获取支付宝手机号异常");
- }
- }
}
\ No newline at end of file