feat 适配微信支付模块

feat 登录增加终端保存到session表的方法
This commit is contained in:
damonyuan
2024-10-26 01:24:50 +08:00
parent df9f40ade3
commit b694076f45
15 changed files with 147 additions and 27 deletions

View File

@@ -6,11 +6,14 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mdd.common.aop.NotLogin;
import com.mdd.common.core.AjaxResult;
import com.mdd.common.entity.user.User;
import com.mdd.common.entity.user.UserSession;
import com.mdd.common.enums.ClientEnum;
import com.mdd.common.enums.ErrorEnum;
import com.mdd.common.exception.LoginException;
import com.mdd.common.mapper.user.UserMapper;
import com.mdd.common.mapper.user.UserSessionMapper;
import com.mdd.common.util.StringUtils;
import com.mdd.common.util.YmlUtils;
import org.jetbrains.annotations.NotNull;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;
@@ -30,6 +33,8 @@ public class LikeFrontInterceptor implements HandlerInterceptor {
@Resource
UserMapper userMapper;
@Resource
UserSessionMapper userSessionMapper;
/**
* 前置处理器
@@ -54,7 +59,18 @@ public class LikeFrontInterceptor implements HandlerInterceptor {
// 记录当前平台
String terminal = request.getHeader("terminal");
LikeFrontThreadLocal.put("terminal", StringUtils.isEmpty(terminal) ? ClientEnum.H5.getCode() : terminal);
String token = request.getHeader(YmlUtils.get("sa-token.token-name"));
if (StringUtils.isEmpty(terminal)) {
//userSessionMapper.
if (StringUtils.isEmpty(token)) {
LikeFrontThreadLocal.put("terminal", ClientEnum.PC.getCode());
} else {
UserSession userSession = userSessionMapper.selectOne(new QueryWrapper<UserSession>().eq("token", token).gt("expire_time", System.currentTimeMillis() / 1000).orderByDesc("id").last("limit 1"));
LikeFrontThreadLocal.put("terminal", StringUtils.isNull(userSession) ? ClientEnum.H5.getCode() : userSession.getTerminal());
}
} else {
LikeFrontThreadLocal.put("terminal", terminal);
}
// 登录权限校验
try {

View File

@@ -3,6 +3,8 @@ package com.mdd.front.controller;
import com.mdd.common.aop.NotLogin;
import com.mdd.common.aop.NotPower;
import com.mdd.common.core.AjaxResult;
import com.mdd.common.enums.ClientEnum;
import com.mdd.common.util.StringUtils;
import com.mdd.front.LikeFrontThreadLocal;
import com.mdd.front.service.ILoginService;
import com.mdd.front.service.IUserService;
@@ -38,6 +40,9 @@ public class LoginController {
@ApiOperation(value="注册账号")
public AjaxResult<Object> register(@Validated @RequestBody RegisterValidate registerValidate) {
Integer terminal = LikeFrontThreadLocal.getTerminal();
if (StringUtils.isNull(registerValidate.getTerminal())) {
terminal = LikeFrontThreadLocal.getTerminal();
}
String account = registerValidate.getAccount();
String password = registerValidate.getPassword();
@@ -49,7 +54,9 @@ public class LoginController {
@PostMapping("/account")
@ApiOperation(value="账号登录")
public AjaxResult<LoginTokenVo> account(@Validated @RequestBody LoginPwdValidate loginPwdValidate) {
loginPwdValidate.setTerminal(LikeFrontThreadLocal.getTerminal());
if (StringUtils.isNull(loginPwdValidate.getTerminal())) {
loginPwdValidate.setTerminal(LikeFrontThreadLocal.getTerminal());
}
LoginTokenVo vo = iLoginService.accountLogin(loginPwdValidate);
return AjaxResult.success(vo);
}
@@ -71,6 +78,7 @@ public class LoginController {
@ApiOperation(value="微信登录")
public AjaxResult<LoginTokenVo> mnpLogin(@Validated @RequestBody LoginCodeValidate loginCodeValidate) {
Integer terminal = LikeFrontThreadLocal.getTerminal();
String code = loginCodeValidate.getCode();
LoginTokenVo vo = iLoginService.mnpLogin(code, terminal);
@@ -81,9 +89,11 @@ public class LoginController {
@PostMapping("/oaLogin")
@ApiOperation(value="公众号登录")
public AjaxResult<LoginTokenVo> oaLogin(@Validated @RequestBody LoginCodeValidate loginCodeValidate) {
Integer terminal = LikeFrontThreadLocal.getTerminal();
Integer terminal = ClientEnum.OA.getCode();
String code = loginCodeValidate.getCode();
if (StringUtils.isNull(loginCodeValidate.getTerminal())) {
terminal = LikeFrontThreadLocal.getTerminal();
}
LoginTokenVo vo = iLoginService.officeLogin(code, terminal);
return AjaxResult.success(vo);
}

View File

@@ -97,7 +97,6 @@ public class PayController {
if (payStatus != 0) {
throw new OperateException("订单已支付");
}
// 发起支付
Object result = iPayService.prepay(requestObj, terminal);
return AjaxResult.success(result);

View File

@@ -8,11 +8,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.mdd.common.entity.user.User;
import com.mdd.common.entity.user.UserAuth;
import com.mdd.common.entity.user.UserSession;
import com.mdd.common.enums.LoginEnum;
import com.mdd.common.enums.NoticeEnum;
import com.mdd.common.exception.OperateException;
import com.mdd.common.mapper.user.UserAuthMapper;
import com.mdd.common.mapper.user.UserMapper;
import com.mdd.common.mapper.user.UserSessionMapper;
import com.mdd.common.plugin.notice.NoticeCheck;
import com.mdd.common.plugin.wechat.WxMnpDriver;
import com.mdd.common.util.*;
@@ -49,6 +51,8 @@ public class LoginServiceImpl implements ILoginService {
@Resource
UserAuthMapper userAuthMapper;
@Resource
UserSessionMapper userSessionMapper;
/**
* 注册账号
@@ -444,6 +448,18 @@ public class LoginServiceImpl implements ILoginService {
vo.setIsBindMobile(!StringUtils.isEmpty(mobile));
vo.setToken(StpUtil.getTokenValue());
vo.setIsNew(isNew);
//保存登录信息到session
userSessionMapper.delete(new QueryWrapper<UserSession>().eq("user_id", userId).eq("terminal", terminal));
UserSession userSession = new UserSession();
userSession.setUserId(userId);
userSession.setToken(StpUtil.getTokenValue());
userSession.setTerminal(terminal);
userSession.setUpdateTime(System.currentTimeMillis() / 1000);
userSession.setExpireTime(System.currentTimeMillis() / 1000 + Long.valueOf(YmlUtils.get("sa-token.timeout")));
userSessionMapper.insert(userSession);
return vo;
}

View File

@@ -191,14 +191,21 @@ public class PayServiceImpl implements IPayService {
requestV3.setOrderAmount(params.getOrderAmount());
requestV3.setDescription(params.getDescription());
Object result = WxPayDriver.unifiedOrder(requestV3);
System.out.println(terminal);
if (terminal == ClientEnum.H5.getCode()) {
Assert.notNull(params.getRedirect(), "redirectUrl参数缺失");
Map<String, String> map = new LinkedHashMap<>();
JSONObject ret = new JSONObject();
String h5Url = result.toString();
map.put("url", h5Url);
return map;
System.out.println("aaaaaaaaaa");
ret.put("config", WxPayDriver.unifiedOrder(requestV3));
ret.put("pay_way", 2);
return ret;
}
return WxPayDriver.unifiedOrder(requestV3);
JSONObject ret = new JSONObject();
ret.put("config", WxPayDriver.unifiedOrder(requestV3));
ret.put("pay_way", 2);
return ret;
//return WxPayDriver.unifiedOrder(requestV3);
case 3: //支付宝
return this.createAliH5Order(params);
}

View File

@@ -296,11 +296,11 @@ public class UserServiceImpl implements IUserService {
*/
@Override
public void mnpMobile(String code) {
Map<String, String> config = ConfigUtils.get("mp_channel");
Map<String, String> config = ConfigUtils.get("mnp_setting");
WxMaService wxMaService = new WxMaServiceImpl();
WxMaDefaultConfigImpl wxConfig = new WxMaDefaultConfigImpl();
wxConfig.setSecret(config.getOrDefault("appSecret", ""));
wxConfig.setAppid(config.getOrDefault("appId", ""));
wxConfig.setSecret(config.getOrDefault("app_secret", ""));
wxConfig.setAppid(config.getOrDefault("app_id", ""));
wxMaService.setWxMaConfig(wxConfig);
try {

View File

@@ -14,4 +14,7 @@ public class LoginCodeValidate {
@ApiModelProperty(value = "微信code", required = true)
private String code;
@ApiModelProperty(value = "终端")
private Integer terminal;
}

View File

@@ -29,4 +29,6 @@ public class RegisterValidate implements Serializable {
@ApiModelProperty(value = "登录密码", required = true)
private String password;
@ApiModelProperty(value = "终端")
private Integer terminal;
}