package org.ruoyi.controller; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.ruoyi.common.core.domain.R; import org.ruoyi.domin.WeixinQrCode; import org.ruoyi.service.VxLoginService; import org.ruoyi.system.domain.vo.LoginVo; import org.ruoyi.util.WeixinApiUtil; import org.ruoyi.util.WeixinQrCodeCacheUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * 微信公众号登录 * * @author ageerle * @date 2025-05-03 */ @Slf4j @RestController public class WeixinUserController { @Autowired private WeixinApiUtil weixinApiUtil; @Autowired private VxLoginService loginService; @GetMapping(value = "/user/qrcode") public R getQrCode() { WeixinQrCode qrCode = weixinApiUtil.getQrCode(); qrCode.setUrl(null); qrCode.setExpireSeconds(null); return R.ok(qrCode); } /** * 校验是否扫描完成 * 完成,返回 JWT * 未完成,返回 check failed */ @GetMapping(value = "/user/login/qrcode") public R userLogin(String ticket) { String openId = WeixinQrCodeCacheUtil.get(ticket); if (StringUtils.isNotEmpty(openId)) { log.info("login success,open id:{}", openId); LoginVo loginVo = loginService.mpLogin(openId); return R.ok(loginVo); } log.info("login error,ticket:{}", ticket); return R.fail("check failed"); } }