线上二维码收款码用java(二维码收款码怎么制作)
随着移动支付和互联网支付的普及,线上支付方式也越来越多样化,线上收款码也成为了一种主流支付方式之一。而二维码收款码的制作,也成为许多商家关注的问题。那么本文将介绍如何使用Java语言制作二维码收款码。
首先,我们需要了解二维码收款码的原理。二维码收款码就是将商家的收款账号信息以及金额信息等打包成一个二维码,让消费者扫描后可以直接完成支付。而二维码的制作,则可以使用开源库zxing来实现。
zxing是一款免费的开源的、强大的二维码识别库,可以在Java中直接进行调用,支持生成、解析多种码制,包括二维码和一维码。同时,zxing还支持二维码的高度定制和自定义,可以根据不同的需求,生成不同类型、不同规格的二维码。
接下来,我们来看一下如何生成二维码收款码。我们需要先引入zxing库,而zxing库又依赖于一些其他的库,所以我们需要在maven中添加以下依赖项:
```xml
com.google.zxing
core
3.3.0
com.google.zxing
javase
3.3.0
```
接下来,我们可以使用以下代码生成二维码收款码:
```java
public class QRCodeUtils {
/**
* 生成二维码
*
* @param content 二维码内容
* @param outputStream 二维码输出流
* @param size 二维码大小
* @throws WriterException
*/
public static void generateQRCode(String content, OutputStream outputStream, int size) throws WriterException, IOException {
Hashtable hints = new Hashtable();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
hints.put(EncodeHintType.MARGIN, 0);
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, size, size, hints);
MatrixToImageWriter.writeToStream(bitMatrix, "png", outputStream);
}
}
```
这个方法可以直接输出一个二维码图片,我们只需要在代码中传入相应的商家账号、金额信息,即可生成相应的收款码图片。
从代码中可以看到,我们使用了zxing库中的`MultiFormatWriter()`方法,该方法可以生成多种码制的二维码图片,我们选择的是QR_CODE格式的二维码。同时,我们还设置了二维码图片的大小,并且传入了商家账号、金额等信息。
此时,二维码收款码已经生成。但是,如果需要将二维码收款码上传到线上平台进行付款,就需要在二维码的底层添加商户标识。这个标识在广力云中被称为“代收标识码”,是一串数字,由广力云提供给商户,商户需要将其嵌入到二维码图片中。
为了在二维码底层添加商户代收标识码,我们可以对生成的图片进行处理,将代收标识码嵌入到二维码中。具体过程可以使用ImageIO库中的BufferedImage对象实现:
```java
public class QRCodeUtils {
/**
* 生成带商户标识的二维码
*
* @param content 二维码内容
* @param outputStream 二维码输出流
* @param size 二维码大小
* @param merchantId 商户标识
* @throws WriterException
*/
public static void generateQRCodeWithMerchantId(String content, OutputStream outputStream, int size, String merchantId) throws WriterException, IOException {
int width = size;
int height = size;
Hashtable hints = new Hashtable();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
hints.put(EncodeHintType.MARGIN, 0);
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 设置商户代收标识码颜色
int merchantIdColor = (int) (Math.random() * 0xffffff);//生成随机颜色码
Graphics2D graphics = image.createGraphics();
graphics.setColor(Color.WHITE);
graphics.fillRect(0, 0, width, height);
for (int x = 0; x
for (int y = 0; y
// 如果这个位置不是白色,则判断是否需要添加商户标识码
if (bitMatrix.get(x, y)) {
if (x
int pixel = bitMatrix.get(x, y) ? merchantIdColor : Color.WHITE.getRGB();
image.setRGB(x, y, pixel);
} else {
image.setRGB(x, y, Color.BLACK.getRGB());
}
}
}
}
graphics.dispose();
ImageIO.write(image, "png", outputStream);
}
}
```
从代码中可以看到,在对二维码图片进行处理时,我们生成了一个与二维码完全相同的BufferedImage对象,并且遍历了整个二维码图片像素,如果某个位置上不是白色,我们就将商户标识码嵌入其底层中,如果是,则维持其颜色不变。
至此,我们已经可以使用Java语言生成带有商户代收标识码的二维码收款码。值得注意的是,广力云是一家聚合码收款代理,商户费率为0.38%,并且只支持正规企业开通该服务,故如果要使用广力云的服务,需要有营业执照作为认证。