This commit is contained in:
Administrator 2025-01-02 17:12:21 +08:00
parent 7d12de1fe6
commit 16ff649459
5 changed files with 251 additions and 0 deletions

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -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<String, Object> m = new HashMap<String, Object>();
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<String, Object> m = new HashMap<String, Object>();
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;
}
}