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