feat(system): 优化微信小程序码获取接口,直接返回图片字节
- 修改getOrderQRCodeUnlimited接口,支持直接返回图片字节流 - 移除保存二维码图片到服务器文件的逻辑 - 在未登录时,通过响应码401返回错误提示 - 设置响应内容类型为image/png,禁用缓存,直接输出二维码图片数据 - 简化接口实现,提升性能与用户体验
This commit is contained in:
@@ -35,7 +35,9 @@ import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@@ -965,14 +967,16 @@ public class WxLoginController extends BaseController {
|
||||
return fail("获取失败", null);
|
||||
}
|
||||
|
||||
@Operation(summary = "获取微信小程序码-数量极多的业务场景(支持自定义页面与场景值)")
|
||||
@Operation(summary = "获取微信小程序码-数量极多的业务场景(直接返回图片字节,支持自定义页面与场景值)")
|
||||
@GetMapping("/getOrderQRCodeUnlimited/{orderNo}")
|
||||
public ApiResult<?> getOrderQRCodeUnlimited(@PathVariable("orderNo") String orderNo,
|
||||
@RequestParam(required = false) String page,
|
||||
@RequestParam(required = false) String scene) {
|
||||
public void getOrderQRCodeUnlimited(@PathVariable("orderNo") String orderNo,
|
||||
@RequestParam(required = false) String page,
|
||||
@RequestParam(required = false) String scene,
|
||||
HttpServletResponse response) throws IOException {
|
||||
final User loginUser = getLoginUser();
|
||||
if(loginUser == null){
|
||||
return fail("请先登录");
|
||||
response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "请先登录");
|
||||
return;
|
||||
}
|
||||
String apiUrl = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + getAccessToken(loginUser.getTenantId());
|
||||
final HashMap<String, Object> map = new HashMap<>();
|
||||
@@ -985,17 +989,12 @@ public class WxLoginController extends BaseController {
|
||||
byte[] qrCode = HttpRequest.post(apiUrl)
|
||||
.body(JSON.toJSONString(map))
|
||||
.execute().bodyBytes();
|
||||
System.out.println("qrCode = " + qrCode);
|
||||
|
||||
// 保存的文件名称
|
||||
final String fileName = CommonUtil.randomUUID8().concat(".png");
|
||||
// 保存路径
|
||||
String filePath = getUploadDir().concat("qrcode/") + fileName;
|
||||
File file = FileUtil.writeBytes(qrCode, filePath);
|
||||
if (file != null) {
|
||||
return success(config.getFileServer().concat("/qrcode/").concat(fileName));
|
||||
}
|
||||
return fail("获取失败", null);
|
||||
// 直接将小程序码图片字节写回响应,不依赖 file.websoft.top 文件服务器
|
||||
response.setContentType("image/png");
|
||||
response.setHeader("Cache-Control", "no-cache");
|
||||
response.getOutputStream().write(qrCode);
|
||||
response.getOutputStream().flush();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user