在做PC端通联支付的时候发现和微信支付不一样,返回的是一串支付串,并不直接是一个支付二维码,所以这里就需要手动转换了,

通过 Hutool 实现

添加如下依赖

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.0.7</version>
</dependency>
 
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.3.3</version>
</dependency>

二维码的返回有两种方式:

方式1:直接在前端显示,将转换信息转成Base64返回即可

public static void main(String[] args) {
   // 二维码内容
   String url = "https://www.baidu.com/";
   // 生成二维码并指定宽高
   BufferedImage generate = QrCodeUtil.generate(url, 300, 300);
   // 转换流信息写出
   FastByteArrayOutputStream os = new FastByteArrayOutputStream();
   try {
       ImageIO.write(generate, "jpg", os);
   } catch (IOException e) {
       return e.getMessage();
   }
   //如果二维码要在前端显示需要转成Base64
   return Base64.getEncoder().encodeToString(os.toByteArray());
}

前端通过这种方式显示即可

<!-- data:image/png;base64, 的意思是将后端返回的base64转换为png格式的图片 -->
<img src="data:image/png;base64,后端返回的base64" />

方式2;直接将该二维码下载到本地

public static void main(String[] args) {
   // 生成二维码到文件,也可以到流
   QrCodeUtil.generate("http://hutool.cn/", new QrConfig(300,300), FileUtil.file("D:/01.jpg"));
}

在这里插入图片描述
二维码效果图
在这里插入图片描述


给二维码自定义颜色

public static void main(String[] args) {
    QrConfig config = new QrConfig(300, 300);//二维码宽/高
    // 设置边距,既二维码和背景之间的边距
    config.setMargin(3);
    // 设置前景色,既二维码颜色(青色)
    config.setForeColor(Color.CYAN.getRGB());
    // 设置背景色(灰色)
    config.setBackColor(Color.GRAY.getRGB());

    // 生成二维码到文件,也可以到流
    QrCodeUtil.generate("http://hutool.cn/", config, FileUtil.file("D:/01.jpg"));
}

在这里插入图片描述

参考官方文档选择需要的样式

参考文档:Hutool官方文档

参考链接:https://blog.csdn.net/weixin_51414132/article/details/123904242

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐