diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/controller/WeChatController.java b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/WeChatController.java index a27a7a7..1c9e30e 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/controller/WeChatController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/controller/WeChatController.java @@ -54,8 +54,8 @@ public class WeChatController extends BaseController { @ApiOperation("获取微信二维码") @PostMapping("/findWxCode") public AjaxResult findWxCode(@RequestBody WeChatCodeRequest req) { - - return AjaxResult.success(weChatService.findWxCode(req)); + weChatService.findWxCode(req); + return AjaxResult.success(); } /** diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/WeChatService.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/WeChatService.java index d66b9ca..10fb4ff 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/service/WeChatService.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/WeChatService.java @@ -50,5 +50,5 @@ public interface WeChatService { * @param req 获取小程序码请求类 * @return 微信二维码二进制 */ - String findWxCode(WeChatCodeRequest req); + void findWxCode(WeChatCodeRequest req); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/WeChatServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/WeChatServiceImpl.java index ab3e1fc..a5ed03f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/WeChatServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/system/service/impl/WeChatServiceImpl.java @@ -12,12 +12,17 @@ import com.ruoyi.system.domain.dto.request.WeChatRequest; import com.ruoyi.system.service.WeChatService; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import sun.misc.BASE64Decoder; import javax.annotation.Resource; +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; -import java.util.Base64; import java.util.Formatter; import java.util.HashMap; import java.util.Map; @@ -32,12 +37,11 @@ import java.util.concurrent.TimeUnit; @Service public class WeChatServiceImpl implements WeChatService { + static BASE64Decoder decoder = new BASE64Decoder(); @Value("${wechat.appid}") private String appid; - @Value("${wechat.secret}") private String secret; - @Resource private RedisCache redisCache; @@ -146,7 +150,7 @@ public class WeChatServiceImpl implements WeChatService { * @return 微信二维码二进制 */ @Override - public String findWxCode(WeChatCodeRequest req) { + public void findWxCode(WeChatCodeRequest req) { String accessToken = this.findAccessToken(); Map map = new HashMap<>(); if (req.getWidth() != null) { @@ -155,6 +159,17 @@ public class WeChatServiceImpl implements WeChatService { map.put("path", req.getPath() + "?shanghuId=" + req.getShanghuId()); String jsonStr = JSONUtil.toJsonStr(map); String body = HttpUtil.post("https://api.weixin.qq.com/wxa/getwxacode?access_token=" + accessToken, jsonStr); - return Base64.getEncoder().encodeToString(body.getBytes()); +// BufferedImage image = null; +// return Base64.getEncoder().encodeToString(body.getBytes()); + try { + byte[] bytes1 = decoder.decodeBuffer(body); + + ByteArrayInputStream bais = new ByteArrayInputStream(bytes1); + BufferedImage bi1 = ImageIO.read(bais); + File w2 = new File("D:\\QQ.png");// 可以是jpg,png,gif格式 + ImageIO.write(bi1, "png", w2);// 不管输出什么格式图片,此处不需改动 + } catch (IOException e) { + e.printStackTrace(); + } } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java index d2d6e8c..8baf680 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java @@ -1,15 +1,5 @@ package com.ruoyi.web.controller.common; -import java.awt.image.BufferedImage; -import java.io.IOException; -import java.util.concurrent.TimeUnit; -import javax.annotation.Resource; -import javax.imageio.ImageIO; -import javax.servlet.http.HttpServletResponse; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.util.FastByteArrayOutputStream; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; import com.google.code.kaptcha.Producer; import com.ruoyi.common.config.RuoYiConfig; import com.ruoyi.common.constant.CacheConstants; @@ -19,15 +9,25 @@ import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.sign.Base64; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.system.service.ISysConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.FastByteArrayOutputStream; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import javax.imageio.ImageIO; +import javax.servlet.http.HttpServletResponse; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.concurrent.TimeUnit; /** * 验证码操作处理 - * + * * @author ruoyi */ @RestController -public class CaptchaController -{ +public class CaptchaController { @Resource(name = "captchaProducer") private Producer captchaProducer; @@ -36,20 +36,19 @@ public class CaptchaController @Autowired private RedisCache redisCache; - + @Autowired private ISysConfigService configService; + /** * 生成验证码 */ @GetMapping("/captchaImage") - public AjaxResult getCode(HttpServletResponse response) throws IOException - { + public AjaxResult getCode(HttpServletResponse response) throws IOException { AjaxResult ajax = AjaxResult.success(); boolean captchaEnabled = configService.selectCaptchaEnabled(); ajax.put("captchaEnabled", captchaEnabled); - if (!captchaEnabled) - { + if (!captchaEnabled) { return ajax; } @@ -62,15 +61,12 @@ public class CaptchaController // 生成验证码 String captchaType = RuoYiConfig.getCaptchaType(); - if ("math".equals(captchaType)) - { + if ("math".equals(captchaType)) { String capText = captchaProducerMath.createText(); capStr = capText.substring(0, capText.lastIndexOf("@")); code = capText.substring(capText.lastIndexOf("@") + 1); image = captchaProducerMath.createImage(capStr); - } - else if ("char".equals(captchaType)) - { + } else if ("char".equals(captchaType)) { capStr = code = captchaProducer.createText(); image = captchaProducer.createImage(capStr); } @@ -78,12 +74,9 @@ public class CaptchaController redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); // 转换流信息写出 FastByteArrayOutputStream os = new FastByteArrayOutputStream(); - try - { + try { ImageIO.write(image, "jpg", os); - } - catch (IOException e) - { + } catch (IOException e) { return AjaxResult.error(e.getMessage()); }