diff --git a/cloud-manage-server/src/main/java/com/evotech/hd/cloud/rpc/WechatService.java b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/rpc/WechatService.java new file mode 100644 index 0000000..4b3e6c3 --- /dev/null +++ b/cloud-manage-server/src/main/java/com/evotech/hd/cloud/rpc/WechatService.java @@ -0,0 +1,20 @@ +package com.evotech.hd.cloud.rpc; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +@FeignClient(value = "wechat-server") +public interface WechatService { + + @GetMapping(value = "/wechat/xcx/qrcode/get2", + consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public String getQRCode2(@RequestParam String path, @RequestParam String width, @RequestParam String env_version); + + + @GetMapping(value = "/wechat/xcx/qrcode/create2", + consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE}) + public String createQRCode2(@RequestParam String path, @RequestParam String width); + +} diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/controller/XCXQRCodeController.java b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/XCXQRCodeController.java new file mode 100644 index 0000000..43c3191 --- /dev/null +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/controller/XCXQRCodeController.java @@ -0,0 +1,58 @@ +package com.evotech.hd.wechat.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import com.evotech.hd.wechat.service.XCXQRCodeService; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; + +//@Tag(name = "小程序码") +@RestController +@RequestMapping("/xcx/qrcode") +@ApiSupport(order = 16) +public class XCXQRCodeController { + + + @Resource + private XCXQRCodeService xcxQRCodeService; + + +// @Operation(summary = "获取小程序码") + @GetMapping("/get") +// @ApiOperationSupport(order = 1) + public void getQRCode(String path, @RequestParam(required = false) String width, @RequestParam(required = false)String env_version, HttpServletResponse response) { + xcxQRCodeService.getQRCode(path, width, env_version, response); + } + + +// @Operation(summary = "获取小程序二维码") + @GetMapping("/create") +// @ApiOperationSupport(order = 2) + public void createQRCode(String path, @RequestParam(required = false) String width, HttpServletResponse response) { + xcxQRCodeService.createQRCode(path, width, response); + } + + +// @Operation(summary = "获取小程序码") + @GetMapping("/get2") +// @ApiOperationSupport(order = 1) + public String getQRCode2(String path, @RequestParam(required = false) String width, @RequestParam(required = false)String env_version) { + return xcxQRCodeService.getQRCode2(path, width, env_version); + } + +// @Operation(summary = "获取小程序二维码") + @GetMapping("/create2") +// @ApiOperationSupport(order = 2) + public String createQRCode2(String path, @RequestParam(required = false) String width) { + return xcxQRCodeService.createQRCode2(path, width); + } + + + + + +} diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/XCXQRCodeService.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/XCXQRCodeService.java new file mode 100644 index 0000000..b9e1faa --- /dev/null +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/XCXQRCodeService.java @@ -0,0 +1,15 @@ +package com.evotech.hd.wechat.service; + +import jakarta.servlet.http.HttpServletResponse; + +public interface XCXQRCodeService { + + public void getQRCode(String path, String width, String env_version, HttpServletResponse response); + + public void createQRCode(String path, String width, HttpServletResponse response); + + public String getQRCode2(String path, String width, String env_version); + + public String createQRCode2(String path, String width); + +} diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/XCXQRCodeServiceImpl.java b/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/XCXQRCodeServiceImpl.java new file mode 100644 index 0000000..0922b37 --- /dev/null +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/service/impl/XCXQRCodeServiceImpl.java @@ -0,0 +1,89 @@ +package com.evotech.hd.wechat.service.impl; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.Base64; +import java.util.Date; + +import org.springframework.http.MediaType; +import org.springframework.stereotype.Service; + +import com.evotech.hd.wechat.service.AccessTokenService; +import com.evotech.hd.wechat.service.XCXQRCodeService; +import com.evotech.hd.wechat.utils.xcx.QRCodeUtil; + +import cn.hutool.core.date.DatePattern; +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.io.IoUtil; +import jakarta.annotation.Resource; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.http.HttpServletResponse; + +@Service +public class XCXQRCodeServiceImpl implements XCXQRCodeService { + + + @Resource + private AccessTokenService accessTokenService; + + @Override + public void getQRCode(String path, String width, String env_version, HttpServletResponse response) { + byte[] res = QRCodeUtil.getQRCode(accessTokenService.getAccessToken(), path, width, env_version); + String fileName = "小程序码" + DateUtil.format(new Date(), DatePattern.PURE_DATETIME_PATTERN) + ".png"; + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + try { + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + ServletOutputStream out = null; + try { + out = response.getOutputStream(); + out.write(res); + out.flush(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + IoUtil.close(out); + } + + } + + @Override + public void createQRCode(String path, String width, HttpServletResponse response) { + byte[] res = QRCodeUtil.createQRCode(accessTokenService.getAccessToken(), path, width); + String fileName = "小程序二维码" + DateUtil.format(new Date(), DatePattern.PURE_DATETIME_PATTERN) + ".png"; + response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE); + try { + response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + ServletOutputStream out = null; + try { + out = response.getOutputStream(); + out.write(res); + out.flush(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + IoUtil.close(out); + } + } + + @Override + public String getQRCode2(String path, String width, String env_version) { + byte[] res = QRCodeUtil.getQRCode(accessTokenService.getAccessToken(), path, width, env_version); + return Base64.getEncoder().encodeToString(res); + } + + @Override + public String createQRCode2(String path, String width) { + byte[] res = QRCodeUtil.createQRCode(accessTokenService.getAccessToken(), path, width); + return Base64.getEncoder().encodeToString(res); + } + +} diff --git a/wechat-server/src/main/java/com/evotech/hd/wechat/utils/xcx/QRCodeUtil.java b/wechat-server/src/main/java/com/evotech/hd/wechat/utils/xcx/QRCodeUtil.java new file mode 100644 index 0000000..67ab596 --- /dev/null +++ b/wechat-server/src/main/java/com/evotech/hd/wechat/utils/xcx/QRCodeUtil.java @@ -0,0 +1,69 @@ +package com.evotech.hd.wechat.utils.xcx; + +import java.util.HashMap; +import java.util.Map; + +import org.springframework.util.StringUtils; + +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.json.JSONUtil; + +public class QRCodeUtil { + + private static String getQRCodeUrl = "https://api.weixin.qq.com/wxa/getwxacode?access_token="; + private static String createQRCodeUrl = "https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token="; + + /** + * 获取小程序码 + * POST + * @param + * @return + */ + public static byte[] getQRCode(String access_token, String path, String width, String env_version) { + Map m = new HashMap(); + m.put("path", path); + m.put("width", StringUtils.hasText(width)?width:"1280"); + m.put("env_version", env_version); + + HttpResponse response = HttpRequest.post(getQRCodeUrl + access_token).body(JSONUtil.toJsonStr(m)).execute(); + byte[] bodyBytes = response.bodyBytes(); +// HttpRequest.post(getQRCodeUrl + access_token).body(JSONUtil.toJsonStr(m)).execute().bodyBytes(); + if (bodyBytes == null) { + throw new RuntimeException("获取小程序码异常:" + response.body()); + } + if (bodyBytes.length < 200) { + throw new RuntimeException("获取小程序码失败!"); + } + + return bodyBytes; + } + + + + + + + /** + * 获取小程序二维码 + * POST + * @param + * @return + */ + public static byte[] createQRCode(String access_token, String path, String width) { + Map m = new HashMap(); + m.put("path", path); + m.put("width", StringUtils.hasText(width)?width:"1280"); + HttpResponse response = HttpRequest.post(createQRCodeUrl + access_token).body(JSONUtil.toJsonStr(m)).execute(); + byte[] bodyBytes = response.bodyBytes(); +// HttpRequest.post(getQRCodeUrl + access_token).body(JSONUtil.toJsonStr(m)).execute().bodyBytes(); + if (bodyBytes == null) { + throw new RuntimeException("获取小程序二维码异常:" + response.body()); + } + if (bodyBytes.length < 200) { + throw new RuntimeException("获取小程序二维码失败!"); + } + return bodyBytes; + } + +}