diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniUserController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniUserController.java index 3ca822e..8d86f58 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniUserController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/controller/MiniUserController.java @@ -19,6 +19,7 @@ import org.jeecg.common.util.*; import org.jeecg.modules.mini.douyin.vo.DyLoginVo; import org.jeecg.modules.mini.dto.VipDTO; import org.jeecg.modules.mini.service.MiniUserService; +import org.jeecg.modules.mini.wx.constant.WeiXinConstant; import org.jeecg.modules.mini.wx.model.WxModel; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.system.model.SysLoginModel; @@ -251,8 +252,8 @@ public class MiniUserController { obj.put("loginState", "not"); //判断是不是 二维码登录 if (StringUtils.isNotBlank(wxModel.getUuid())) { - //更改二维码登录状态 - redisUtil.set("WX_QRCODE_SCENE_"+ wxModel.getUuid(),""); + //更改二维码登录状态 通过,180s + redisUtil.set(WeiXinConstant.QR_CODE_KEY + wxModel.getUuid(),WeiXinConstant.WX_QRCODE_SUCCESS_STATUS+"-"+user.getId()+"-"+token,180); } return Result.OK(obj); } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/constant/WeiXinConstant.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/constant/WeiXinConstant.java index 7532a32..3fb28ce 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/constant/WeiXinConstant.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/constant/WeiXinConstant.java @@ -19,5 +19,9 @@ public class WeiXinConstant { * 微信二维码被扫描 */ public static final String WX_QRCODE_SCAN_STATUS = "WX_QRCODE_SCAN"; + /** + * 微信二维码扫描验证成功 + */ + public static final String WX_QRCODE_SUCCESS_STATUS = "WX_QRCODE_SUCCESS"; } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/util/WeXinUtil.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/util/WeXinUtil.java index c9ef1d7..2f4d55f 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/util/WeXinUtil.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/mini/wx/util/WeXinUtil.java @@ -60,7 +60,7 @@ public class WeXinUtil { * @param path 跳转小程序后的路径 * @param width 二维码的宽度 */ - public static String getWxACode(String accessToken, String path, String width){ + public static String getWxACode(String accessToken, String path, String width,String scene){ byte[] release=null; if (StringUtils.isBlank(path)) { return null; @@ -71,7 +71,7 @@ public class WeXinUtil { //拼接路径 String url = GET_WXACODE_URL + "?access_token=" + accessToken; JSONObject jsonParam = new JSONObject(); - jsonParam.put("scene", "id=1"); + jsonParam.put("scene", scene); jsonParam.put("page", path); jsonParam.put("width", Integer.parseInt(width)); jsonParam.put("auto_color", false); @@ -105,7 +105,7 @@ public class WeXinUtil { } public static void main(String[] args) { - getWxACode("80_WOwnMgHpt70AdOLDjhrpOengYBT_nozQ_rIcgc4FmbtI64swoBxj19_7iOO7wm-vM9-lDEThsv934LodtsvVuaB2CxbWaX9oFdeAElSvBV6rbCWljXh29zG6EAwZCMiAAACFP", - "pages/zyb/login","430"); +// getWxACode("80_WOwnMgHpt70AdOLDjhrpOengYBT_nozQ_rIcgc4FmbtI64swoBxj19_7iOO7wm-vM9-lDEThsv934LodtsvVuaB2CxbWaX9oFdeAElSvBV6rbCWljXh29zG6EAwZCMiAAACFP", +// "pages/zyb/login","430"); } } diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/WeiXinController.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/WeiXinController.java index 7eb0fe3..fc7b432 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/WeiXinController.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/controller/WeiXinController.java @@ -1,5 +1,6 @@ package org.jeecg.modules.web.controller; +import com.alibaba.fastjson.JSONObject; import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -8,6 +9,9 @@ import org.jeecg.common.util.RedisUtil; import org.jeecg.modules.mini.wx.constant.WeiXinConstant; import org.jeecg.modules.mini.wx.model.WeXinConfig; import org.jeecg.modules.mini.wx.util.WeXinUtil; +import org.jeecg.modules.system.entity.SysUser; +import org.jeecg.modules.system.service.ISysUserService; +import org.jeecg.modules.web.service.WebUserService; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -26,6 +30,10 @@ public class WeiXinController { @Resource private WeXinConfig weXinConfig; @Resource + private WebUserService webUserService; + @Resource + private ISysUserService sysUserService; + @Resource private RedisUtil redisUtil; @@ -40,10 +48,10 @@ public class WeiXinController { //先获取accessToken String accessToken = WeXinUtil.getAccessToken(weXinConfig.getAppId(), weXinConfig.getAppSecret(), null); //生成一个uuid,用于标识是否扫描成功 存入redis - String uuid = UUID.randomUUID().toString().replaceAll("-", ""); + String uuid = UUID.randomUUID().toString().replaceAll("-", "").substring(0,8); String key = WeiXinConstant.QR_CODE_KEY + uuid; redisUtil.set(key,WeiXinConstant.WX_QRCODE_NOT_SCAN_STATUS, 180);//3分钟 - String qrCodeImg = WeXinUtil.getWxACode(accessToken, "pages/zyb/qrcodeLogin", "64"); + String qrCodeImg = WeXinUtil.getWxACode(accessToken, "pages/zyb/qrcodeLogin", "64",uuid); HashMap map = new HashMap<>(); map.put("scene", uuid); map.put("img", "data:image/jpeg;base64," + qrCodeImg); @@ -60,14 +68,15 @@ public class WeiXinController { public Result getQrCodeStatus(@PathVariable String uuid) { String key = WeiXinConstant.QR_CODE_KEY + uuid; String value = (String) redisUtil.get(key); - HashMap map = new HashMap<>(); + HashMap map = new HashMap<>(); if (StringUtils.isNotEmpty(value) && value.startsWith("WX_QRCODE_SUCCESS")) { //二维码已经扫描通过,获取登录信息 - String openId = value.split("-")[1]; - //String token = tokenService.createToken(openId); + String userId = value.split("-")[1]; + String token = value.split("-")[2]; + map = webUserService.getByWxUserId(userId); + map.put("token",token); //map.put("qr_state", WxConstant.QR_STATUS_SUCCESS); map.put("qr_state", "SUCCESS"); - map.put("token", "1"); } else if (StringUtils.isNotEmpty(value) && value.startsWith("WX_QRCODE_SCAN")) { //二维码被扫描但未验证 map.put("qr_state", "SCAN"); diff --git a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/service/WebUserService.java b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/service/WebUserService.java index 063d31c..10beef0 100644 --- a/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/service/WebUserService.java +++ b/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/web/service/WebUserService.java @@ -19,6 +19,8 @@ import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.HashMap; +import java.util.LinkedHashMap; /** * 前台用户service @@ -74,4 +76,27 @@ public class WebUserService { return Result.error(e.getMessage()); } } + public HashMap getByWxUserId(String userId){ + try { + SysUser sysUser = sysUserService.getById(userId); + AssertUtils.notNull(sysUser,"获取用户信息错误"); + //用户登录信息 + HashMap obj = new LinkedHashMap<>(); + LoginUser loginUser = new LoginUser(); + BeanUtils.copyProperties(sysUser, loginUser); + //获取vip信息 + VipDTO vipDTO = miniUserService.getUserVip(sysUser.getId()); + if (vipDTO != null) { + obj.put("vipInfo", vipDTO); + } else { + obj.put("vipInfo", null); + } + obj.put("userInfo", loginUser); + return obj; + } catch (Exception e) { + log.error("WebUserService.getByWxUserId错误:"); + log.error(e.getMessage()); + return null; + } + } }