扫码支付 (基于微信)

1. 二维码

1.1 什么是二维码

  • 二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 BarCode 条形码能存更多的信息,也能表示更多的数据类型。
  • 二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。

1.2 二维码优势

  • 信息容量大, 可以容纳多达 1850 个大写字母或 2710 个数字或 500 多个汉字
  • 应用范围广, 支持文字,声音,图片,指纹等等…
  • 容错能力强, 即使图片出现部分破损也能使用
  • 成本低, 容易制作

1.3 二维码容错级别

  • L 级(低) 7%的码字可以被恢复。
  • M 级(中) 的码字的 15%可以被恢复。
  • Q 级(四分)的码字的 25%可以被恢复。
  • H 级(高) 的码字的 30%可以被恢复。
1.4 二维码生成插件 qrious
  • qrious 是一款基于 HTML5 Canvas 的纯 JS 二维码生成插件。通过 qrious.js 可以快速生成各种二维码,你可以控制二维码的尺寸颜色,还可以将生成的二维码进行 Base64 编码。

qrious.js 二维码插件的可用配置参数如下:

参数 类型 默认值 描述
background String “white” 二维码的背景颜色。
foreground String “black” 二维码的前景颜色。
level String “L” 二维码的误差校正级别(L, M, Q, H)。
mime String “image/png” 二维码输出为图片时的 MIME 类型。
size Number 100 二维码的尺寸,单位像素。
value String “” 需要编码为二维码的值

下面的代码即可生成一张二维码

<html>
    <head>
        <title>二维码入门小 demo</title>
    </head>
    <body>
        <img id="qrious">
        <script src="qrious.min.js"></script>
        <script>
            var qr = new QRious({
                element: document.getElementById('qrious'),
                size: 250, 
                value: 'http://www.baidu.com'
            });
        </script>
    </body>
</html>

运行效果:
这里写图片描述

2. 微信扫码支付

2.1 开发文档

  • 按 API 要求组装参数,以 XML 方式发送(POST)给微信支付接口(URL),微信支付接口也是以 XML 方式给予响应。程序根据返回的结果(其中包括支付 URL)生成二维码或判断订单状态。
  • 在线微信支付开发文档:https://pay.weixin.qq.com/wiki/doc/api/index.html
  • 我们在本章中会用到”统一下单”和”查询订单”两组 API
    1. appid:微信公众账号或开放平台 APP 的唯一标识
    2. mch_id:商户号 (配置文件中的 partner)
    3. partnerkey:商户密钥
    4. sign: 数字签名, 根据微信官方提供的密钥和一套算法生成的一个加密信息, 就是为了保证交易的安全性

2.2 微信支付 SDK

  • 微信支付提供了 SDK, 大家下载后打开源码,install 到本地仓库
    这里写图片描述

  • 也可以使用 maven 工程中引入微信支付 SDK 的依赖坐标

<dependency>
    <groupId>com.github.wxpay</groupId>
    <artifactId>wxpay-sdk</artifactId>
    <version>0.0.3</version>
</dependency>
  • 我们主要会用到微信支付 SDK 的以下功能:

// 获取随机字符串
String str = WXPayUtil.generateNonceStr()

// MAP 转换为 XML 字符串(自动添加签名)
// 参数:  maps: 需要传递的参数 Map 集合, partnerkey : 商户密钥
String xmlParam = WXPayUtil.generateSignedXml(maps, partnerkey);

//XML字符串转换为 Map 对象
Map<String, String> stringStringMap = WXPayUtil.xmlToMap(xmlMap);

2.3 HttpClient 工具类

  • HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。
  • HttpClient 通俗的讲就是模拟了浏览器的行为,如果我们需要在后端向某一地址提交数据获取结果,就可以使用HttpClient.

关于 HttpClient(原生)具体的使用不属于我们本章的学习内容,我们这里这里为了简化 HttpClient 的使用,提供了工具类 HttpClient(对原生 HttpClient 进行了封装)

  • HttpClient 工具类使用的步骤
// 创建客户端
HttpClient client = new HttpClient(请求的 url 地址);
//是否是 https 协议
client.setHttps(true); 
//发送的 xml 数据(String类型)
client.setXmlParam(xmlParam); 
//执行 post 请求
client.post();
//获取结果
String result = client.getContent(); 
  • 使用时需导入依赖
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
</dependency>

2.4 工程搭建与准备工作

  • 建立支付服务接口模块 pay-interface (jar)
  • 建立支付服务实现模块 pay-service(war)依赖 pay-interface 和 pay-common 、 spring 、 dubbo 相关依赖 、 微信 SDK (因为不需要连接数据库所以不用引用 dao 工程)
<!-- 微信SDK -->
<dependency>
    <groupId>com.github.wxpay</groupId>
    <artifactId>wxpay-sdk</artifactId>
    <version>0.0.3</version>
</dependency>
<!-- spring,dubbo 等其他依赖自行添加 -->
  • 在pay-common 工程中添加工具类 HttpClient.java ,并添加依赖
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值