SpringBoot-微信支付对接实践

国破山河在,城春草木深。

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

相关推荐
RainCity15 分钟前
Java Swing 自定义组件库分享(六)
java·笔记·后端
techdashen18 分钟前
深入 Rust enum 的内存世界
开发语言·后端·rust
龙码精神36 分钟前
TimescaleDB 物联网设备属性历史数据表设计及常用SQL文档
后端
小小小小宇1 小时前
Go 后端锁机制详解
后端
挖坑的张师傅1 小时前
你的仓库 Agent Ready 了吗?
后端
客场消音器1 小时前
如何使用codex进行UI重构,让AI开发的前端页面不再千篇一律
前端·后端·微信小程序
Full Stack Developme2 小时前
spring-beans 解析
java·后端·spring
苏三说技术2 小时前
为什么大厂都不推荐在MySQL中使用NULL值?
后端
techdashen2 小时前
Rust 模块和文件不是一回事:一次讲清 `mod`、`use`、`pub use`
开发语言·后端·rust
爱勇宝2 小时前
别焦虑,也别躺平:给年轻程序员的一封信
前端·后端·架构