微信支付之[native-手机扫码支付]入门

文章目录

  • 1. 二维码介绍
    • 1.1什么是二维码
    • 1.2二维码优势
    • 1.3二维码容错级别
    • 1.4二维码生成插件qrious
  • 2.微信扫码支付简介
    • 2.1微信扫码支付申请
    • 2.2开发文档
    • 2.3微信支付SDK
    • 2.4 HttpClient工具类(了解)
    • 2.5准备工作

1. 二维码介绍

1.1什么是二维码

二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。
二维条码/二维码(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>二维码入门小demotitle>
head>
<body>
<img id="qrious">
<script src="qrious.min.js">script>
<script>
 var qr = new QRious({
	   element:document.getElementById('qrious'),
	   size:250, 	   
	   level:'H',	   
	   value:'https://www.baidu.com'
	});
script>
body>
html>

运行效果:
微信支付之[native-手机扫码支付]入门_第1张图片

大家掏出手机,扫一下看看是否会看到百度的官网呢?

2.微信扫码支付简介

2.1微信扫码支付申请

微信扫码支付是商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站支付、实体店单品或订单支付、媒体广告支付等场景。
申请步骤:(了解)
第一步:注册公众号(类型须为:服务号)
请根据营业执照类型选择以下主体注册:个体工商户| 企业/公司| 政府| 媒体| 其他类型。
第二步:认证公众号
公众号认证后才可申请微信支付,认证费:300元/次。
第三步:提交资料申请微信支付
登录公众平台,点击左侧菜单【微信支付】,开始填写资料等待审核,审核时间为1-5个工作日内。
第四步:开户成功,登录商户平台进行验证
资料审核通过后,请登录联系人邮箱查收商户号和密码,并登录商户平台填写财付通备付金打的小额资金数额,完成账户验证。
第五步:在线签署协议
本协议为线上电子协议,签署后方可进行交易及资金结算,签署完立即生效。
本课程已经提供好微信支付账号,学员无需申请。

2.2开发文档

微信支付接口调用的整体思路:
按API要求组装参数,以XML方式发送(POST)给微信支付接口(URL),微信支付接口也是以XML方式给予响应。程序根据返回的结果(其中包括支付URL)生成二维码或判断订单状态。
在线微信支付开发文档:
https://pay.weixin.qq.com/wiki/doc/api/index.html
如果你不能联网,请查阅讲义配套资源 (10配套软件\微信扫码支付)
我们在本章课程中会用到”统一下单”和”查询订单”两组API

1.appid:微信公众账号或开放平台APP的唯一标识
2.mch_id:商户号 (配置文件中的partner)
3.partnerkey:商户密钥
4.sign:数字签名, 根据微信官方提供的密钥和一套算法生成的一个加密信息, 就是为了保证交易的安全性

2.3微信支付SDK

第一步: 微信支付提供了SDK, 大家下载后打开源码,install到本地仓库。

第二步:使用微信支付SDK,在maven工程中引入依赖

com.github.wxpay
wxpay-sdk
0.0.3

我们主要会用到微信支付SDK的以下功能:
(1)获取随机字符串
WXPayUtil.generateNonceStr()
(2)MAP转换为XML字符串(自动添加签名)
WXPayUtil.generateSignedXml(param, partnerkey)
(3)XML字符串转换为MAP
WXPayUtil.xmlToMap(result)

2.4 HttpClient工具类(了解)

HttpClient现在用不上,过去用的很多(支付sdk又升级了)
HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著名的另外两个开源项目Cactus和HTMLUnit都使用了HttpClient。
HttpClient通俗的讲就是模拟了浏览器的行为,如果我们需要在后端向某一地址提交数据获取结果,就可以使用HttpClient.
关于HttpClient(原生)具体的使用不属于我们本章的学习内容,我们这里这里为了简化HttpClient的使用,提供了工具类HttpClient(对原生HttpClient进行了封装)
HttpClient工具类使用的步骤
HttpClient client=new HttpClient(请求的url地址);
client.setHttps(true);//是否是https协议
client.setXmlParam(xmlParam);//发送的xml数据
client.post();//执行post请求
String result = client.getContent(); //获取结果

2.5准备工作

(1)在common工程中添加工具类HttpClient.java
(2)添加配置文件weixinpay.properties
appid=****
partner=****
partnerkey=****
notifyurl=http://a31ef7db.ngrok.io/WeChatPay/WeChatPayNotify
appid: 微信公众账号或开放平台APP的唯一标识
partner:财付通平台的商户账号
partnerkey:财付通平台的商户密钥
notifyurl: 回调地址
(3)将二维码插件QRious 拷贝到项目中,根据微信显示的code_url(二维码地址),在网页中显示二维码
代码如下:
第一配置类:

/**
 *  springboot开发, 所以提供
 */
public class MyConfig extends WXPayConfig {


    String getAppID() {
        return "*****";//商家id
    }

    String getMchID() {
        return "*****";//公众号id
    }


    String getKey() {
        return "*****";//密钥
    }


    InputStream getCertStream() {
        return null;
    }


    IWXPayDomain getWXPayDomain() {
        return new IWXPayDomain() {

            public void report(String s, long l, Exception e) {
            }


            public DomainInfo getDomain(WXPayConfig wxPayConfig) {
                return new DomainInfo("api.mch.weixin.qq.com",true);
            }
        };
    }
}

第二步: 支付测试代码

/**
 * 微信扫码支付:
 * 1.提交请求参数: 订单id,用户id,订单金额等等
 * 2.后台调用微信支付的统一下单方法
 *   生成一个code_url=二维码地址
 *   包含: 订单id,用户id,订单金额,公众号id,商家id等
 * 3. 在前端页面拿到code_url ,展示二维码
 * 4. 用户拿出手机,扫码支付
 * 5. 可以调用微信支付的查询订单方法: 订单的支付状态
 *
 * 代码实现:
 * 1. 将微信支付的sdk(源码),打成jar包,maven安装到本地仓库
 * 2. 使用微信支付的核心api
 *     * WXConfig: 配置类,用作配置支付参数
 *       可以用yml文件配置支付参数
*      * WXPay:  统一下单(生成二维码),查询订单的方法
 *
 */
public class WXPayDemo {
    public static void main(String[] args) throws Exception{
        //1.开通微信支付时, 返回三个参数
        MyConfig myConfig = new MyConfig();
        WXPay wx = new WXPay(myConfig);
        Map<String,String> map = new HashMap<String,String>();
        map.put("body","商品秒杀");
        map.put("out_trade_no","113399ss9");//订单号1133, 支付一次()
        map.put("total_fee","1");//分为单位
        map.put("spbill_create_ip","127.0.0.1");
        map.put("notify_url","http://a31ef7db.ngrok.io/WeChatPay/WeChatPayNotify");
        map.put("trade_type","NATIVE");
        Map<String, String> map1 = wx.unifiedOrder(map);//下单的方法
        System.out.println(map1.toString());
    }
}

测试结果:
code_url就是二维码地址, 在网页里面通过qrious.js插件显示二维码:
在这里插入图片描述

你可能感兴趣的:(微信扫码支付,spring,开发语言,java,腾讯云)