diff --git a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/jx/controller/admin/JxAuthController.java b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/jx/controller/admin/JxAuthController.java index 6e283c80..6503af70 100644 --- a/dl-module-jx/src/main/java/cn/iocoder/yudao/module/jx/controller/admin/JxAuthController.java +++ b/dl-module-jx/src/main/java/cn/iocoder/yudao/module/jx/controller/admin/JxAuthController.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.jx.controller.admin; +import cn.hutool.core.util.ObjectUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; @@ -7,12 +8,14 @@ import cn.iocoder.yudao.module.jx.domain.DriveSchoolCoach; import cn.iocoder.yudao.module.jx.domain.DriveSchoolInfo; import cn.iocoder.yudao.module.jx.mapper.DriveSchoolCoachMapper; import cn.iocoder.yudao.module.jx.service.IDriveSchoolInfoService; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.yudao.module.system.service.permission.PermissionService; import cn.iocoder.yudao.module.system.service.user.AdminUserService; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; +import org.springframework.util.StringUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -23,6 +26,8 @@ import java.util.HashMap; import java.util.Map; import java.util.Set; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + @Tag(name = "管理后台 - 认证") @RestController @RequestMapping("/jx/auth") @@ -75,4 +80,27 @@ public class JxAuthController { return CommonResult.success(result); } + /** + * 获取App用户信息 + * + * @return 用户信息 + */ + @GetMapping("/getAppInfo") + public CommonResult getAppInfo() + { + LoginUser user = SecurityFrameworkUtils.getLoginUser(); + // 获取当前登录用户角色编码 + Set roles = permissionService.getRolePermission(user.getId()); + Map result = new HashMap<>(); + result.put("user", user); + result.put("role", roles); +// ShopConfig shopConfig = configService.selectShopConfigById(1L); +// if (StringUtils.isEmpty(shopConfig.getOpenRz())||shopConfig.getOpenRz().equals("0")){ +// ajax.put("openRz", "0"); +// }else { +// ajax.put("openRz", "1"); +// } + return success(result); + } + } diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/app/controller/admin/SysLoginController.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/app/controller/admin/SysLoginController.java index 99a0c39e..88a333b6 100644 --- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/app/controller/admin/SysLoginController.java +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/app/controller/admin/SysLoginController.java @@ -470,52 +470,45 @@ public class SysLoginController { // return AjaxResult.success(menuService.buildMenus(menus)); // } -// @ApiOperation("微信登录") -// @ApiImplicitParams({ -// @ApiImplicitParam(name = "WxLoginBody",dataType = "WxLoginBody", value = "jscode", required = true, paramType = "body") -// }) -// @PostMapping("/wxLogin") -// public AjaxResult wxLogin(@RequestBody WxLoginBody wxLoginBody) { -// String code = wxLoginBody.getCode(); -// //秘钥 -// String encryptedIv = wxLoginBody.getEncryptedIv(); -// //加密数据 -// String encryptedData = wxLoginBody.getEncryptedData(); -// -// -// //想微信服务器发送请求获取用户信息 -// String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + wxConfig.getAppId() + "&secret=" + wxConfig.getAppSecret() + "&js_code=" + code + "&grant_type=authorization_code"; -// System.out.println(url); -// String res = restTemplate.getForObject(url, String.class); -// JSONObject jsonObject = JSONObject.parseObject(res); -// -// //获取session_key和openid -// String sessionKey = jsonObject.getString("session_key"); -// String openId = jsonObject.getString("openid"); -// -// System.out.println(sessionKey); -// System.out.println(openId); -// //解密 -// String decryptResult = ""; -// try { -// //如果没有绑定微信开放平台,解析结果是没有unionid的。 -// decryptResult = decrypt(sessionKey, encryptedIv, encryptedData); -// } catch (Exception e) { -// e.printStackTrace(); -// return AjaxResult.error("微信登录失败!"); -// } -// -// if (StringUtils.hasText(decryptResult)) { -// //如果解析成功,获取token -// String token = loginService.wxLogin(decryptResult,openId,wxLoginBody.getInviteId()); -// AjaxResult ajax = AjaxResult.success(); -// ajax.put(Constants.TOKEN, token); -// return ajax; -// } else { -// return AjaxResult.error("微信登录失败!"); -// } -// } -// + @PostMapping("/wxLogin") + public CommonResult wxLogin(@RequestBody WxLoginBody wxLoginBody) { + String code = wxLoginBody.getCode(); + //秘钥 + String encryptedIv = wxLoginBody.getEncryptedIv(); + //加密数据 + String encryptedData = wxLoginBody.getEncryptedData(); + + + //想微信服务器发送请求获取用户信息 + String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + wxConfig.getJxAppId() + "&secret=" + wxConfig.getJxAppSecret() + "&js_code=" + code + "&grant_type=authorization_code"; + System.out.println(url); + String res = restTemplate.getForObject(url, String.class); + JSONObject jsonObject = JSONObject.parseObject(res); + + //获取session_key和openid + String sessionKey = jsonObject.getString("session_key"); + String openId = jsonObject.getString("openid"); + //解密 + String decryptResult = ""; + try { + //如果没有绑定微信开放平台,解析结果是没有unionid的。 + decryptResult = decrypt(sessionKey, encryptedIv, encryptedData); + } catch (Exception e) { + e.printStackTrace(); + return error(500, "微信登录失败!"); + } + + if (StringUtils.hasText(decryptResult)) { + //如果解析成功,获取token + AuthLoginRespVO loginVO = loginService.wxLogin(decryptResult,openId,wxLoginBody.getInviteId()); + Map map = new HashMap<>(); + map.put("token", loginVO.getAccessToken()); + return success(map); + } else { + return error(500, "微信登录失败!"); + } + } + // @PostMapping("/wxLoginJc") // public AjaxResult wxLoginJc(@RequestBody WxLoginBody wxLoginBody) { // String code = wxLoginBody.getCode(); diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/domain/WxLoginBody.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/domain/WxLoginBody.java index 63bffa92..49250e95 100644 --- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/domain/WxLoginBody.java +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/domain/WxLoginBody.java @@ -19,6 +19,6 @@ public class WxLoginBody { */ private String encryptedData; -// //邀请码 -// private Long inviteId; + //邀请码 + private Long inviteId; } diff --git a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/utils/pay/WechatPayConfig.java b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/utils/pay/WechatPayConfig.java index 675000e1..d0f0f2f6 100644 --- a/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/utils/pay/WechatPayConfig.java +++ b/dl-module-rescue/src/main/java/cn/iocoder/yudao/module/rescue/utils/pay/WechatPayConfig.java @@ -75,6 +75,9 @@ public class WechatPayConfig { */ private String baseUrl; + private String jxAppId = "wx684fc832e96cee65"; + private String jxAppSecret = "d1fecac806c5f3cd9aca9f3d5c3759c7"; + /** diff --git a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java index 186fc554..0c7c60e3 100644 --- a/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java +++ b/yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java @@ -130,7 +130,11 @@ public class YudaoWebSecurityConfigurerAdapter { // 1.1 静态资源,可匿名访问 .antMatchers(HttpMethod.GET, "/*.html", "/**/*.html", "/**/*.css", "/**/*.js").permitAll() - .antMatchers(HttpMethod.POST, "/admin-api/rescue/login", "/admin-api/rescue/loginApp","/admin-api/system/auth/loginApp", "/admin-api/rescue/driverLogin").anonymous() + .antMatchers(HttpMethod.POST, "/admin-api/rescue/login", + "/admin-api/rescue/loginApp", + "/admin-api/rescue/wxLogin", + "/admin-api/system/auth/loginApp", + "/admin-api/rescue/driverLogin").anonymous() // 1.2 设置 @PermitAll 无需认证 .antMatchers(HttpMethod.GET, permitAllUrls.get(HttpMethod.GET).toArray(new String[0])).permitAll() .antMatchers(HttpMethod.POST, permitAllUrls.get(HttpMethod.POST).toArray(new String[0])).permitAll() diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java index 770cc278..bdf9cc09 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/auth/AuthController.java @@ -132,6 +132,49 @@ public class AuthController { return success(true); } + +// @PostMapping("/wxLoginJc") +// public AjaxResult wxLoginJc(@RequestBody WxLoginBody wxLoginBody) { +// String code = wxLoginBody.getCode(); +// //秘钥 +// String encryptedIv = wxLoginBody.getEncryptedIv(); +// //加密数据 +// String encryptedData = wxLoginBody.getEncryptedData(); +// +// //想微信服务器发送请求获取用户信息 +// String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + wxConfig.getAppId() + "&secret=" + wxConfig.getAppSecret() + "&js_code=" + code + "&grant_type=authorization_code"; +// System.out.println(url); +// String res = restTemplate.getForObject(url, String.class); +// JSONObject jsonObject = JSONObject.parseObject(res); +// +// //获取session_key和openid +// String sessionKey = jsonObject.getString("session_key"); +// String openId = jsonObject.getString("openid"); +// +// System.out.println(sessionKey); +// System.out.println(openId); +// //解密 +// String decryptResult = ""; +// try { +// //如果没有绑定微信开放平台,解析结果是没有unionid的。 +// decryptResult = decrypt(sessionKey, encryptedIv, encryptedData); +// } catch (Exception e) { +// e.printStackTrace(); +// return AjaxResult.error("微信登录失败!"); +// } +// +// if (StringUtils.hasText(decryptResult)) { +// //如果解析成功,获取token +// String token = loginService.wxLoginJc(decryptResult,openId,wxLoginBody.getInviteId()); +// AjaxResult ajax = AjaxResult.success(); +// ajax.put(Constants.TOKEN, token); +// return ajax; +// } else { +// return AjaxResult.error("微信登录失败!"); +// } +// } + + @PostMapping("/refresh-token") @PermitAll @Operation(summary = "刷新令牌") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java index b8951102..393daf44 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/user/AdminUserDO.java @@ -96,5 +96,6 @@ public class AdminUserDO extends TenantBaseDO { * 最后登录时间 */ private LocalDateTime loginDate; + private String openId; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java index cdef9ad7..57127918 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/user/AdminUserMapper.java @@ -53,4 +53,6 @@ public interface AdminUserMapper extends BaseMapperX { Integer getStudentNumberByUserId(Long jlId); List getStudentNumber(Long id); + + AdminUserDO selectUserByPhone(String phone); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java index 52796ec2..66772d21 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthService.java @@ -70,4 +70,6 @@ public interface AdminAuthService { */ AuthLoginRespVO refreshToken(String refreshToken); + AuthLoginRespVO wxLogin(String decryptResult,String openId,Long inviteId); + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java index 6add0737..f48c32c2 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/auth/AdminAuthServiceImpl.java @@ -23,6 +23,7 @@ import cn.iocoder.yudao.module.system.service.member.MemberService; import cn.iocoder.yudao.module.system.service.oauth2.OAuth2TokenService; import cn.iocoder.yudao.module.system.service.social.SocialUserService; import cn.iocoder.yudao.module.system.service.user.AdminUserService; +import com.alibaba.fastjson.JSONObject; import com.google.common.annotations.VisibleForTesting; import com.xingyuv.captcha.model.common.ResponseModel; import com.xingyuv.captcha.model.vo.CaptchaVO; @@ -65,6 +66,7 @@ public class AdminAuthServiceImpl implements AdminAuthService { @Resource private SmsCodeApi smsCodeApi; + /** * 验证码的开关,默认为 true */ @@ -207,6 +209,63 @@ public class AdminAuthServiceImpl implements AdminAuthService { return AuthConvert.INSTANCE.convert(accessTokenDO); } + @Override + public AuthLoginRespVO wxLogin(String decryptResult, String openId, Long inviteId) { + //字符串转json + JSONObject jsonObject = JSONObject.parseObject(decryptResult); + System.out.println(jsonObject); + System.out.println("openId"+openId); + String phoneNumber = jsonObject.getString("phoneNumber"); + //还可以获取其他信息 + //根据openid判断数据库中是否有该用户 + //根据openid查询用户信息 + AdminUserDO wxUser = userService.selectUserByPhone(phoneNumber); + //如果查不到,则新增,查到了,则更新 +// SysUser user = new SysUser(); +// if (wxUser == null) { +// // 新增 +// user.setUserName(phoneNumber); +// user.setNickName(phoneNumber); +// user.setPhonenumber(phoneNumber); +// user.setOpenId(openId); +// user.setCreateTime(DateUtils.getNowDate()); +// user.setPassword(SecurityUtils.encryptPassword("654321")); +// if (null!=inviteId){ +// +// //绑定上级 +// user.setInviteId(inviteId); +// //给上级进行积分奖励 +// userBalanceService.inviteRewards(inviteId); +// } +// //新增 用户 +// userService.insertUser(user); +// }else { +// //更新 +// user = wxUser; +// user.setNickName(phoneNumber); +// user.setPhonenumber(phoneNumber); +// user.setUpdateTime(DateUtils.getNowDate()); +// user.setOpenId(openId); +// if (ObjectUtil.isEmpty(user.getInviteId())){ +// if (null!=inviteId){ +// //绑定上级 +// user.setInviteId(inviteId); +// //给上级进行积分奖励 +// userBalanceService.inviteRewards(inviteId); +// } +// } +// userMapper.updateUser(user); +// } + //组装token信息 +// LoginUser loginUser = new LoginUser(); +// loginUser.setOpenId(openId); +// //如果有的话设置 +// loginUser.setUser(user); +// loginUser.setUserId(user.getUserId()); + // 生成token + return createTokenAfterLoginSuccess(wxUser.getId(), wxUser.getUsername(), LoginLogTypeEnum.LOGIN_SOCIAL); + } + @Override public void logout(String token, Integer logType) { // 删除访问令牌 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java index 8197175d..f104717f 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserService.java @@ -215,4 +215,6 @@ public interface AdminUserService { Integer getStudentNumberByUserId(Long jlId); List getStudentNumber(Long id); + + AdminUserDO selectUserByPhone(String phone); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java index 9f8cb0e8..ae66f29f 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/user/AdminUserServiceImpl.java @@ -520,6 +520,11 @@ public class AdminUserServiceImpl implements AdminUserService { return userMapper.getStudentNumber(id); } + @Override + public AdminUserDO selectUserByPhone(String phone) { + return userMapper.selectUserByPhone(phone); + } + /** * 对密码进行加密 * diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/SysUserMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/SysUserMapper.xml index cfe169b3..2fb307c8 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/SysUserMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/SysUserMapper.xml @@ -30,4 +30,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" +