我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringMVC+Mybatis二维码如何实现多平台付款

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringMVC+Mybatis二维码如何实现多平台付款

小编给大家分享一下SpringMVC+Mybatis二维码如何实现多平台付款,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

整体思路:

实现微信支付宝等支付平台合多为一的二维码支付,并且实现有效时间内支付有效,本人采用的框架是spring springmvc mybatis框架,maven管理。其实如果支付,不需要mybatis也能实现,代码和本人见解还需大神指教。

基本流程和思路:

  • 用户点击支付

  • 出现一次支付密码,并且带有时间限制

  • 扫描二维码跳转后台

  • 后台判断是微信支付还是支付宝支付

1.整体架构:

SpringMVC+Mybatis二维码如何实现多平台付款

2.配置编译的文件目录

SpringMVC+Mybatis二维码如何实现多平台付款

3.pom.xml

其中qrcode.qrcode、qrcode.swetake是从本地编译到maven库中,因为网络maven中没有。

 <?xml version="1.0"?><project    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"    xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">    <modelVersion>4.0.0</modelVersion>    <parent>        <groupId>fanghuai</groupId>        <artifactId>nbt</artifactId>        <version>0.0.1-SNAPSHOT</version>    </parent>    <groupId>com.nbt.qrcoder</groupId>    <artifactId>nbt-qrcode</artifactId>    <version>0.0.1-SNAPSHOT</version>    <packaging>war</packaging>    <name>nbt-qrcode Maven Webapp</name>    <url>http://maven.apache.org</url>    <properties>        <spring.version>4.1.3.RELEASE</spring.version>        <mybatis.version>3.2.8</mybatis.version>        <mybatis.spring.version>1.2.2</mybatis.spring.version>        <mybatis.paginator.version>1.2.15</mybatis.paginator.version>        <mysql.version>5.1.32</mysql.version>        <slf4j.version>1.6.4</slf4j.version>        <jackson.version>2.4.2</jackson.version>        <druid.version>1.0.9</druid.version>        <jstl.version>1.2</jstl.version>        <servlet-api.version>2.5</servlet-api.version>        <jsp-api.version>2.0</jsp-api.version>        <commons-lang3.version>3.3.2</commons-lang3.version>        <commons-io.version>1.3.2</commons-io.version>        <commons-net.version>3.3</commons-net.version>        <pagehelper.version>4.0.0</pagehelper.version>     </properties>    <dependencies>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>3.8.1</version>            <scope>test</scope>        </dependency>        <!-- qrcode -->        <dependency>            <groupId>qrcode.qrcode</groupId>            <artifactId>qrcode</artifactId>            <version>1.0</version>        </dependency>        <dependency>            <groupId>qrcode.swetake</groupId>            <artifactId>swetake</artifactId>            <version>1.0</version>        </dependency>         <!-- 日志处理 -->        <dependency>            <groupId>org.slf4j</groupId>            <artifactId>slf4j-log4j12</artifactId>            <version>${slf4j.version}</version>        </dependency>        <!-- Mybatis -->        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis</artifactId>            <version>${mybatis.version}</version>        </dependency>        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis-spring</artifactId>            <version>${mybatis.spring.version}</version>        </dependency>        <dependency>            <groupId>com.github.miemiedev</groupId>            <artifactId>mybatis-paginator</artifactId>            <version>${mybatis.paginator.version}</version>        </dependency>        <dependency>            <groupId>com.github.pagehelper</groupId>            <artifactId>pagehelper</artifactId>            <version>${pagehelper.version}</version>        </dependency>        <!-- MySql -->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>${mysql.version}</version>        </dependency>        <!-- 连接池 -->        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>druid</artifactId>            <version>${druid.version}</version>        </dependency>        <!-- Spring -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-beans</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-webmvc</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-jdbc</artifactId>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-aspects</artifactId>            <version>${spring.version}</version>        </dependency>        <!-- JSP相关 -->        <dependency>            <groupId>jstl</groupId>            <artifactId>jstl</artifactId>            <version>${jstl.version}</version>        </dependency>        <dependency>            <groupId>javax.servlet</groupId>            <artifactId>servlet-api</artifactId>            <version>${servlet-api.version}</version>            <scope>provided</scope>        </dependency>        <dependency>            <groupId>javax.servlet</groupId>            <artifactId>jsp-api</artifactId>            <version>${jsp-api.version}</version>            <scope>provided</scope>        </dependency>    </dependencies>    <build>        <finalName>nbt-qrcode</finalName>    </build></project>

4.二维码相关属性(Model)

 package com.nbt.util;import java.awt.image.BufferedImage;import jp.sourceforge.qrcode.data.QRCodeImage;  public   class J2SEImage implements QRCodeImage {         BufferedImage bufImg;         public J2SEImage(BufferedImage bufImg) {             this.bufImg = bufImg;         }         public int getWidth() {             return bufImg.getWidth();         }         public int getHeight() {             return bufImg.getHeight();         }         public int getPixel(int x, int y) {             return bufImg.getRGB(x, y);         }     }

5.二维码生成代码

package com.nbt.util; import java.awt.Color;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException; import javax.imageio.ImageIO; import jp.sourceforge.qrcode.QRCodeDecoder;import jp.sourceforge.qrcode.exception.DecodingFailedException; import com.swetake.util.Qrcode; public class QRCode {           public static  void encoderQRCode(BuildQRCode bc) {          try {             Qrcode qrcodeHandler = new Qrcode();             qrcodeHandler.setQrcodeErrorCorrect('M');             qrcodeHandler.setQrcodeEncodeMode('B');             qrcodeHandler.setQrcodeVersion(7);             System.out.println(bc.getContent());             byte[] contentBytes = bc.getContent().getBytes("gb2312");             BufferedImage bufImg = new BufferedImage(140, 140,                     BufferedImage.TYPE_INT_RGB);             Graphics2D gs = bufImg.createGraphics();             gs.setBackground(Color.WHITE);             gs.clearRect(0, 0, 140, 140);             // 设定图像颜色> BLACK             gs.setColor(Color.BLACK);             // 设置偏移量 不设置可能导致解析出错             int pixoff = 2;             // 输出内容> 二维码             if (contentBytes.length > 0 && contentBytes.length < 120) {                 boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);                 for (int i = 0; i < codeOut.length; i++) {                     for (int j = 0; j < codeOut.length; j++) {                         if (codeOut[j][i]) {                             gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);                         }                     }                 }             } else {                 System.err.println("QRCode content bytes length = " + contentBytes.length + " not in [ 0,120 ]. ");             }             gs.dispose();             bufImg.flush();             File imgFile = new File(bc.getImgPath());             // 生成二维码QRCode图片             ImageIO.write(bufImg, "png", imgFile);          } catch (Exception e) {              e.printStackTrace();         }     }           public static  String decoderQRCode(String imgPath) {         // QRCode 二维码图片的文件         File imageFile = new File(imgPath);         BufferedImage bufImg = null;         String decodedData = null;         try {             bufImg = ImageIO.read(imageFile);             QRCodeDecoder decoder = new QRCodeDecoder();             decodedData = new String(decoder.decode(new J2SEImage(bufImg)));             // try {             // System.out.println(new String(decodedData.getBytes("gb2312"),             // "gb2312"));             // } catch (Exception e) {             // // TODO: handle exception             // }         } catch (IOException e) {             System.out.println("Error: " + e.getMessage());             e.printStackTrace();         } catch (DecodingFailedException dfe) {             System.out.println("Error: " + dfe.getMessage());             dfe.printStackTrace();         }         return decodedData;     }       public static void main(String[] args) {     //生成二维码         String imgPath = "D:/test/Michael_QRCode.png";          String content = "http://www.baidu.com";          BuildQRCode bc = new BuildQRCode(imgPath,content);         encoderQRCode(bc);          System.out.println("encoder QRcode success");        //解读二维码         String decoderContent =decoderQRCode(imgPath);          System.out.println("解析结果如下:");          System.out.println(decoderContent);          System.out.println("========decoder success!!!");     } }

6.Controller相关代码

(jsp页面要通过流的形式放在页面上,不然二维码显示不出来。)

package com.nbt.controller; import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStream;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Map; import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam; import com.mysql.jdbc.StringUtils;import com.nbt.util.BuildQRCode;import com.nbt.util.QRCode;@Controller@RequestMapping("/qr")public class QRCodeController {     private static Logger log = Logger.getLogger(QRCodeController.class);          @RequestMapping("/toShowQRCode.do")    public String showQRCode(HttpServletRequest request){        log.info("跳转到二维码页面...");        return "qr";        }         @RequestMapping("/readImage")    public void readImage(Model model, HttpServletRequest request, HttpServletResponse response) throws IOException{        BuildQRCode bc = new BuildQRCode();//调用无参构造方法        bc.initParam(bc);//对参数进行初始化        QRCode.encoderQRCode(bc);//生成二维码         String filePath =  bc.getImgPath();        File filePic = new File(filePath);        if(filePic.exists()){           FileInputStream is = new FileInputStream(filePic);           int i = is.available(); // 得到文件大小             byte data[] = new byte[i];             is.read(data); // 读数据             is.close();             response.setContentType("image    @RequestMapping("/toPay.do")    public String toPay(@RequestParam("timeout") String timeout,@RequestParam("orderNo")String orderNo){        log.info("开始进行支付");        if(StringUtils.isNullOrEmpty(orderNo)||StringUtils.isNullOrEmpty(timeout)){            log.info("订单号或者时间超时为空");            return "faile";        }         Calendar ca = Calendar.getInstance();        String afterTime = new SimpleDateFormat("yyyyMMddHHmmssSS").format(ca.getTime());         if(!afterTime.equals(timeout)){            log.info(afterTime+"---->"+timeout);            log.info("二维码已失效,请重新支付");            return "faile";        }                log.info("支付成功");        return "success";    }}

7.二维码相关参数初始化

(我目前二维码存放在本地,你们可以把二维码放在程序目录下)。

 package com.nbt.util; import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;  public class BuildQRCode {         private   String imgPath ;         private  String content ;         public BuildQRCode() {     }          public BuildQRCode(String imgPath, String content) {        super();        this.imgPath = imgPath;        this.content = content;    }       public void initParam(BuildQRCode bqrc){     //  生成临时订单号和有效时间        Calendar ca = Calendar.getInstance();        Date date  = ca.getTime();        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS");        System.out.println(sdf.format(date));        String orderNo = sdf.format(date)+(int)Math.random()*1000;//生成订单号        //生成有效时间五分钟        ca.add(Calendar.MINUTE,5);        System.out.println(sdf.format(ca.getTime()));        String timeout = sdf.format(ca.getTime());     //对参数进行初始化        bqrc.setImgPath( "D:/test/Michael_QRCode.png");        bqrc.setContent( "http://localhost:8080/nbt-qrcode/qr/toPay.do?orderNo="+orderNo+"&timeout="+timeout);    }     public static void main(String[] args) {        BuildQRCode qc = new BuildQRCode();        qc.initParam(qc);//设置参数        QRCode.encoderQRCode(qc);    }       public  String getImgPath() {        return imgPath;    }     public  void setImgPath(String imgPath) {        this.imgPath = imgPath;    }     public  String getContent() {        return content;    }     public  void setContent(String content) {        this.content = content;    }}

以上是“SpringMVC+Mybatis二维码如何实现多平台付款”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringMVC+Mybatis二维码如何实现多平台付款

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringMVC+Mybatis二维码如何实现多平台付款

小编给大家分享一下SpringMVC+Mybatis二维码如何实现多平台付款,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!整体思路:实现微信支付宝等支付平台合多为
2023-06-20

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录