diff --git a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/RemoteImgService.java b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/RemoteImgService.java index 7cad45e..508d1cf 100644 --- a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/RemoteImgService.java +++ b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/RemoteImgService.java @@ -5,11 +5,13 @@ import com.bnyer.common.core.domain.R; import com.bnyer.common.core.dto.CreatorLoginDto; import com.bnyer.common.core.dto.FhLoginDto; import com.bnyer.common.core.dto.TiktokLoginDto; +import com.bnyer.common.core.dto.WxLoginDto; import com.bnyer.img.api.dto.TiktokImgMiniDto; import com.bnyer.img.api.factory.RemoteImgFallbackFactory; import com.bnyer.img.api.model.LoginCreator; import com.bnyer.img.api.model.LoginFhUser; import com.bnyer.img.api.model.LoginTiktokUser; +import com.bnyer.img.api.model.LoginWechatUser; import io.swagger.annotations.ApiParam; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.validation.annotation.Validated; @@ -56,4 +58,12 @@ public interface RemoteImgService { */ @PostMapping(value = "/img/mini/tiktok/getTiktokUserInfo") public R getTiktokLoginUserByLoginParam(@Validated @RequestBody @ApiParam("登录对象") TiktokLoginDto dto); + + /** + * 获取微信小程序用户信息 + * @param dto 登录数据 + * @return - + */ + @PostMapping(value = "/img/mini/wx/getWechatUserInfo") + R getWxLoginUserByLoginParam(@Validated @RequestBody @ApiParam("登录对象") WxLoginDto dto); } diff --git a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/factory/RemoteImgFallbackFactory.java b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/factory/RemoteImgFallbackFactory.java index b744b2d..1629027 100644 --- a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/factory/RemoteImgFallbackFactory.java +++ b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/factory/RemoteImgFallbackFactory.java @@ -4,11 +4,13 @@ import com.bnyer.common.core.domain.R; import com.bnyer.common.core.dto.CreatorLoginDto; import com.bnyer.common.core.dto.FhLoginDto; import com.bnyer.common.core.dto.TiktokLoginDto; +import com.bnyer.common.core.dto.WxLoginDto; import com.bnyer.img.api.RemoteImgService; import com.bnyer.img.api.dto.TiktokImgMiniDto; import com.bnyer.img.api.model.LoginCreator; import com.bnyer.img.api.model.LoginFhUser; import com.bnyer.img.api.model.LoginTiktokUser; +import com.bnyer.img.api.model.LoginWechatUser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.cloud.openfeign.FallbackFactory; @@ -49,6 +51,11 @@ public class RemoteImgFallbackFactory implements FallbackFactory getTiktokLoginUserByLoginParam(TiktokLoginDto dto) { return R.fail("获取抖音小程序用户信息失败:" + throwable.getMessage()); } + + @Override + public R getWxLoginUserByLoginParam(WxLoginDto dto) { + return R.fail("获取微信小程序用户信息失败:" + throwable.getMessage()); + } }; } } diff --git a/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/model/LoginWechatUser.java b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/model/LoginWechatUser.java new file mode 100644 index 0000000..cb68c20 --- /dev/null +++ b/bnyer-api/bnyer-api-img/src/main/java/com/bnyer/img/api/model/LoginWechatUser.java @@ -0,0 +1,60 @@ +package com.bnyer.img.api.model; + +import com.bnyer.common.core.vo.WxUserLoginVo; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author chengkun + * @date 2022/5/30 16:25 + */ + +/** + * 微信小程序用户信息 + */ +@Data +public class LoginWechatUser implements Serializable { + + private static final long serialVersionUID = 1L; + + /** + * 微信小程序用户唯一标识 + */ + private String token; + + /** + * 主键id + */ + private Long wxUserId; + + /** + * 微信小程序用户开放Id + */ + private String wxUserOpenId; + + /** + * 微信小程序用户昵称 + */ + private String wxUserName; + + /** + * 登录时间 + */ + private Long loginTime; + + /** + * 过期时间 + */ + private Long expireTime; + + /** + * 登录IP地址 + */ + private String ipaddr; + + /** + * 微信小程序用户信息 + */ + private WxUserLoginVo wxUser; +} diff --git a/bnyer-auth/src/main/java/com/bnyer/auth/controller/WxUserController.java b/bnyer-auth/src/main/java/com/bnyer/auth/controller/WxUserController.java new file mode 100644 index 0000000..a992672 --- /dev/null +++ b/bnyer-auth/src/main/java/com/bnyer/auth/controller/WxUserController.java @@ -0,0 +1,49 @@ +package com.bnyer.auth.controller; + +import com.bnyer.auth.service.WxUserLoginService; +import com.bnyer.common.core.domain.R; +import com.bnyer.common.core.dto.WxLoginDto; +import com.bnyer.common.security.service.WxUserTokenService; +import com.bnyer.common.security.utils.SecurityUtils; +import com.bnyer.img.api.model.LoginWechatUser; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +/** + * 微信小程序token 控制 + * + * @author penny + */ +@RestController +public class WxUserController +{ + @Autowired + private WxUserLoginService wxUserLoginService; + + @Autowired + private WxUserTokenService WxUserTokenService; + + @ApiOperation(value="微信小程序用户登录") + @PostMapping(value = "/wxUserLogin") + public R loginWx(@Validated @RequestBody @ApiParam("登录对象") WxLoginDto dto){ + LoginWechatUser loginWxUser = wxUserLoginService.login(dto); + return R.ok(WxUserTokenService.createToken(loginWxUser)); + } + + @PostMapping("/wxUserLogout") + @ApiOperation("微信小程序用户注销") + public R logout(HttpServletRequest request) + { + String token = SecurityUtils.getToken(request); + //删除微信用户缓存 + WxUserTokenService.delLoginFhUser(token); + return R.ok(); + } +} diff --git a/bnyer-auth/src/main/java/com/bnyer/auth/service/WxUserLoginService.java b/bnyer-auth/src/main/java/com/bnyer/auth/service/WxUserLoginService.java new file mode 100644 index 0000000..aa2b169 --- /dev/null +++ b/bnyer-auth/src/main/java/com/bnyer/auth/service/WxUserLoginService.java @@ -0,0 +1,26 @@ +package com.bnyer.auth.service; + +import com.bnyer.common.core.dto.FhLoginDto; +import com.bnyer.common.core.dto.WxLoginDto; +import com.bnyer.img.api.RemoteImgService; +import com.bnyer.img.api.model.LoginFhUser; +import com.bnyer.img.api.model.LoginWechatUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +/** + * 微信小程序端用户登录校验方法 + * + * @author penny + */ +@Component +public class WxUserLoginService { + + @Autowired + private RemoteImgService remoteImgService; + + public LoginWechatUser login(WxLoginDto dto) { + return remoteImgService.getWxLoginUserByLoginParam(dto).getData(); + } + +} \ No newline at end of file diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/utils/JwtUtils.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/utils/JwtUtils.java index 4f68a12..5831c0b 100644 --- a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/utils/JwtUtils.java +++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/utils/JwtUtils.java @@ -261,6 +261,16 @@ public class JwtUtils return getValue(claims, SecurityConstants.DETAILS_WECHAT_USERNAME); } + /** + * 根据身份信息获取微信用户openid + * + * @param claims 身份信息 + * @return - + */ + public static String getWechatUserOpenid(Claims claims) + { + return getValue(claims, SecurityConstants.DETAILS_WECHAT_OPENID); + } //***************************微信用户信息结束************************************ //***************************快手用户信息开始************************************ diff --git a/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/WxUserLoginVo.java b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/WxUserLoginVo.java new file mode 100644 index 0000000..0a5709a --- /dev/null +++ b/bnyer-common/bnyer-common-core/src/main/java/com/bnyer/common/core/vo/WxUserLoginVo.java @@ -0,0 +1,45 @@ +package com.bnyer.common.core.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; + + +@Getter +@Setter +@ApiModel("微信小程序用户登录响应类") +public class WxUserLoginVo implements Serializable { + + @ApiModelProperty(value="id") + private Long id; + + @ApiModelProperty(value="用户昵称") + private String username; + + @ApiModelProperty(value="微信id") + private String wxCode; + + @ApiModelProperty(value="是否为vip(0->否;1->是)") + private String isVip; + + @ApiModelProperty(value="头像img地址") + private String img; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value="创建时间") + private Date createTime; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value="更新时间") + private Date updateTime; + + @ApiModelProperty(value="排序") + private Integer sort; + + private static final long serialVersionUID = 1L; +} diff --git a/bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/service/WxUserTokenService.java b/bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/service/WxUserTokenService.java new file mode 100644 index 0000000..8be3a60 --- /dev/null +++ b/bnyer-common/bnyer-common-security/src/main/java/com/bnyer/common/security/service/WxUserTokenService.java @@ -0,0 +1,101 @@ +package com.bnyer.common.security.service; + +import com.bnyer.common.core.constant.CacheConstants; +import com.bnyer.common.core.constant.RedisKeyConstant; +import com.bnyer.common.core.constant.SecurityConstants; +import com.bnyer.common.core.utils.JwtUtils; +import com.bnyer.common.core.utils.ServletUtils; +import com.bnyer.common.core.utils.StringUtils; +import com.bnyer.common.core.utils.ip.IpUtils; +import com.bnyer.common.core.utils.uuid.IdUtils; +import com.bnyer.common.redis.service.RedisService; +import com.bnyer.img.api.model.LoginFhUser; +import com.bnyer.img.api.model.LoginWechatUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * 微信端小程序token验证处理 + * + * @author penny + */ +@Component +public class WxUserTokenService +{ + @Autowired + private RedisService redisService; + + protected static final long MILLIS_SECOND = 1000; + + protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND; + + private final static long expireTime = CacheConstants.EXPIRATION; + + private final static String ACCESS_TOKEN = RedisKeyConstant.WECHAT_USER_LOGIN_KEY; + + /** + * 创建令牌 + */ + public Map createToken(LoginWechatUser loginWechatUser) + { + String token = IdUtils.fastUUID(); + Long wxUserId = loginWechatUser.getWxUser().getId(); + String wxUserName = loginWechatUser.getWxUser().getUsername(); + String openId = loginWechatUser.getWxUser().getWxCode(); + loginWechatUser.setToken(token); + loginWechatUser.setWxUserId(wxUserId); + loginWechatUser.setWxUserName(wxUserName); + loginWechatUser.setWxUserOpenId(openId); + loginWechatUser.setIpaddr(IpUtils.getIpAddr(ServletUtils.getRequest())); + refreshToken(loginWechatUser); + + // Jwt存储信息 + Map claimsMap = new HashMap(); + claimsMap.put(SecurityConstants.WECHAT_USER_KEY, token); + claimsMap.put(SecurityConstants.DETAILS_WECHAT_USER_ID, wxUserId); + claimsMap.put(SecurityConstants.DETAILS_WECHAT_USERNAME, wxUserName); + claimsMap.put(SecurityConstants.DETAILS_WECHAT_OPENID,openId); + + // 接口返回信息 + Map rspMap = new HashMap(); + rspMap.put("access_token", JwtUtils.createToken(claimsMap)); + rspMap.put("userInfo",loginWechatUser.getWxUser()); + rspMap.put("expires_in", expireTime); + return rspMap; + } + + /** + * 删除微信小程序用户缓存信息 + */ + public void delLoginFhUser(String token) + { + if (StringUtils.isNotEmpty(token)) + { + String wxUserKey = JwtUtils.getWechatUserKey(token); + redisService.deleteObject(getTokenKey(wxUserKey)); + } + } + + /** + * 刷新令牌有效期 + * + * @param loginWechatUser 微信小程序用户登录信息 + */ + public void refreshToken(LoginWechatUser loginWechatUser) + { + loginWechatUser.setLoginTime(System.currentTimeMillis()); + loginWechatUser.setExpireTime(loginWechatUser.getLoginTime() + expireTime * MILLIS_MINUTE); + // 根据uuid将loginWechatUser缓存 + String fhUserKey = getTokenKey(loginWechatUser.getToken()); + redisService.setCacheObject(fhUserKey, loginWechatUser, expireTime, TimeUnit.MINUTES); + } + + private String getTokenKey(String token) + { + return ACCESS_TOKEN + token; + } +} \ No newline at end of file diff --git a/bnyer-common/bnyer-common-security/src/main/resources/META-INF/spring.factories b/bnyer-common/bnyer-common-security/src/main/resources/META-INF/spring.factories index 19e2667..65c47da 100644 --- a/bnyer-common/bnyer-common-security/src/main/resources/META-INF/spring.factories +++ b/bnyer-common/bnyer-common-security/src/main/resources/META-INF/spring.factories @@ -4,6 +4,7 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.bnyer.common.security.service.CreatorTokenService,\ com.bnyer.common.security.service.FhUserTokenService,\ com.bnyer.common.security.service.TiktokUserTokenService,\ + com.bnyer.common.security.service.WxUserTokenService,\ com.bnyer.common.security.aspect.PreAuthorizeAspect,\ com.bnyer.common.security.aspect.InnerAuthAspect,\ com.bnyer.common.security.handler.GlobalExceptionHandler diff --git a/bnyer-gateway/src/main/java/com/bnyer/gateway/filter/AuthFilter.java b/bnyer-gateway/src/main/java/com/bnyer/gateway/filter/AuthFilter.java index 3d85612..b7681d9 100644 --- a/bnyer-gateway/src/main/java/com/bnyer/gateway/filter/AuthFilter.java +++ b/bnyer-gateway/src/main/java/com/bnyer/gateway/filter/AuthFilter.java @@ -152,7 +152,8 @@ public class AuthFilter implements GlobalFilter, Ordered } String wechatUserId = JwtUtils.getWechatUserId(claims); String wechatUserName = JwtUtils.getWechatUserName(claims); - if (StringUtils.isEmpty(wechatUserId) || StringUtils.isEmpty(wechatUserName)) + String openId = JwtUtils.getWechatUserOpenid(claims); + if (StringUtils.isEmpty(wechatUserId) || StringUtils.isEmpty(wechatUserName) || StringUtils.isEmpty(openId)) { return unauthorizedResponse(exchange, "令牌验证失败"); } @@ -160,6 +161,7 @@ public class AuthFilter implements GlobalFilter, Ordered addHeader(mutate, SecurityConstants.WECHAT_USER_KEY, wechatUserKey); addHeader(mutate, SecurityConstants.DETAILS_WECHAT_USER_ID, wechatUserId); addHeader(mutate, SecurityConstants.DETAILS_WECHAT_USERNAME, wechatUserName); + addHeader(mutate,SecurityConstants.DETAILS_WECHAT_OPENID,openId); // 内部请求来源参数清除 removeHeader(mutate, SecurityConstants.FROM_SOURCE); return chain.filter(exchange.mutate().request(mutate.build()).build()); diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/WxMiniController.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/WxMiniController.java index d79b827..5c0d447 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/WxMiniController.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/WxMiniController.java @@ -4,11 +4,13 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.bnyer.common.core.constant.TiktokConstant; import com.bnyer.common.core.domain.Feedback; +import com.bnyer.common.core.domain.R; import com.bnyer.common.core.dto.*; import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.web.controller.BaseController; import com.bnyer.common.core.web.domain.AjaxResult; import com.bnyer.common.core.web.page.TableDataInfo; +import com.bnyer.img.api.model.LoginWechatUser; import com.bnyer.img.service.*; import com.bnyer.img.vo.CreatorDetailsVo; import com.bnyer.img.vo.CreatorFollowVo; @@ -203,11 +205,17 @@ public class WxMiniController extends BaseController { return AjaxResult.success(tiktokLikeService.judgeLike(dto.getUserId(),dto.getImgId(),"2")); } - @ApiOperation(value="用户登录") - @PostMapping(value = "/loginWx") - public AjaxResult loginWx(@Validated @RequestBody @ApiParam("登录对象") WxLoginDto dto){ - log.info("【微信图文小程序】用户【{}】授权登录了", dto.getCode()); - return AjaxResult.success(wxUserService.login(dto)); +// @ApiOperation(value="用户登录") +// @PostMapping(value = "/loginWx") +// public AjaxResult loginWx(@Validated @RequestBody @ApiParam("登录对象") WxLoginDto dto){ +// log.info("【微信图文小程序】用户【{}】授权登录了", dto.getCode()); +// return AjaxResult.success(wxUserService.login(dto)); +// } + + @ApiOperation(value="获取微信小程序用户") + @PostMapping(value = "/getWechatUserInfo") + public R getWxLoginUserByLoginParam(@Validated @RequestBody @ApiParam("登录对象") WxLoginDto dto){ + return wxUserService.getWxLoginUserByLoginParam(dto); } //@TokenCheck diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/WxUserService.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/WxUserService.java index 99960b9..08d7f68 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/WxUserService.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/WxUserService.java @@ -1,8 +1,8 @@ package com.bnyer.img.service; +import com.bnyer.common.core.domain.R; import com.bnyer.common.core.dto.WxLoginDto; - -import java.util.Map; +import com.bnyer.img.api.model.LoginWechatUser; public interface WxUserService { @@ -11,7 +11,7 @@ public interface WxUserService { * @param param 登录参数 * @return - */ - Map login(WxLoginDto param); + //Map login(WxLoginDto param); /** * 检查某平台用户当日下载次数是否超标 @@ -21,4 +21,11 @@ public interface WxUserService { * @return - */ boolean checkUserCanDownload(Long userId,String platform,String appType); + + /** + * 获取微信小程序用户 + * @param dto 登录参数 + * @return - + */ + R getWxLoginUserByLoginParam(WxLoginDto dto); } diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/WxUserServiceImpl.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/WxUserServiceImpl.java index 9fd2430..f0ad4f9 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/WxUserServiceImpl.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/WxUserServiceImpl.java @@ -4,19 +4,22 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.bnyer.common.core.constant.RedisKeyConstant; import com.bnyer.common.core.constant.TiktokConstant; +import com.bnyer.common.core.domain.R; import com.bnyer.common.core.domain.WxUser; import com.bnyer.common.core.dto.WxLoginDto; import com.bnyer.common.core.exception.ServiceException; import com.bnyer.common.core.utils.Sm4Util; import com.bnyer.common.core.utils.StringUtils; -import com.bnyer.common.core.utils.uuid.IdUtils; +import com.bnyer.common.core.vo.WxUserLoginVo; import com.bnyer.common.redis.service.RedisService; +import com.bnyer.img.api.model.LoginWechatUser; import com.bnyer.img.config.WxConfig; import com.bnyer.img.mapper.WxUserMapper; import com.bnyer.img.service.WxUserService; import com.bnyer.img.vo.WxSessionInfoVo; import com.bnyer.img.vo.WxUserInfoVo; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; @@ -27,9 +30,6 @@ import javax.crypto.spec.SecretKeySpec; import java.text.SimpleDateFormat; import java.util.Base64; import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.TimeUnit; @Service @Slf4j @@ -122,34 +122,34 @@ public class WxUserServiceImpl implements WxUserService { return wxUser; } - @Override - public Map login(WxLoginDto dto) { - WxSessionInfoVo sessionInfo = this.getSessionInfo(dto.getCode()); - //检查数据库中是否存在该openId,存在则直接设置会话状态登录;不存在则新增 - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(sessionInfo.getOpenId() != null, WxUser::getWxCode, Sm4Util.sm4Encryption(sessionInfo.getOpenId())); - WxUser wxUser = wxUserMapper.selectOne(wrapper); - if (wxUser == null) { - //新用户,新增 - wxUser = this.saveUserInfo(sessionInfo.getOpenId(), sessionInfo.getSessionKey(), dto.getEncryptedData(), dto.getIv()); - } - //设置会话状态 - String redisKey = RedisKeyConstant.WECHAT_USER_LOGIN_KEY + Sm4Util.sm4Encryption(sessionInfo.getOpenId()); - //存在该登录态则删除刷新 - if (redisService.hasKey(redisKey)) { - redisService.deleteObject(redisKey); - } - StringBuffer sb = new StringBuffer(); - String randomId = IdUtils.fastSimpleUUID(); - sb.append(randomId).append("#").append(sessionInfo.getOpenId()); - //设置登录会话 - Map map = new HashMap<>(2); - map.put("token", sb.toString()); - map.put("sessionKey", sessionInfo.getSessionKey()); - map.put("userInfo", wxUser); - redisService.setCacheObject(redisKey, map, 30L, TimeUnit.DAYS); - return map; - } +// @Override +// public Map login(WxLoginDto dto) { +// WxSessionInfoVo sessionInfo = this.getSessionInfo(dto.getCode()); +// //检查数据库中是否存在该openId,存在则直接设置会话状态登录;不存在则新增 +// LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); +// wrapper.eq(sessionInfo.getOpenId() != null, WxUser::getWxCode, Sm4Util.sm4Encryption(sessionInfo.getOpenId())); +// WxUser wxUser = wxUserMapper.selectOne(wrapper); +// if (wxUser == null) { +// //新用户,新增 +// wxUser = this.saveUserInfo(sessionInfo.getOpenId(), sessionInfo.getSessionKey(), dto.getEncryptedData(), dto.getIv()); +// } +// //设置会话状态 +// String redisKey = RedisKeyConstant.WECHAT_USER_LOGIN_KEY + Sm4Util.sm4Encryption(sessionInfo.getOpenId()); +// //存在该登录态则删除刷新 +// if (redisService.hasKey(redisKey)) { +// redisService.deleteObject(redisKey); +// } +// StringBuffer sb = new StringBuffer(); +// String randomId = IdUtils.fastSimpleUUID(); +// sb.append(randomId).append("#").append(sessionInfo.getOpenId()); +// //设置登录会话 +// Map map = new HashMap<>(2); +// map.put("token", sb.toString()); +// map.put("sessionKey", sessionInfo.getSessionKey()); +// map.put("userInfo", wxUser); +// redisService.setCacheObject(redisKey, map, 30L, TimeUnit.DAYS); +// return map; +// } @Override public boolean checkUserCanDownload(Long userId, String platform, String appType) { @@ -170,4 +170,22 @@ public class WxUserServiceImpl implements WxUserService { return false; } } + + @Override + public R getWxLoginUserByLoginParam(WxLoginDto dto) { + WxSessionInfoVo sessionInfo = this.getSessionInfo(dto.getCode()); + //检查数据库中是否存在该openId,存在则直接返回结果;不存在则新增 + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(sessionInfo.getOpenId() != null, WxUser::getWxCode, Sm4Util.sm4Encryption(sessionInfo.getOpenId())); + WxUser wxUser = wxUserMapper.selectOne(wrapper); + if (wxUser == null) { + //新用户,新增 + wxUser = this.saveUserInfo(sessionInfo.getOpenId(), sessionInfo.getSessionKey(), dto.getEncryptedData(), dto.getIv()); + } + LoginWechatUser loginWxUser = new LoginWechatUser(); + WxUserLoginVo loginVo = new WxUserLoginVo(); + BeanUtils.copyProperties(wxUser,loginVo); + loginWxUser.setWxUser(loginVo); + return R.ok(loginWxUser); + } }