更新 测试微信二维码登录
This commit is contained in:
zhouwentao 2024-05-08 16:43:19 +08:00
parent ee0f575485
commit 556a77ede4
5 changed files with 51 additions and 12 deletions

View File

@ -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);
}

View File

@ -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";
}

View File

@ -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");
}
}

View File

@ -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<String, Object> 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<String, String> map = new HashMap<>();
HashMap<String, Object> 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");

View File

@ -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<String, Object> getByWxUserId(String userId){
try {
SysUser sysUser = sysUserService.getById(userId);
AssertUtils.notNull(sysUser,"获取用户信息错误");
//用户登录信息
HashMap<String, Object> 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;
}
}
}