Springboot 支付宝支付对接实践

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

1 前言

在之前的文章中,分享了一些加 RSA 解密的内容,在本文中将分享一些关于支付宝的对接,主要涉及对接的流程以及过程中遇到的坑和注意事项。对于支付宝的对接,官方提供了对应的 sdk, 只需要调用对应的 api ,屏蔽了加解密的内容,让开发者专注于业务开发即可,十分的 nice。

2 支付产品

支付宝开发文档非常的齐全,这里主要介绍对接支付的场景,支付宝对应的支付场景主要有 以下几种方式:

ini 复制代码
# 支付宝文档地址
https://opendocs.alipay.com/open/03lo17?pathHash=2a9f174b
# 支付宝产品介绍
1 当面付 
一般应用在线下场景中,使用扫码或者付款码的方式进行支付,资金立即到账。
2 App 支付
一般是在手机端 App、小程序中进行支付,可以直接打开支付宝App进行支付。
3 手机网站支付
一般是在 H5 场景、或者浏览器中进行使用,对支付宝进行访问授权并进行支付。
4 电脑网站支付
一般是在电脑浏览器中进行付款,资金可以立即到账。

3 支付环境准备

在开始对接开发之前,需要先创建应用并审核,开通对应的支付产品,将应用和产品进行绑定最后下载支付宝公开发平台密钥工具,生成公私钥或者证书,在本文中,使用的是证书模式。

如上图所示,生成CSR文件,即红框中的内容,上传 CSR文件至开发平台密钥设置,可以得到三个证书文件,即图中的三个 crt 文件。

准备好对应的证书文件之后,就可以进行代码的开发,首先需要引入对应的 sdk 。

xml 复制代码
<dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-sdk-java</artifactId>
    <version>4.31.65.ALL</version>
</dependency>

创建配置文件,需要创建 AlipayClient , 这里提供了两种方式,一种是公私钥的方式,另外一种中证书的方式,这里推荐使用证书的方式,第一是证书比公私钥的方式安全一些,另外证书方式可以解决 subject 字段为中文时,支付宝验签失败的情况(这个问题困扰了作者很久,在公私钥的场景下,怎么处理都不行,换了证书的方式就解决了)。

4 接口调用

在准备好了环境之后,就可以进行场景的对接。这里主要展示几个常用的场景,当面付、pc网页支付、手机网页支付、订单查询、订单退款、支付回调通知等几个场景。

4.1 pc 网页支付

在 pc 网页支付中,需要传入的基本参数包括回调地址、订单号、支付金额、订单标题等,调用接口会返回一个 form 表单,返回给前端后,会自动提交表单,跳转到支付宝的网页支付页面。

4.2 wap 网页支付

手机网站支付是用户在移动端网页的环境进行支付,当选择支付宝支付时,浏览器会自动跳转到支付宝App或者网页进行支付。和 pc 网页大体相同,在提交订单后,会返回一个 form 表单,浏览器前端提交表单跳转到支付宝进行支付。

4.3 当面付

和网页支付不同,当面付是一种即时支付并到账的用户付款方式,主要是用户下单调用支付宝当面付接口,返回的是一个支付连接,将支付连接通过二维码转换工具,转换成二维码展示到前端,用户打开支付宝App 扫描二维码即可完成支付。

4.4 关闭订单

当订单超支付超时时,需要修改订单状态,在修改状态之前,需要调用支付宝提供的关单接口。这里需要提醒一下,业务的订单是记录的应用业务信息,在调用支付时,需要记录对应的支付信息,毕竟一笔订单可能有多个支付单,支付单要和业务订单分开。订单闭关需要传入的参数是应用侧的订单号。

4.5 订单退款

既然有用户的支付,就要有用户的退款,否则会造成业务的不闭环,不同于用户的支付,用户退款接口是统一的。退款和关闭订单传递的参数都比较简单,只需要传入应用测的单号即可。

4.6 订单查询

在查询订单时,传递的参数比较简单,只需要传入商户侧的订单号或者支付宝返回的支付单号即可。

4.7 订单通知

在所有的支付场景中,都要传递一个支付回调地址,用于接受订单支付的结果,在接收到结果后,需要先对结果进行验签,验签成功后进行业务的处理。

5 总结

对接支付场景, 不同于日常的应用开发,是涉及到用户的资金,一旦处理不好就会导致客诉和资损,都是会造成不可挽回的损失。接触到第三方的开发,可以学习到其它编码规范以及开发技巧,跳出自己增删改查的日常工作,可以说是具有挑战性的,也是自我提升和进益的途径和抓手。在本文中,介绍了支付宝常用的对接场景,如果大家感兴趣,作者会在后续的文章中更新微信支付的对接方式,欢迎大家的点赞关注。此外,本文中所涉及的代码已经上传到 github, 欢迎大家 stars, 项目 github 地址 springboot-auth

相关推荐
AH_HH4 分钟前
Spring Boot 3 集成 Spring Security(1)认证
spring boot·spring security
paterWang4 分钟前
小程序-基于java+SpringBoot+Vue的美食推荐系统设计与实现
java·spring boot·小程序
《源码好优多》5 分钟前
基于Java Springboot餐饮美食分享平台
java·spring boot·美食
说书客啊8 分钟前
计算机毕业设计 | SpringBoot+vue美食推荐商城 食品零食购物平台(附源码+论文)
java·spring boot·node.js·vue·毕业设计·课程设计·美食
小学鸡!18 分钟前
Bean的生命周期详解保姆级教程,结合spring boot和spring.xml两种方式讲解,5/7/10大小阶段详细分析
xml·spring boot·spring
计算机毕设指导61 小时前
基于SpringBoot共享汽车管理系统【附源码】
java·spring boot·后端·mysql·spring·汽车·intellij idea
camellias_2 小时前
SpringBoot(四十)SpringBoot集成RabbitMQ使用过期时间+死信队列实现延迟队列
spring boot·rabbitmq·java-rabbitmq
csdn_金手指2 小时前
docker 通过Dockerfile自定义的镜像部署Springboot项目
spring boot·docker·容器
QQ_1154320312 小时前
基于Java+SpringBoot+Mysql在线简单拍卖竞价拍卖竞拍系统功能设计与实现九
java·spring boot·mysql·毕业设计·毕业源码·竞拍系统·竞拍项目
2301_793086873 小时前
springboot+redis+lua实现分布式锁
spring boot·redis·lua