package com.farriver.bwf.web.controller.wechat; import com.farriver.bwf.common.model.ApiData; import com.farriver.bwf.common.statics.LangConstants; import com.farriver.bwf.common.utilities.VerificationCode; import com.farriver.bwf.data.transferobject.viewmodel.vip.VIPMasterViewModel; import com.farriver.bwf.data.transferobject.wechat.*; import com.farriver.bwf.service.config.RedisUtil; import com.farriver.bwf.service.system.SystemAliyunSMSService; import com.farriver.bwf.service.wechat.WeChatUserService; import com.farriver.bwf.web.initializer.config.JwtConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.awt.image.BufferedImage; import java.io.IOException; @RestController @RequestMapping("/api/wechat/oauth") public class WeChatOauthController { private static final Logger logger = LoggerFactory.getLogger(WeChatOauthController.class); @Resource private WeChatUserService weChatUserService; @Resource private WeChatOauthViaGZHConfig weChatOauthViaGZHConfig; @Resource private WeChatOauthViaMiniProgramConfig weChatOauthViaMiniProgramConfig; @Resource private JwtConfig jwtConfig; @Resource private RedisUtil redisUtil; @PostMapping("/GetAppConfig") public ApiData GetAppConfig() { try { WeChatUserModel data = new WeChatUserModel(); if (data == null) { return ApiData.error(LangConstants.MSG_INFO_FAILED); } else { String token = jwtConfig.getToken(data.getOpenid()); data.setToken(token); return ApiData.ok(LangConstants.MSG_INFO_SUCCESS, data); } } catch (Exception ex) { logger.error(ex.getMessage(), ex); return ApiData.error(LangConstants.MSG_INFO_FAILED, ex.getMessage()); } } @PostMapping("/LoginByWXOpenID") public ApiData LoginByWXOpenID(@RequestBody WeChatLoginInfo weChatLoginInfo) { try { if (weChatLoginInfo == null) { return ApiData.error(LangConstants.MSG_ERROR_PARAMETERS); } if (weChatLoginInfo.getOpenid() == null || weChatLoginInfo.getOpenid().isEmpty()) { return ApiData.error(LangConstants.MSG_ERROR_PARAMETERS); } WeChatUserModel data = weChatUserService.WeChatLoginByOpenid(weChatLoginInfo); if (data == null) { return ApiData.error(LangConstants.MSG_ERROR_USER_NOT_EXISTED); } else { String token = jwtConfig.getToken(data.getId()); data.setToken(token); return ApiData.ok(LangConstants.MSG_INFO_SUCCESS, data); } } catch (Exception ex) { logger.error(ex.getMessage(), ex); return ApiData.error(LangConstants.MSG_INFO_FAILED, ex.getMessage()); } } @PostMapping("/loginBySMSCode") public ApiData LoginBySMSCode(@RequestBody WeChatLoginInfo weChatLoginInfo) { try { if (weChatLoginInfo == null) { return ApiData.error(LangConstants.MSG_ERROR_PARAMETERS); } if (weChatLoginInfo.getCellphone() == null || weChatLoginInfo.getCellphone().isEmpty()) { return ApiData.error(LangConstants.MSG_ERROR_PARAMETERS); } if (weChatLoginInfo.getRandomcode() == null || weChatLoginInfo.getRandomcode().isEmpty()) { return ApiData.error(LangConstants.MSG_ERROR_PARAMETERS); } String value = (String) redisUtil.hget("WE_CHAT_LOGIN_SMS_CODE_LIST", weChatLoginInfo.getCellphone()); if (value == null || value.isEmpty()) { return ApiData.error(LangConstants.MSG_ERROR_VERIFY_CODE_EXPIRED); } if (!weChatLoginInfo.getRandomcode().equals(value)) { return ApiData.error(LangConstants.MSG_ERROR_VERIFY_CODE); } WeChatUserModel data = weChatUserService.WeChatLoginBySMSCode(weChatLoginInfo); if (data == null) { return ApiData.error(LangConstants.MSG_INFO_FAILED); } else { String token = jwtConfig.getToken(data.getId()); data.setToken(token); return ApiData.ok(LangConstants.MSG_INFO_SUCCESS, data); } } catch (Exception ex) { logger.error(ex.getMessage(), ex); return ApiData.error(LangConstants.MSG_INFO_FAILED, ex.getMessage()); } } @PostMapping("/loginByPassword") public ApiData LoginByPassword(@RequestBody WeChatLoginInfo weChatLoginInfo) { try { if (weChatLoginInfo == null) { return ApiData.error(LangConstants.MSG_ERROR_PARAMETERS); } if (weChatLoginInfo.getCellphone() == null || weChatLoginInfo.getCellphone().isEmpty()) { return ApiData.error(LangConstants.MSG_ERROR_PARAMETERS); } if (weChatLoginInfo.getPassword() == null || weChatLoginInfo.getPassword().isEmpty()) { return ApiData.error(LangConstants.MSG_ERROR_PARAMETERS); } WeChatUserModel data = weChatUserService.WeChatLoginByPassword(weChatLoginInfo); if (data == null) { return ApiData.error(LangConstants.MSG_INFO_FAILED); } else { String token = jwtConfig.getToken(data.getId()); data.setToken(token); return ApiData.ok(LangConstants.MSG_INFO_SUCCESS, data); } } catch (Exception ex) { logger.error(ex.getMessage(), ex); return ApiData.error(LangConstants.MSG_INFO_FAILED, ex.getMessage()); } } @PostMapping("/RegisterUser") public ApiData RegisterUser(@RequestBody WeChatUserModel model) { try { VIPMasterViewModel newUser = weChatUserService.RegisterUser(model); if (newUser == null) { return ApiData.error(LangConstants.MSG_ERROR_USER_NOT_EXISTED); } String token = jwtConfig.getToken(newUser.getId()); newUser.setToken(token); return ApiData.ok(LangConstants.MSG_INFO_SUCCESS, newUser); } catch (Exception ex) { logger.error(ex.getMessage(), ex); return ApiData.error(LangConstants.MSG_INFO_FAILED, ex.getMessage()); } } @PostMapping("/RegisterUserByCellphone") public ApiData RegisterUserByCellphone(@RequestBody WeChatUserModel model) { try { if (model == null) { return ApiData.error(LangConstants.MSG_ERROR_PARAMETERS); } if (model.getCellphone() == null || model.getCellphone().isEmpty()) { return ApiData.error(LangConstants.MSG_ERROR_PARAMETERS); } if (model.getRandomcode() == null || model.getRandomcode().isEmpty()) { return ApiData.error(LangConstants.MSG_ERROR_PARAMETERS); } String value = (String) redisUtil.hget("WE_CHAT_LOGIN_SMS_CODE_LIST", model.getCellphone()); if (value == null || value.isEmpty()) { return ApiData.error(LangConstants.MSG_ERROR_VERIFY_CODE_EXPIRED); } if (!model.getRandomcode().equals(value)) { return ApiData.error(LangConstants.MSG_ERROR_VERIFY_CODE); } VIPMasterViewModel newUser = weChatUserService.RegisterUser(model); String token = jwtConfig.getToken(newUser.getId()); newUser.setToken(token); return ApiData.ok(LangConstants.MSG_INFO_SUCCESS, newUser); } catch (Exception ex) { logger.error(ex.getMessage(), ex); return ApiData.error(LangConstants.MSG_INFO_FAILED, ex.getMessage()); } } @PostMapping("/ResetPasswordCellphone") public ApiData ResetPasswordCellphone(@RequestBody WeChatUserModel model) { try { if (model == null) { return ApiData.error(LangConstants.MSG_ERROR_PARAMETERS); } if (model.getCellphone() == null || model.getCellphone().isEmpty()) { return ApiData.error(LangConstants.MSG_ERROR_PARAMETERS); } if (model.getRandomcode() == null || model.getRandomcode().isEmpty()) { return ApiData.error(LangConstants.MSG_ERROR_PARAMETERS); } String value = (String) redisUtil.hget("WE_CHAT_LOGIN_SMS_CODE_LIST", model.getCellphone()); if (value == null || value.isEmpty()) { return ApiData.error(LangConstants.MSG_ERROR_VERIFY_CODE_EXPIRED); } if (!model.getRandomcode().equals(value)) { return ApiData.error(LangConstants.MSG_ERROR_VERIFY_CODE); } return weChatUserService.ResetPassword(model); } catch (Exception ex) { logger.error(ex.getMessage(), ex); return ApiData.error(LangConstants.MSG_INFO_FAILED, ex.getMessage()); } } @GetMapping("/GetSMSCode") public ApiData GetSMSCode(@RequestParam(defaultValue = "") String cellphone) { try { String randomCode = SystemAliyunSMSService.getRandomCode(); redisUtil.hset("WE_CHAT_LOGIN_SMS_CODE_LIST", cellphone, randomCode, 300); redisUtil.hset("RESET_PASS_PHONE_SMS_CODE_LIST", cellphone, randomCode, 300); SystemAliyunSMSService aliyunSMSService = new SystemAliyunSMSService(); aliyunSMSService.sendSms(cellphone, randomCode); return ApiData.ok(LangConstants.MSG_INFO_SUCCESS); } catch (Exception ex) { logger.error(ex.getMessage(), ex); return ApiData.error(LangConstants.MSG_INFO_FAILED, ex.getMessage()); } } @GetMapping("/GetAccessTokenForGZH") public ApiData GetAccessTokenForGZH(@RequestParam(defaultValue = "") String code) { try { return weChatOauthViaGZHConfig.GetAccessToken(code); } catch (Exception ex) { logger.error(ex.getMessage(), ex); return ApiData.error(LangConstants.MSG_INFO_FAILED, ex.getMessage()); } } @GetMapping("/GetAccessTokenForMiniProgram") public ApiData GetAccessTokenForMiniProgram() { try { return weChatOauthViaMiniProgramConfig.GetAccessToken(); } catch (Exception ex) { logger.error(ex.getMessage(), ex); return ApiData.error(LangConstants.MSG_INFO_FAILED, ex.getMessage()); } } @GetMapping("/GetWXCode2SessionForMiniProgram") public ApiData GetWXCode2SessionForMiniProgram(@RequestParam(defaultValue = "") String code) { try { return weChatOauthViaMiniProgramConfig.GetWXCode2Session(code); } catch (Exception ex) { logger.error(ex.getMessage(), ex); return ApiData.error(LangConstants.MSG_INFO_FAILED, ex.getMessage()); } } @PostMapping("/GetUserPhoneNumberForMiniProgram") public ApiData GetUserPhoneNumberForMiniProgram(@RequestBody MiniProgramUserPhoneNumberParam model) { try { return weChatOauthViaMiniProgramConfig.GetUserPhoneNumber(model); } catch (Exception ex) { logger.error(ex.getMessage(), ex); return ApiData.error(LangConstants.MSG_INFO_FAILED, ex.getMessage()); } } @GetMapping("/code") public void verifyCode(@RequestParam("account") String account, HttpServletRequest request, HttpServletResponse resp) throws IOException { VerificationCode code = new VerificationCode(); BufferedImage image = code.getImage(); redisUtil.hset("WE_CHAT_LOGIN_VERIFY_CODE_LIST", account, code.getText(), 300); VerificationCode.output(image, resp.getOutputStream()); } }