支付宝注册时增加获取alipay的openid
This commit is contained in:
2
pom.xml
2
pom.xml
@ -237,7 +237,7 @@
|
||||
<dependency>
|
||||
<groupId>com.alipay.sdk</groupId>
|
||||
<artifactId>alipay-sdk-java</artifactId>
|
||||
<version>4.34.0.ALL</version>
|
||||
<version>4.40.427.ALL</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
||||
@ -14,6 +14,9 @@ public class AlipayMiniProgramRegRequest {
|
||||
@ApiModelProperty(value = "签名")
|
||||
private String sign;
|
||||
|
||||
@ApiModelProperty(value = "支付宝授权码")
|
||||
private String authCode;
|
||||
|
||||
@ApiModelProperty(value = "推荐人userId")
|
||||
private Long referralUserId;
|
||||
}
|
||||
|
||||
@ -32,6 +32,9 @@ public class SimpleUserInfoDTO {
|
||||
@ApiModelProperty("支付宝小程序 userid")
|
||||
private String alipayUserid;
|
||||
|
||||
@ApiModelProperty("支付宝小程序 openid")
|
||||
private String alipayOpenid;
|
||||
|
||||
@ApiModelProperty("是否认证0未认证1已认证")
|
||||
private Integer authed;
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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<BaseUserPO> 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);
|
||||
|
||||
@ -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<String, Object> 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<String, Object> 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<String, Object> getUserInfoByUserId(String userId) {
|
||||
try {
|
||||
// 这里可以调用支付宝的用户信息接口获取用户详情
|
||||
// 为简化实现,直接返回基础信息
|
||||
Map<String, Object> 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<String, Object> userInfo = getUserInfoByAuthCode(authCode);
|
||||
return (String) userInfo.get("mobile");
|
||||
} catch (Exception e) {
|
||||
log.error("获取支付宝手机号异常", e);
|
||||
throw new BizException("获取支付宝手机号异常");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user