生成二维码接口:
1.导入依赖
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.3</version>
</dependency>
2.二维码生成类
package com.imooc.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 com.imooc.mall.common.Constant;
import java.io.File;
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();
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
Path path = FileSystems.getDefault().getPath(filePath);
MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
}
public static void main(String[] args) {
try {
generateQRCodeImage("Hello World", 350, 350, "D:/tupian/QRTest.png");
} catch (WriterException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
配置文件中
file.upload.ip=127.0.0.1
实现类中
@Value("${file.upload.ip}")
String ip;
@Override
public String qrcode(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;
}
controller
/**
* 生成支付二维码
*/
@GetMapping("order/qrcode")
@ApiOperation("生成支付二维码")
public ApiRestResponse qrcode(@RequestParam String orderNo) {
String pngAddress = orderService.qrcode(orderNo);
return ApiRestResponse.success(pngAddress);
}
支付接口
@Override
public void pay(String orderNo) {
Order order = orderMapper.selectByOrderNo(orderNo);
//查不到订单,报错
if (order == null) {
throw new ImoocMallException(ImoocMallExceptionEnum.NO_ORDER);
}
if (order.getOrderStatus() == Constant.OrderStatusEnum.NOT_PAID.getCode()) {
order.setOrderStatus(Constant.OrderStatusEnum.PAID.getCode());
order.setPayTime(new Date());
orderMapper.updateByPrimaryKeySelective(order);
} else {
throw new ImoocMallException(ImoocMallExceptionEnum.WRONG_ORDER_STATUS);
}
controller:
@GetMapping("pay")
@ApiOperation("支付接口")
public ApiRestResponse pay(@RequestParam String orderNo) {
orderService.pay(orderNo);
return ApiRestResponse.success();
}