From 7693272d85e41ad3ea843ca2011311c8cf75ce9b Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期四, 11 九月 2025 09:03:22 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/haizhentong --- ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java | 74 ++++++++++++++++++++++++++++++++++++ 1 files changed, 73 insertions(+), 1 deletions(-) diff --git a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java index 1d9186e..453956e 100644 --- a/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java +++ b/ruoyi-applet/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java @@ -1,17 +1,34 @@ package com.ruoyi.web.controller.system; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.entity.SysRole; +import com.ruoyi.common.core.domain.entity.TSysUserResp; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.domain.model.LoginUserApplet; import com.ruoyi.common.core.redis.RedisCache; +import com.ruoyi.common.redis.service.RedisService; import com.ruoyi.framework.web.service.TokenService; +import com.ruoyi.system.model.TSysAppUser; import com.ruoyi.system.service.ISysRoleService; +import com.ruoyi.system.service.TSysAppUserService; +import com.ruoyi.system.utils.wx.body.resp.Code2SessionRespBody; +import com.ruoyi.system.utils.wx.body.resq.Code2SessionResqBody; +import com.ruoyi.system.utils.wx.model.WeixinProperties; +import com.ruoyi.system.utils.wx.pojo.AppletUserDecodeData; +import com.ruoyi.system.utils.wx.pojo.AppletUserEncrypteData; +import com.ruoyi.system.utils.wx.tools.WxAppletTools; +import com.ruoyi.system.utils.wx.tools.WxUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; @@ -25,12 +42,16 @@ import com.ruoyi.framework.web.service.SysLoginService; import com.ruoyi.framework.web.service.SysPermissionService; import com.ruoyi.system.service.ISysMenuService; +import org.springframework.web.client.RestTemplate; + +import javax.annotation.Resource; /** * 登录验证 * * @author ruoyi */ +@Slf4j @Api(tags = "登录") @RestController public class SysLoginController @@ -49,7 +70,14 @@ private TokenService tokenService; @Autowired private ISysRoleService roleService; - + @Autowired + private WeixinProperties wxConfig; + @Autowired + private RestTemplate wxRestTemplate; + @Resource + private RedisService redisService; + @Resource + private TSysAppUserService sysAppUserService; /** * 账号密码登录 * @@ -81,6 +109,50 @@ return ajax; } + @ApiOperation(value = "通过code获得openid,获取用户信息",tags = {"微信小程序登录"}) + @PostMapping("/openIdByJsCode") + public R<Map<String, Object>> openIdByJsCode(@RequestBody AppletUserEncrypteData data) { + log.info("<<<<<<<<换取openid开始<<<<<<<<:{}", data.getCode()); + WxAppletTools appletTools = new WxAppletTools(wxRestTemplate, wxConfig, redisService); + Code2SessionRespBody body = appletTools.getOpenIdByJscode2session(new Code2SessionResqBody().build(data.getCode())); + String openid = body.getOpenid(); + String sessionKey = body.getSessionKey(); + // 用户信息解密 数据验签 +// if (StringUtils.isNotBlank(data.getSignature())) { +// WxUtils.verifySignature(data.getRawData(), sessionKey, data.getSignature()); +// } + if(StringUtils.isEmpty(data.getEncryptedData()) || StringUtils.isEmpty(data.getIv())){ + return R.fail("已拒绝授权"); + } + AppletUserDecodeData appletUserDecodeData = WxUtils.encryptedData(data.getEncryptedData(), sessionKey, data.getIv()); + appletUserDecodeData.setOpenId(openid); + // 先使用openId和当前手机号进行查询 + TSysAppUser sysAppUser = sysAppUserService.getOne(Wrappers.lambdaQuery(TSysAppUser.class) + .and(e->e.eq(TSysAppUser::getOpenId, appletUserDecodeData.getOpenId()).or() + .eq(TSysAppUser::getPhone, appletUserDecodeData.getPhoneNumber()))); + if (sysAppUser==null){ +// appUser.setTenantAttributes(); +// appUser.setTenantType(); + sysAppUser = new TSysAppUser(); + sysAppUser.setPhone(appletUserDecodeData.getPhoneNumber()); +// sysAppUser.setAccount(appletUserDecodeData.getPhoneNumber()); +// sysAppUser.setPassword(SecurityUtils.encryptPassword(appletUserDecodeData.getPhoneNumber().substring(5))); + sysAppUser.setOpenId(appletUserDecodeData.getOpenId()); + // 手机号中间四位替换为* + sysAppUser.setNickName(appletUserDecodeData.getPhoneNumber().replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2")); + sysAppUserService.save(sysAppUser); + } + LoginUserApplet loginUserApplet = new LoginUserApplet(); + TSysUserResp sysUserResp = new TSysUserResp(); + BeanUtils.copyProperties(sysAppUser, sysUserResp); + loginUserApplet.setUser(sysUserResp); + loginUserApplet.setUserId(sysAppUser.getId()); + Map<String, Object> tokenInfos = new HashMap<>(); + tokenInfos.put("token",tokenService.createTokenApplet(loginUserApplet)); + tokenInfos.put("info",loginUserApplet); + return R.ok(tokenInfos); + } + /** * 账号密码登录 * -- Gitblit v1.7.1