说明:

(1)本篇博客主要内容是:开发【前台:生成支付二维码】接口;

(2)本篇博客需要注意的点有:

● 支付url的拼凑;

● 利用zxing生成二维码;

● 二维码图片的存储;真实地址与可访问地址的转换;

目录

一:【前台:生成支付二维码】接口介绍;

1.【前台:生成支付二维码】接口,接口文档;

2.【前台:生成支付二维码】接口,在界面上的表现;

二:正式开发;

1.在OrderController中,创建处理【前台:生成支付二维码】接口的方法:qrcode()方法;

2.在OrderServiceImpl中,编写根据订单号生成二维码图片的方法:qrcode()方法;

3.编写生成二维码的工具类:QRCodeGenerator类;

(1)首先,我们需要引入商生成二维码的依赖:zxing;

(2)QRCodeGenerator类;

4.在OrderService中,反向生成qrcode()方法的方法声明;

三:测试;


一:【前台:生成支付二维码】接口介绍;

1.【前台:生成支付二维码】接口,接口文档;

2.【前台:生成支付二维码】接口,在界面上的表现;

●  点击【去支付】按钮,就对应了【生成支付二维码】接口和后面将要介绍的【前台:支付订单】接口


二:正式开发;

1.在OrderController中,创建处理【前台:生成支付二维码】接口的方法:qrcode()方法;

    /*** 【前台:生成支付二维码】接口;* @param orderNo* @return*/@ApiOperation("生成支付二维码")@PostMapping("/order/qrcode")public ApiRestResponse qrcode(@RequestParam("orderNo") String orderNo) {String pngAddress = orderService.qrcode(orderNo);return ApiRestResponse.success(pngAddress);}

说明:

(1)url,请求方式要正确;

(2)调用在Service层编写的生成二维码的逻辑方法:qrcode()方法;这个方法会返回二维码图片的访问地址;这方法在下一部分介绍;

2.在OrderServiceImpl中,编写根据订单号生成二维码图片的方法:qrcode()方法;

/*** 根据订单号,生成对应的支付二维码* @param orderNo* @return*/@Overridepublic String qrcode(String orderNo) {//首先,因为这儿是非Controller,所以,通过RequestContextHolder获取HttpServletRequest;ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getRequest();//然后,拼凑订单支付url的一部分:“127.0.0.1:8083”;String address = ip + ":" + request.getLocalPort();//然后,完整拼凑订单支付url:“http://127.0.0.1:8083//pay?orderNo=订单号”;//这个就是将要写到二维码中的信息;其实,也是后面的【前台:支付订单】接口的,附带了orderNo参数的完整urlString payUrl = "http://" + address + "/pay?orderNo=" + orderNo;//然后,调用我们在QRCodeGenerator工具类中编写的,生成二维码的方法;try {QRCodeGenerator.generateQRCode(payUrl, 350, 350, Constant.FILE_UPLOAD_DIR + orderNo + ".png");} catch (WriterException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}//获取二维码图片的访问地址;(PS:仅仅是访问地址,而是访问地址)String pngAddress = "http://" + address + "/images/" + orderNo + ".png";//然后,把这个二维码图片的访问地址返回;return pngAddress;}

说明:

(1)要明确两点:

●【前台:生成支付二维码】接口,是生成一个二维码图片;具体,就是返回二维码图片的可访问地址,前端拿到这个地址后,就可以在页面上显示二维码图片了;

● 用户扫码后,会获得二维码的内容;二维码的内容,其实就对应了后面要介绍的【前台:支付订单】的url,而且还是包含了订单号的;

(2)因为,这儿要拼凑【前台:支付订单】的完整url;所以,需要端口号;所以,需要利用RequestContextHolder去获取HttpServletRequest,进而获取端口号;

关于RequestContextHolder,在【附加:RequestContextHolder;(可以实现:在非Controller的方法中,获取HttpServletRequest)】作了介绍;

(3)自然,要拼凑【前台:支付订单】的完整url,还需要当前应用所部署服务器的url;这儿因为我们目前是开发阶段,也就是我们在测试的时候,服务是部署在本机,所以此时的url就是127.0.0.1;我们在application.properties中配置了url;

(4)然后,就是调用我们编写的工具方法,去生成二维码图片;

(5)生成二维码图片的工具类,在下一部分介绍;

(6)然后,返回二维码图片的可访问地址;主要不是图片在服务器上的真实地址,而是可访问地址;

● 之所以要返回可访问地址,而不是真实地址,主要是出于安全考虑;

● 如有需要,可以参考【Spring Boot电商项目36:商品模块二:【增加商品】接口之图片上传:静态资源映射;(其实就是通过url,访问服务器本地的文件)】;

3.编写生成二维码的工具类:QRCodeGenerator类;

(1)首先,我们需要引入商生成二维码的依赖:zxing;

        <dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.3.0</version></dependency>

(2)QRCodeGenerator类;

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.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;/*** 描述:工具类,根据订单号生成二维码;*/
public class QRCodeGenerator {/*** 生成二维码** @param text:二维码中包含的信息* @param width:二维码图片的宽度* @param height:二维码图片的高度* @param filePath:二维码图片的存放位置* @throws WriterException* @throws IOException*/public static void generateQRCode(String text, int width, int height, String filePath) throws WriterException, IOException {//首先,实例化一个QRCodeWriter对象;QRCodeWriter qrCodeWriter = new QRCodeWriter();//然后,调用encode()方法:生成一个编码后的结果;其中的第二个参数是格式,这儿我们使用QR_CODE;//这个方法,返回的结果是一个比特矩阵,即BitMatrix;BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);//然后,根据二维码图片将要存放的路径,得到一个Path类型的地址;Path path = FileSystems.getDefault().getPath(filePath);//利用matrix的工具,把上面的比特矩阵,转成二维码图片;   其中,第二个参数“PNG”,表示二维码图片是.png格式的;MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);}public static void main(String[] args) {try {generateQRCode("djhfiukhk", 350, 350, "E:/imooc-mall-upload-file/797.png");} catch (WriterException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

说明:

(1)具体参考,代码注释即可;

4.在OrderService中,反向生成qrcode()方法的方法声明;


三:测试;

启动项目;

……………………………………………………

……………………………………………………

通过,通过二维码解码工具:去解析这个二维码图片中的信息:

Spring Boot电商项目57:订单模块六:【前台:生成支付二维码】接口;(支付url的拼凑;利用zxing生成二维码;二维码图片的存储;真实地址与可访问地址的转换;)相关推荐

  1. Spring Boot电商项目59:订单模块八:【后台:订单列表】接口;

     说明: (1)本篇博客的主要内容是开发[后台:订单列表]接口: (2)本篇博客没什么难点:只需要注意:[前台:订单列表]接口是查询当前登录用户的订单数据:[后台:订单列表]接口是查询所有用户的订单数 ...

  2. Spring Boot电商项目17:用户模块六:注册接口开发之:使用【GlobalExceptionHandler】来全局统一处理异常;(涉及了@ControllerAdvice等注解)

    说明: (1)为什么写这篇博客?:在[Spring Boot电商项目15:用户模块四:注册接口开发:]中,在Service层中遇到了[用户名重复]的情况,然后Service层把这个情况做成了一个异常, ...

  3. Spring Boot电商项目

    Spring Boot电商项目 一.概述 1.电商项目整体介绍 (1)前台模块具体分析 (2)后台模块具体分析 (3) 项目演示 2 . 项目开发所需工具准备 二. 数据库设计于项目初始化 1.表设计 ...

  4. Spring Boot电商项目:概述;

    说明: (1)强调:该Spring Boot电商项目中,会有大量的以前接触过的内容:但是,当我们遇到的时候,也会重新啰嗦.重复解释:以达到该专栏形成一个比较好的闭环的目的: 目录 一:Spring B ...

  5. Spring Boot电商项目52:订单模块一:订单模块介绍;(模块介绍;效果演示;数据库设计;9个接口介绍;)

    说明: (1)本篇博客的内容:本篇博客,简单梳理下[订单模块]的基本内容: (2)声明:[订单模块]是一个比较复杂的模块,其中涉及了订单的状态的改变和订单的流转:所以,本篇博客,只是简单介绍了[订单模 ...

  6. 一套仿阿里完整版Spring Boot电商项目,前后端分离+权限管理系统

    项目简介 1.项目背景 2. B2B 模式 3. B2C 模式 ==(商城模式)*== 4. C2B 模式 5. C2C 模式 6. O2O 模式 2.商城架构图 2.1.前后端分离 基础版 2.3. ...

  7. java电商项目搭建-------订单模块

    努力好了,时间会给你答案.--------magic_guo 订单模块的流程以及用户操作如下: 1.当用户选定购物车需要结算的商品并单击结算按钮时,会跳转到订单页面,此时会将选定的购物车信息展示在订单 ...

  8. java烟草项目功能模块_一个电商项目的功能模块梳理

    电商项目核心玩法:定制商品+供应链(商品辅料库)+网红社区 最近做项目,功能越来越多,想清晰地理解项目,有点累了. 今天抽空,把这个项目的核心功能模块简要总结下,顺便画了个图. 一.全局功能模块图 二 ...

  9. 【spring boot】5.spring boot 创建web项目并使用jsp作前台页面

    贼烦的是,使用spring boot 创建web项目,然后我再idea下创建的,but 仅仅启动spring boot的启动类,就算整个项目都是好着的,就算是能够进入controller中,也不能成功 ...

最新文章

  1. LongAdder解析 1
  2. [LeetCode] Length of Last Word - 最后一个单词的长度
  3. 把mysql某一列求和_Laravel 对某一列进行筛选然后求和sum()的例子
  4. Windows使用技巧
  5. .gitignore文件_Java小白入门,Git忽略文件.gitignore详解
  6. mysql安装包没有安装程序_MySQL5.6的zip包安装教程详解
  7. spring boot—默认日志框架配置
  8. 快讯:2018 OOW Oracle技术大会PPT抢鲜下载
  9. 构造器2(Java)
  10. 替代传统C/S和B/S技术的下一代客户/服务器编程技术
  11. cat 大众点评 mysql_大众点评-CAT监控平台
  12. Performance Test Framework (PTF)是压力测试框架(轩)
  13. SAP PP销售预测转独立需求CODE
  14. Ext cookies设置、获取和清除
  15. 用强化学习玩《超级马里奥》
  16. Vue-Router学习记录
  17. Java接口之间的多继承
  18. 基于单目视觉的同时定位与地图构建方法综述
  19. Linux Polkit权限提升漏洞(CVE-2021-3560)
  20. 关于POS接口配置的几个注意事项

热门文章

  1. 生成MT/MTd模式的tet.lib
  2. MySQL怎么用x28改变颜色_MySQL SELECT练习题*28
  3. omap_i2c omap_i2c.2: controller timed out
  4. Redis非关系型数据库(三)持久化
  5. 【转】基金入门:如何买基金?
  6. 玩战塔英雄不显示服务器,王者荣耀的这个问题,国家点名了仍没有改正过来!战塔英雄就没有...
  7. java获取wps文档字数
  8. 产生粗体字的html标签,html字体加粗用css设置文字粗体样式
  9. word文档批量转换为html格式
  10. 华为路ws5200设置虚拟服务器,华为路由器WS5200如何设置上网 最详细的华为路由器WS5200上网设置方法教程...