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

相关推荐
haciii36 分钟前
Spring Boot启动源码深度分析 —— 新手也能看懂的原理剖析
spring boot
泉城老铁7 小时前
Spring Boot对接抖音获取H5直播链接详细指南
spring boot·后端·架构
后端小张1 天前
基于飞算AI的图书管理系统设计与实现
spring boot
考虑考虑2 天前
Jpa使用union all
java·spring boot·后端
阿杆2 天前
同事嫌参数校验太丑,我直接掏出了更优雅的 SpEL Validator
java·spring boot·后端
昵称为空C3 天前
SpringBoot3 http接口调用新方式RestClient + @HttpExchange像使用Feign一样调用
spring boot·后端
麦兜*3 天前
MongoDB Atlas 云数据库实战:从零搭建全球多节点集群
java·数据库·spring boot·mongodb·spring·spring cloud
麦兜*3 天前
MongoDB 在物联网(IoT)中的应用:海量时序数据处理方案
java·数据库·spring boot·物联网·mongodb·spring
汤姆yu3 天前
基于springboot的毕业旅游一站式定制系统
spring boot·后端·旅游
计算机毕业设计木哥3 天前
计算机毕设选题推荐:基于Java+SpringBoot物品租赁管理系统【源码+文档+调试】
java·vue.js·spring boot·mysql·spark·毕业设计·课程设计