From 897d625f6f7fafb68b3cbe21c375ded276754546 Mon Sep 17 00:00:00 2001 From: hurui <177768073@qq.com> Date: Fri, 10 Sep 2021 17:42:17 +0800 Subject: [PATCH] =?UTF-8?q?'=E4=BF=AE=E5=A4=8D=E6=8E=88=E6=9D=83=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E9=97=AE=E9=A2=98'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/cweb/controller/WechatController.java | 25 +++++++++++++------ .../com/hai/common/exception/ErrorCode.java | 2 +- .../impl/HighDiscountAgentRelServiceImpl.java | 2 +- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/hai-cweb/src/main/java/com/cweb/controller/WechatController.java b/hai-cweb/src/main/java/com/cweb/controller/WechatController.java index 13338fc3..250a016b 100644 --- a/hai-cweb/src/main/java/com/cweb/controller/WechatController.java +++ b/hai-cweb/src/main/java/com/cweb/controller/WechatController.java @@ -17,6 +17,7 @@ import com.hai.common.exception.SysCode; import com.hai.common.security.SessionObject; import com.hai.common.security.UserCenter; import com.hai.common.utils.HttpsUtils; +import com.hai.common.utils.RedisUtil; import com.hai.common.utils.ResponseMsgUtil; import com.hai.entity.HighUser; import com.hai.model.HighUserModel; @@ -48,6 +49,8 @@ public class WechatController { private static final Logger log = LoggerFactory.getLogger(WechatController.class); + private static final String WX_OPENID_SESSION_REDIS = "WX_OPENID_SESSION_REDIS"; + @Autowired private UserCenter userCenter; @@ -57,13 +60,15 @@ public class WechatController { @Resource private HighUserPayPasswordService highUserPayPasswordService; + @Resource + private RedisUtil redisUtil; + @RequestMapping(value = "/handleCode", method = RequestMethod.GET) @ResponseBody @ApiOperation(value = "小程序code解析") public ResponseData compairCode(@RequestParam(value = "code", required = true) String code, HttpServletRequest request, HttpServletResponse response) { try { - //校验code,openId不能同时为空 if (StringUtils.isEmpty(code)) { throw ErrorHelp.genException(SysCode.MiniProgram, ErrorCode.REQ_PARAMS_ERROR, ""); @@ -72,7 +77,7 @@ public class WechatController { final WxMaService wxService = WxMaConfiguration.getMaService(); WxMaJscode2SessionResult session = wxService.jsCode2SessionInfo(code); //保存小程序用户登录的openId及sessionKey信息 - SessionKeyCache.setData(session.getOpenid(), session, -1); + redisUtil.hset(WX_OPENID_SESSION_REDIS,session.getOpenid(),session); JSONObject jo = new JSONObject(); jo.put("openId", session.getOpenid()); return ResponseMsgUtil.success(jo); @@ -87,7 +92,6 @@ public class WechatController { public ResponseData login(@RequestParam(value = "openId", required = true) String openId, HttpServletRequest request, HttpServletResponse response) { try { - //校验code,openId不能同时为空 if (StringUtils.isEmpty(openId)) { throw ErrorHelp.genException(SysCode.MiniProgram, ErrorCode.REQ_PARAMS_ERROR, ""); @@ -130,10 +134,13 @@ public class WechatController { throw ErrorHelp.genException(SysCode.MiniProgram, ErrorCode.REQ_PARAMS_ERROR, ""); } //请求微信api,获取用户session_key以及openId - WxMaJscode2SessionResult session = SessionKeyCache.getData(openId); + Object skObject = redisUtil.hget(WX_OPENID_SESSION_REDIS,openId); + if (skObject == null){ + throw ErrorHelp.genException(SysCode.MiniProgram, ErrorCode.WECHAT_LOGIN_ERROR); + } + WxMaJscode2SessionResult session = (WxMaJscode2SessionResult)skObject; final WxMaService wxService = WxMaConfiguration.getMaService(); - WxMaPhoneNumberInfo phoneNoInfo = wxService.getUserService().getPhoneNoInfo(session.getSessionKey(), encryptedData, iv); if (phoneNoInfo == null || StringUtils.isEmpty(phoneNoInfo.getPurePhoneNumber())) { throw ErrorHelp.genException(SysCode.MiniProgram, ErrorCode.WECHAT_DECRYPT_ERROR, "用户phoneNumber解析失败"); @@ -174,12 +181,14 @@ public class WechatController { throw ErrorHelp.genException(SysCode.MiniProgram, ErrorCode.REQ_PARAMS_ERROR, ""); } //请求微信api,获取用户session_key以及openId - WxMaJscode2SessionResult session = SessionKeyCache.getData(openId); - System.out.println(JSONObject.toJSONString(session)); + Object skObject = redisUtil.hget(WX_OPENID_SESSION_REDIS,openId); + if (skObject == null){ + throw ErrorHelp.genException(SysCode.MiniProgram, ErrorCode.WECHAT_LOGIN_ERROR); + } + WxMaJscode2SessionResult session = (WxMaJscode2SessionResult)skObject; final WxMaService wxService = WxMaConfiguration.getMaService(); WxMaUserInfo userInfo = wxService.getUserService().getUserInfo(session.getSessionKey(), encryptedData, iv); - if (userInfo == null) { throw ErrorHelp.genException(SysCode.MiniProgram, ErrorCode.WECHAT_DECRYPT_ERROR, "用户phoneNumber解析失败"); } diff --git a/hai-service/src/main/java/com/hai/common/exception/ErrorCode.java b/hai-service/src/main/java/com/hai/common/exception/ErrorCode.java index b8b7ac01..32c3c93b 100644 --- a/hai-service/src/main/java/com/hai/common/exception/ErrorCode.java +++ b/hai-service/src/main/java/com/hai/common/exception/ErrorCode.java @@ -23,7 +23,7 @@ public enum ErrorCode { //////////////////APP/////////////// WECHAT_DECRYPT_ERROR("3001","微信解密错误->%s"), - WECHAT_LOGIN_ERROR("3002","当前微信用户不是学员,请联系老师"), + WECHAT_LOGIN_ERROR("3002","微信登录失败"), WECHAT_LOGIN_TEACHER_ERROR("3003","当前微信用户不是老师,请联系管理员"), //////////////////业务异常///////////// diff --git a/hai-service/src/main/java/com/hai/service/impl/HighDiscountAgentRelServiceImpl.java b/hai-service/src/main/java/com/hai/service/impl/HighDiscountAgentRelServiceImpl.java index 4c3c09a1..2fc5ce89 100644 --- a/hai-service/src/main/java/com/hai/service/impl/HighDiscountAgentRelServiceImpl.java +++ b/hai-service/src/main/java/com/hai/service/impl/HighDiscountAgentRelServiceImpl.java @@ -42,7 +42,7 @@ public class HighDiscountAgentRelServiceImpl implements HighDiscountAgentRelServ private HighDiscountAgentCodeService highDiscountAgentCodeService; @Override - @Transactional(propagation= Propagation.REQUIRES_NEW) + @Transactional(propagation= Propagation.REQUIRED) public void insertDiscountAgentRel(HighDiscountAgentRel highDiscountAgentRel,Integer stockCount) throws Exception { if (highDiscountAgentRel.getId() != null) { highDiscountAgentRelMapper.updateByPrimaryKey(highDiscountAgentRel);