国破山河在,城春草木深。
1 前言
在前文中已经介绍了 SpringBoot
接入支付宝支付的方式和方法,在本文中将继续分享微信支付的方式。微信和支付宝是目前最常用的两种支付工具,相比支付宝的方式,微信支付在 v2 版本还是 xml 的方式,但是在 v3 版本已经支付 json 格式了,本文介绍的支付方式也是 微信的 v3 版本。
2 微信支付产品
和支付宝支付场景类似,微信支付也有很多产品。具体如下所示:
java
1 付款码支付
此种适用于线下面对面收银的场景,用户展示微信钱包内的付款码,商家使用设备扫描二维码直接收款
2 jsapi 支付
此种场景需要用户输入支付金额,适用于线下收款(商户展示收款码)、公众号场景(用户进行商家公众号选择产品完成支付)、pc 网站场景(网站显示收款二维码,用户扫描输入需要支付的金额)
3 小程序支付
此种场景需要在微信小程序内完成支付功能
4 native 支付
此种场景需要商户预定支付金额并展示支付二维码,用户使用扫一扫完成支付,该场景适用于 pc 网站支付。
5 App 支付
商户通过移动端设备进行收款,需要在应用内集成微信支付模块才能首付款。
6 刷脸支付
此种场景需要通过人脸识别设备,完成用户身份认证后进行支付。
3 接入准备
接入微信支付,首先需要在微信公众平台申请 AppId,进行应用绑定。
arduino
微信公众平台 htts://mp.weixin,qq.com
申请步骤: 注册服务好,服务号认证,获取Appid,绑定商户号
本次使用的是 Api V3 版本的接口,所以需要设置 api v3 的密钥。
登录商户平台后,选择账户中心、安全中心、api 安全设置 v3 版本密钥
设置完密钥后,同时需要申请商户 api 证书以及微信平台证书。
bash
# 微信支付 api 如下所示
https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_7_3.shtml
xml
<!--微信支付SDK-->
<dependency>
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-apache-httpclient</artifactId>
<version>0.3.0</version>
</dependency>
4 支付代码
首先需要引入微信支付的配置,相关的配置如下图所示:
在本文中,主要介绍 native
方式进行下单,微信 native
支付下单如下所示,值得注意的是微信支付的交易金额单位是分,没有小数。native
支付的方式返回内容是一个支付链接 code_url
,根据支付链接生成二维码展示并支付。
支付下单需要传入支付金额,订单号,商户号等信息。
订单下完之后,需要查询订单的支付状态则需要查询订单的信息,需要传入订单号和商户号。
订单完成支付后,如果用户需要退款,则需要调用退款接口,需要注意的是传入的退款金额为分,而且需要传入原交易单单号和退款单号。
查询退款单信息,传入退款单号即可。
订单关闭接口,当用户超时未付或者主动关闭订单,需要根据原单号进行订单的关闭操作,此处一般是在定时任务处理订单的超时关闭。
6 总结
本文主要介绍了微信支付中常见的支付产品以及对应的场景,并结合自己的实践编写了与支付相关的代码。支付是一个很重要的业务,需要考虑的环节很多,比如服务的可用、高效、性能以及健壮性。结合微信支付的代码和支付宝支付的代码,可以进行业务的整合,将这两种支付方式整合到自己的项目中,灵活的切换支付方式。本文中所涉及的代码已经上传至 github
, 欢迎交流学习。项目地址 springboot-auth。