Spring Boot电商项目57:订单模块六:【前台:生成支付二维码】接口;(支付url的拼凑;利用zxing生成二维码;二维码图片的存储;真实地址与可访问地址的转换;)
说明:
(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生成二维码;二维码图片的存储;真实地址与可访问地址的转换;)相关推荐
- Spring Boot电商项目59:订单模块八:【后台:订单列表】接口;
说明: (1)本篇博客的主要内容是开发[后台:订单列表]接口: (2)本篇博客没什么难点:只需要注意:[前台:订单列表]接口是查询当前登录用户的订单数据:[后台:订单列表]接口是查询所有用户的订单数 ...
- Spring Boot电商项目17:用户模块六:注册接口开发之:使用【GlobalExceptionHandler】来全局统一处理异常;(涉及了@ControllerAdvice等注解)
说明: (1)为什么写这篇博客?:在[Spring Boot电商项目15:用户模块四:注册接口开发:]中,在Service层中遇到了[用户名重复]的情况,然后Service层把这个情况做成了一个异常, ...
- Spring Boot电商项目
Spring Boot电商项目 一.概述 1.电商项目整体介绍 (1)前台模块具体分析 (2)后台模块具体分析 (3) 项目演示 2 . 项目开发所需工具准备 二. 数据库设计于项目初始化 1.表设计 ...
- Spring Boot电商项目:概述;
说明: (1)强调:该Spring Boot电商项目中,会有大量的以前接触过的内容:但是,当我们遇到的时候,也会重新啰嗦.重复解释:以达到该专栏形成一个比较好的闭环的目的: 目录 一:Spring B ...
- Spring Boot电商项目52:订单模块一:订单模块介绍;(模块介绍;效果演示;数据库设计;9个接口介绍;)
说明: (1)本篇博客的内容:本篇博客,简单梳理下[订单模块]的基本内容: (2)声明:[订单模块]是一个比较复杂的模块,其中涉及了订单的状态的改变和订单的流转:所以,本篇博客,只是简单介绍了[订单模 ...
- 一套仿阿里完整版Spring Boot电商项目,前后端分离+权限管理系统
项目简介 1.项目背景 2. B2B 模式 3. B2C 模式 ==(商城模式)*== 4. C2B 模式 5. C2C 模式 6. O2O 模式 2.商城架构图 2.1.前后端分离 基础版 2.3. ...
- java电商项目搭建-------订单模块
努力好了,时间会给你答案.--------magic_guo 订单模块的流程以及用户操作如下: 1.当用户选定购物车需要结算的商品并单击结算按钮时,会跳转到订单页面,此时会将选定的购物车信息展示在订单 ...
- java烟草项目功能模块_一个电商项目的功能模块梳理
电商项目核心玩法:定制商品+供应链(商品辅料库)+网红社区 最近做项目,功能越来越多,想清晰地理解项目,有点累了. 今天抽空,把这个项目的核心功能模块简要总结下,顺便画了个图. 一.全局功能模块图 二 ...
- 【spring boot】5.spring boot 创建web项目并使用jsp作前台页面
贼烦的是,使用spring boot 创建web项目,然后我再idea下创建的,but 仅仅启动spring boot的启动类,就算整个项目都是好着的,就算是能够进入controller中,也不能成功 ...
最新文章
- LongAdder解析 1
- [LeetCode] Length of Last Word - 最后一个单词的长度
- 把mysql某一列求和_Laravel 对某一列进行筛选然后求和sum()的例子
- Windows使用技巧
- .gitignore文件_Java小白入门,Git忽略文件.gitignore详解
- mysql安装包没有安装程序_MySQL5.6的zip包安装教程详解
- spring boot—默认日志框架配置
- 快讯:2018 OOW Oracle技术大会PPT抢鲜下载
- 构造器2(Java)
- 替代传统C/S和B/S技术的下一代客户/服务器编程技术
- cat 大众点评 mysql_大众点评-CAT监控平台
- Performance Test Framework (PTF)是压力测试框架(轩)
- SAP PP销售预测转独立需求CODE
- Ext cookies设置、获取和清除
- 用强化学习玩《超级马里奥》
- Vue-Router学习记录
- Java接口之间的多继承
- 基于单目视觉的同时定位与地图构建方法综述
- Linux Polkit权限提升漏洞(CVE-2021-3560)
- 关于POS接口配置的几个注意事项
热门文章
- 生成MT/MTd模式的tet.lib
- MySQL怎么用x28改变颜色_MySQL SELECT练习题*28
- omap_i2c omap_i2c.2: controller timed out
- Redis非关系型数据库(三)持久化
- 【转】基金入门:如何买基金?
- 玩战塔英雄不显示服务器,王者荣耀的这个问题,国家点名了仍没有改正过来!战塔英雄就没有...
- java获取wps文档字数
- 产生粗体字的html标签,html字体加粗用css设置文字粗体样式
- word文档批量转换为html格式
- 华为路ws5200设置虚拟服务器,华为路由器WS5200如何设置上网 最详细的华为路由器WS5200上网设置方法教程...