package com.doumee.service.business; import com.alibaba.fastjson.JSONObject; import com.doumee.biz.system.SystemDictDataBiz; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.core.utils.Constants; import com.doumee.core.utils.HttpsUtil; import com.doumee.core.wx.AccessToken; import com.doumee.core.wx.SendWxMessage; import com.doumee.core.wx.WxPayProperties; import com.github.binarywang.utils.qrcode.MatrixToImageWriter; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import lombok.extern.slf4j.Slf4j; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.RequestParam; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletResponse; import java.awt.*; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.util.Base64; import java.util.HashMap; import java.util.Hashtable; import java.util.Map; import java.io.IOException; import java.nio.file.Path; import java.util.Hashtable; import javax.imageio.ImageIO; import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; /** * Created by IntelliJ IDEA. * * @Author : Rk * @create 2023/5/8 18:44 */ @Slf4j @Service public class UtilService { @Autowired private SystemDictDataBiz systemDictDataBiz; public String generate(@RequestParam Integer bookingsId, @RequestParam Integer userId) { String accessToken = systemDictDataBiz.queryCodeById(106); //生成图片上传OSS Map body = new HashMap<>(); // 场景码,与前端约定,最终是需要前端解析 //body.put("scene", "bookingsId="+bookingsId+"&userId="+userId); body.put("scene", bookingsId+"x"+userId); // 正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。 body.put("env_version", "develop"); body.put("page", "packagesMine/meetingDetails/meetingDetails"); // 透明,根据你的场景自行设置body参数 body.put("is_hyaline", true); OkHttpClient client = new OkHttpClient().newBuilder().build(); okhttp3.MediaType mediaType = okhttp3.MediaType.parse("application/json"); okhttp3.RequestBody requestBody = okhttp3.RequestBody.create(mediaType, JSONObject.toJSONString(body)); Request request = new Request.Builder().url("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+accessToken) .method("POST", requestBody).build(); try { Response response = client.newCall(request).execute(); if (response.isSuccessful()) { InputStream inputStream = new ByteArrayInputStream(response.body().bytes()); return "data:image/png;base64," + this.inputStream2Base64(inputStream); } } catch (Exception e) { e.printStackTrace(); } throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"生成图片失败"); } public String inputStream2Base64(InputStream is) throws Exception { byte[] data = null; try { ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); byte[] buff = new byte[100]; int rc = 0; while ((rc = is.read(buff, 0, 100)) > 0) { swapStream.write(buff, 0, rc); } data = swapStream.toByteArray(); } catch (IOException e) { e.printStackTrace(); } finally { if (is != null) { try { is.close(); } catch (IOException e) { throw new Exception("输入流关闭异常"); } } } return Base64.getEncoder().encodeToString(data); } public InputStream generateImgStream(Integer bookingsId, Integer userId) { String accessToken = systemDictDataBiz.queryCodeById(106); log.info("微信小程序-> accessToken:{}",accessToken); //生成图片上传OSS Map body = new HashMap<>(); // 场景码,与前端约定,最终是需要前端解析 body.put("scene", bookingsId+"x"+userId); // 正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。 body.put("env_version", "release"); body.put("page", "packagesMine/meetingDetails/meetingDetails"); // 透明,根据你的场景自行设置body参数 body.put("is_hyaline", true); OkHttpClient client = new OkHttpClient().newBuilder().build(); okhttp3.MediaType mediaType = okhttp3.MediaType.parse("application/json"); okhttp3.RequestBody requestBody = okhttp3.RequestBody.create(mediaType, JSONObject.toJSONString(body)); Request request = new Request.Builder().url("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+accessToken) .method("POST", requestBody).build(); try { Response response = client.newCall(request).execute(); log.info("微信小程序-> 生成小程序二维码:{}",JSONObject.toJSONString(response)); if (response.isSuccessful()) { InputStream inputStream = new ByteArrayInputStream(response.body().bytes()); return inputStream; } } catch (Exception e) { e.printStackTrace(); } throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"生成图片失败"); } }