diff --git a/buyer-api/src/main/java/cn/lili/controller/passport/connect/ConnectBuyerWebController.java b/buyer-api/src/main/java/cn/lili/controller/passport/connect/ConnectBuyerWebController.java index af2eec2b..ddc5629d 100644 --- a/buyer-api/src/main/java/cn/lili/controller/passport/connect/ConnectBuyerWebController.java +++ b/buyer-api/src/main/java/cn/lili/controller/passport/connect/ConnectBuyerWebController.java @@ -75,25 +75,14 @@ public class ConnectBuyerWebController { return connectUtil.getResult(state); } -// @GetMapping("/register/auto") -// @ApiOperation(value = "WEB信任登录授权") -// public ResultMessage webAuthorize() { -// Token token = memberService.autoRegister(); -// return ResultUtil.data(token); -// } - - @ApiOperation(value = "unionID登录") - @ApiImplicitParams({ - @ApiImplicitParam(name = "openId", value = "openid", required = true, paramType = "query"), - @ApiImplicitParam(name = "type", value = "联合类型", required = true, - allowableValues = "WECHAT,QQ,ALIPAY,WEIBO,APPLE", paramType = "query"), - @ApiImplicitParam(name = "uniAccessToken", value = "联合登陆返回的accessToken", required = true, paramType = "query") - }) + @ApiOperation(value = "APP-unionID登录") @GetMapping("/app/login") public ResultMessage unionLogin(ConnectAuthUser authUser, @RequestHeader("uuid") String uuid) { try { + System.out.println(1); return ResultUtil.data(connectService.unionLoginCallback(authUser, uuid)); } catch (Exception e) { + e.printStackTrace(); log.error("unionID登录错误", e); } return null; diff --git a/consumer/src/main/java/cn/lili/event/impl/MemberExecute.java b/consumer/src/main/java/cn/lili/event/impl/MemberExecute.java index 6fc02177..1ec23a5b 100644 --- a/consumer/src/main/java/cn/lili/event/impl/MemberExecute.java +++ b/consumer/src/main/java/cn/lili/event/impl/MemberExecute.java @@ -1,9 +1,12 @@ package cn.lili.event.impl; import cn.hutool.core.util.StrUtil; +import cn.lili.common.enums.ClientTypeEnum; import cn.lili.event.MemberConnectLoginEvent; import cn.lili.event.MemberLoginEvent; import cn.lili.modules.connect.entity.dto.ConnectAuthUser; +import cn.lili.modules.connect.entity.enums.ConnectEnum; +import cn.lili.modules.connect.entity.enums.SourceEnum; import cn.lili.modules.connect.service.ConnectService; import cn.lili.modules.member.entity.dos.Member; import cn.lili.modules.member.service.MemberService; @@ -38,11 +41,12 @@ public class MemberExecute implements MemberLoginEvent, MemberConnectLoginEvent //保存UnionID if (StrUtil.isNotBlank(authUser.getToken().getUnionId())) { - connectService.loginBindUser(member.getId(), authUser.getToken().getUnionId(), authUser.getType()); + connectService.loginBindUser(member.getId(), authUser.getToken().getUnionId(), authUser.getSource()); } //保存OpenID if (StrUtil.isNotBlank(authUser.getUuid())) { - connectService.loginBindUser(member.getId(), authUser.getUuid(), authUser.getType()); + SourceEnum sourceEnum = SourceEnum.getSourceEnum(ConnectEnum.valueOf(authUser.getSource()), ClientTypeEnum.valueOf(authUser.getType())); + connectService.loginBindUser(member.getId(), authUser.getUuid(), sourceEnum.name()); } } diff --git a/framework/src/main/java/cn/lili/common/enums/ClientTypeEnum.java b/framework/src/main/java/cn/lili/common/enums/ClientTypeEnum.java index 78bbdf75..6ba9190f 100644 --- a/framework/src/main/java/cn/lili/common/enums/ClientTypeEnum.java +++ b/framework/src/main/java/cn/lili/common/enums/ClientTypeEnum.java @@ -31,7 +31,7 @@ public enum ClientTypeEnum { */ UNKNOWN("未知"); - private final String clientName; + private String clientName; ClientTypeEnum(String des) { this.clientName = des; diff --git a/framework/src/main/java/cn/lili/modules/connect/entity/dto/ConnectAuthUser.java b/framework/src/main/java/cn/lili/modules/connect/entity/dto/ConnectAuthUser.java index 66373c55..a3b011d3 100644 --- a/framework/src/main/java/cn/lili/modules/connect/entity/dto/ConnectAuthUser.java +++ b/framework/src/main/java/cn/lili/modules/connect/entity/dto/ConnectAuthUser.java @@ -67,11 +67,7 @@ public class ConnectAuthUser implements Serializable { * 用户来源 */ private String source; - /** - * 用户来源 - * 例如:微信、支付宝、微博 - */ - private String source1; + /** * 类型 * 例如:PC、WAP、小程序 diff --git a/framework/src/main/java/cn/lili/modules/connect/entity/enums/SourceEnum.java b/framework/src/main/java/cn/lili/modules/connect/entity/enums/SourceEnum.java index 685468f7..847db2c7 100644 --- a/framework/src/main/java/cn/lili/modules/connect/entity/enums/SourceEnum.java +++ b/framework/src/main/java/cn/lili/modules/connect/entity/enums/SourceEnum.java @@ -1,5 +1,7 @@ package cn.lili.modules.connect.entity.enums; +import cn.lili.common.enums.ClientTypeEnum; + /** * 联合登陆-渠道枚举 * @@ -13,6 +15,12 @@ public enum SourceEnum { WECHAT_OFFIACCOUNT_OPEN_ID("微信公众号 openid登录"), WECHAT_MP_OPEN_ID("微信小程序 openid登录"), WECHAT_APP_OPEN_ID("微信APP openid登录"), + + QQ_APP_OPEN_ID("QQ APP openid登录"), + QQ_PC_OPEN_ID("QQ PC应用 openid登录"), + QQ_H5_OPEN_ID("QQ H5应用 openid登录"), + + APPLE_OPEN_ID("苹果 openid登录"), ; @@ -21,4 +29,34 @@ public enum SourceEnum { SourceEnum(String description) { this.description = description; } + + public static SourceEnum getSourceEnum(ConnectEnum source, ClientTypeEnum type) { + switch (source) { + case WECHAT: + switch (type) { + case APP: + return WECHAT_APP_OPEN_ID; + case WECHAT_MP: + return WECHAT_MP_OPEN_ID; + case PC: + return WECHAT_PC_OPEN_ID; + case H5: + return WECHAT_OFFIACCOUNT_OPEN_ID; + } + break; + case QQ: + switch (type) { + case APP: + return QQ_APP_OPEN_ID; + case PC: + return QQ_PC_OPEN_ID; + case H5: + return QQ_H5_OPEN_ID; + } + break; + case APPLE: + return APPLE_OPEN_ID; + } + return null; + } } diff --git a/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthQQRequest.java b/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthQQRequest.java index 3578f157..4cf53b78 100644 --- a/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthQQRequest.java +++ b/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthQQRequest.java @@ -2,6 +2,8 @@ package cn.lili.modules.connect.request; import cn.hutool.core.convert.Convert; import cn.lili.cache.Cache; +import cn.lili.common.enums.ClientTypeEnum; +import cn.lili.common.utils.HttpUtils; import cn.lili.common.utils.StringUtils; import cn.lili.common.utils.UrlBuilder; import cn.lili.modules.connect.config.AuthConfig; @@ -12,9 +14,9 @@ import cn.lili.modules.connect.entity.dto.AuthToken; import cn.lili.modules.connect.entity.dto.ConnectAuthUser; import cn.lili.modules.connect.entity.enums.AuthResponseStatus; import cn.lili.modules.connect.entity.enums.AuthUserGender; +import cn.lili.modules.connect.entity.enums.ConnectEnum; import cn.lili.modules.connect.exception.AuthException; import cn.lili.modules.connect.util.GlobalAuthUtils; -import cn.lili.common.utils.HttpUtils; import com.alibaba.fastjson.JSONObject; import java.util.Map; @@ -67,7 +69,8 @@ public class BaseAuthQQRequest extends BaseAuthRequest { .uuid(openId) .gender(AuthUserGender.getRealGender(object.getString("gender"))) .token(authToken) - .source(source.toString()) + .source(ConnectEnum.QQ.name()) + .type(ClientTypeEnum.PC.name()) .build(); } diff --git a/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthWeChatPCRequest.java b/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthWeChatPCRequest.java index 615fee93..36f68f56 100644 --- a/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthWeChatPCRequest.java +++ b/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthWeChatPCRequest.java @@ -1,6 +1,8 @@ package cn.lili.modules.connect.request; import cn.lili.cache.Cache; +import cn.lili.common.enums.ClientTypeEnum; +import cn.lili.common.utils.HttpUtils; import cn.lili.common.utils.UrlBuilder; import cn.lili.modules.connect.config.AuthConfig; import cn.lili.modules.connect.config.ConnectAuthEnum; @@ -13,7 +15,6 @@ import cn.lili.modules.connect.entity.enums.AuthUserGender; import cn.lili.modules.connect.entity.enums.ConnectEnum; import cn.lili.modules.connect.entity.enums.SourceEnum; import cn.lili.modules.connect.exception.AuthException; -import cn.lili.common.utils.HttpUtils; import com.alibaba.fastjson.JSONObject; /** @@ -61,8 +62,8 @@ public class BaseAuthWeChatPCRequest extends BaseAuthRequest { .uuid(authToken.getOpenId()) .gender(AuthUserGender.getWechatRealGender(object.getString("sex"))) .token(authToken) - .source(source.toString()) - .source1(ConnectEnum.WECHAT.name()) + .source(ConnectEnum.WECHAT.name()) + .type(ClientTypeEnum.H5.name()) .type(SourceEnum.WECHAT_PC_OPEN_ID.name()) .build(); } @@ -116,6 +117,7 @@ public class BaseAuthWeChatPCRequest extends BaseAuthRequest { */ @Override public String authorize(String state) { + return UrlBuilder.fromBaseUrl(source.authorize()) .queryParam("response_type", "code") .queryParam("appid", config.getClientId()) diff --git a/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthWeChatRequest.java b/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthWeChatRequest.java index f703f937..a430101f 100644 --- a/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthWeChatRequest.java +++ b/framework/src/main/java/cn/lili/modules/connect/request/BaseAuthWeChatRequest.java @@ -1,6 +1,8 @@ package cn.lili.modules.connect.request; import cn.lili.cache.Cache; +import cn.lili.common.enums.ClientTypeEnum; +import cn.lili.common.utils.HttpUtils; import cn.lili.common.utils.UrlBuilder; import cn.lili.modules.connect.config.AuthConfig; import cn.lili.modules.connect.config.ConnectAuthEnum; @@ -14,7 +16,6 @@ import cn.lili.modules.connect.entity.enums.ConnectEnum; import cn.lili.modules.connect.entity.enums.SourceEnum; import cn.lili.modules.connect.exception.AuthException; import cn.lili.modules.connect.util.GlobalAuthUtils; -import cn.lili.common.utils.HttpUtils; import com.alibaba.fastjson.JSONObject; /** @@ -63,8 +64,8 @@ public class BaseAuthWeChatRequest extends BaseAuthRequest { .uuid(openId) .gender(AuthUserGender.getWechatRealGender(object.getString("sex"))) .token(authToken) - .source(source.toString()) - .source1(ConnectEnum.WECHAT.name()) + .source(ConnectEnum.WECHAT.name()) + .type(ClientTypeEnum.H5.name()) .type(SourceEnum.WECHAT_OFFIACCOUNT_OPEN_ID.name()) .build(); } diff --git a/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java b/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java index e8888c9a..b75f55cc 100644 --- a/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java +++ b/framework/src/main/java/cn/lili/modules/connect/serviceimpl/ConnectServiceImpl.java @@ -1,26 +1,25 @@ package cn.lili.modules.connect.serviceimpl; import cn.hutool.core.text.CharSequenceUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import cn.lili.cache.Cache; import cn.lili.cache.CachePrefix; -import cn.lili.common.context.ThreadContextHolder; import cn.lili.common.enums.ClientTypeEnum; import cn.lili.common.enums.ResultCode; -import cn.lili.common.event.TransactionCommitSendMQEvent; import cn.lili.common.exception.ServiceException; import cn.lili.common.properties.RocketmqCustomProperties; import cn.lili.common.security.AuthUser; import cn.lili.common.security.context.UserContext; import cn.lili.common.security.token.Token; -import cn.lili.common.utils.CookieUtil; import cn.lili.common.utils.HttpUtils; import cn.lili.modules.connect.entity.Connect; import cn.lili.modules.connect.entity.dto.ConnectAuthUser; import cn.lili.modules.connect.entity.dto.MemberConnectLoginMessage; import cn.lili.modules.connect.entity.dto.WechatMPLoginParams; import cn.lili.modules.connect.entity.enums.ConnectEnum; +import cn.lili.modules.connect.entity.enums.SourceEnum; import cn.lili.modules.connect.mapper.ConnectMapper; import cn.lili.modules.connect.service.ConnectService; import cn.lili.modules.member.entity.dos.Member; @@ -33,7 +32,6 @@ import cn.lili.modules.system.entity.dto.connect.dto.WechatConnectSettingItem; import cn.lili.modules.system.entity.enums.SettingEnum; import cn.lili.modules.system.service.SettingService; import cn.lili.rocketmq.RocketmqSendCallbackBuilder; -import cn.lili.rocketmq.tags.GoodsTagsEnum; import cn.lili.rocketmq.tags.MemberTagsEnum; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -41,7 +39,6 @@ import lombok.extern.slf4j.Slf4j; import org.apache.rocketmq.spring.core.RocketMQTemplate; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -53,7 +50,6 @@ import java.nio.charset.StandardCharsets; import java.security.AlgorithmParameters; import java.security.Security; import java.util.*; -import java.util.concurrent.TimeUnit; /** * 联合登陆接口实现 @@ -88,7 +84,6 @@ public class ConnectServiceImpl extends ServiceImpl impl @Override @Transactional(rollbackFor = Exception.class) public Token unionLoginCallback(ConnectAuthUser authUser, String uuid) { - return this.unionLoginCallback(authUser, false); } @@ -249,11 +244,20 @@ public class ConnectServiceImpl extends ServiceImpl impl */ private Token unionLoginCallback(ConnectAuthUser authUser, boolean longTerm) { - //使用UnionId登录 + try { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() - .eq(Connect::getUnionId, authUser.getToken().getUnionId()) - .eq(Connect::getUnionType, authUser.getSource1()); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + //使用UnionId登录 + if (StrUtil.isNotBlank(authUser.getToken().getUnionId())) { + queryWrapper.eq(Connect::getUnionId, authUser.getToken().getUnionId()) + .eq(Connect::getUnionType, authUser.getSource()); + } else { + //使用OpenID登录 + SourceEnum sourceEnum = SourceEnum.getSourceEnum(ConnectEnum.valueOf(authUser.getType()), ClientTypeEnum.valueOf(authUser.getSource())); + queryWrapper.eq(Connect::getUnionId, authUser.getToken().getUnionId()) + .eq(Connect::getUnionType, sourceEnum.name()); + } + //查询绑定关系 Connect connect = this.getOne(queryWrapper); Member member = new Member(); @@ -353,4 +357,6 @@ public class ConnectServiceImpl extends ServiceImpl impl } throw new ServiceException(ResultCode.USER_CONNECT_ERROR); } + + } \ No newline at end of file