首页 > 其他 > 详细

生成支付二维码

时间:2021-05-08 00:12:52      阅读:23      评论:0      收藏:0      [点我收藏+]

一、需求

技术分享图片

技术分享图片

二、谷歌Zxing二维码生成工具

1.添加maven依赖,

<!-- 谷歌zxing 二维码 -->
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.3.3</version>
</dependency>
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.3.3</version>
</dependency>

2.生成二维码的工具类,

package me.zhangbo.mall.utils;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;

/**
 * 描述:     生成二维码工具
 */
public class QRCodeGenerator {
    public static void generateQRCodeImage(String text, int width, int height, String filePath)
            throws WriterException, IOException {
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        //将text的内容进行编码,以二维码的形式进行展现
        BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
        //Path用于来表示文件路径和文件
        Path path = FileSystems.getDefault().getPath(filePath);
        //保存二维码到指定的路径
        MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
    }   
}

3.测试二维码工具类,

public static void main(String[] args) {
        try {
            generateQRCodeImage("Hello World", 350, 350,
                    "C:/Users/JPF/Desktop/QRtest.png");
        } catch (WriterException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

4.测试结果,
技术分享图片
技术分享图片
5.service

@Override
    public String orderQRCode(String orderNo) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();

        String address = ip + ":" + request.getLocalPort();
        String payUrl = "http://" + address + "/pay?orderNo=" + orderNo;
        try {
            QRCodeGenerator.generateQRCodeImage(payUrl, 350, 350,
                    Constant.FILE_UPLOAD_DIR + orderNo + ".png");
        } catch (WriterException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        String pngAddress = "http://" + address + "/images/" + orderNo + ".png";
        return pngAddress;
    }

6.controller,

@PostMapping("order/qrcode")
    @ApiOperation("生成支付二维码")
    public ApiGeneralResponse orderQRCode(@RequestParam String orderNo) {
        String pngAdress = orderService.orderQRCode(orderNo);
        return ApiGeneralResponse.success(pngAdress);
    }

7.测试结果,
技术分享图片
访问图片的URL,即访问服务器上面的图片资源,在本地找到与URL对应的路径,在客户端中进行显示:
技术分享图片
二维码解码得到的是订单的支付链接:
技术分享图片
二维码图片在服务器本地的实际位置:
技术分享图片

生成支付二维码

原文:https://www.cnblogs.com/little-mao2020/p/14741911.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!