生成支付二維碼


一、需求



二、谷歌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對應的路徑,在客戶端中進行顯示:

二維碼解碼得到的是訂單的支付鏈接:

二維碼圖片在服務器本地的實際位置:

8.后端二維碼設計時二維碼工具類中ip設置為localhost,只能在本機訪問本機時使用,所以得到二維碼圖片之后,進行解析,得到支付連接在本機中訪問支付連接進行支付,如果想用手機掃碼,可以將ip設置為局域網ip,在同一個局域網中的手機就可以進行掃碼,一般在上線后會設置ip為服務器的外網ip,整個互聯網都可以進行掃碼支付

參考文獻

https://blog.csdn.net/qq_33204709/article/details/80979685


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM