SpringBoot整合支付宝支付接口 详解 (有源文件)
目录
1、简介与支付接口运行原理
2、基本配置说明
3、支付接口实现
4、整合后沙箱测试
1、简介与支付接口运行原理
简介:
现在与钱有关的项目都离不开支付,现在就来介绍一下如何对接支付宝接口。演示项目的基本环境是 SpringBoot、JPA、Mysql、Thymeleaf。因为支付接口有很多分门别类 这次演示以支付宝的手机网站支付为例子, 其实会了这个其他也是大同小异。
支付接口运行原理:
现在先简明扼要的介绍大致的运行原理,首先是一个form表单收集好订单的基本信息如:下单人的账号标识,购买的商品标识,下单的金额,这些是订单的基础。然后我们要自己生成一个商户订单号,这个可以用当前时间戳作为商户订单号。这个时候就将这些信息保存到我们自己的数据库。再将必要的信息传入支付接口(详细下面再介绍)这时候就会跳转到支付宝的支付页面,用户完成支付。支付宝会回调信息回调有 同步回调、异步回调。同步回调就是支付完成后立即执行我们的业务操作,但是同步回调有个缺点就是如果用户支付完成后直接关闭网络会导致我们的业务代码没有被执行,这时候还有一道保障就是异步回调,对于异步回调通知,ip地址一定要是公网的,私有地址(例如10.2.1.1或者 192.168.1.1)支付宝无法通知到客户端)。
最重要的流程是在订单发起的时候我们生成的商户订单号我们保存在数据库了,支付完成后同步回调或异步回调附带的参数中都会有我们自己生成的商户订单号这样我们就能标识是哪个订单完成了支付,只要验签成功我们就认为这是成功支付了的。就可在同步回调或异步回调中处理已经完成支付后的业务。(验签这个操作是支付宝帮我们写好的 不用关心)
官方给出的运行原理图:
2、基本配置说明
添加支付宝SDK在pom.xml中添加以下类似依赖版本:
<!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java -->
<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>3.0.0</version>
</dependency>
配置AlipayConfig.java:
本例子是演示手机网站支付,我们先到官网下载手机网站支付Demo。
https://docs.open.alipay.com/54/106682/
操作如下图
这里我们暂时用Eclipse打开,分析一下Demo的目录结构:
配置AlipayConfig.java中除了编码、返回格式、日志记录目录、RSA2这4个参数默认不用配置,其他参数都需要配置。由于我们没有营业执照无法申请支付接口,但是阿里给我们开发者提供了沙箱环境。
注意:沙箱环境与真实的支付环境在代码上没有任何差别,在真实的支付环境中只需要修改AlipayConfig.java中的配置即可。特意说明一下:他们的支付网关也是不同的,看着很像其实是不一样的。
如何申请沙箱环境如下图
https://docs.open.alipay.com/20180417160701241302/iz90dt
点击如上图的配置沙箱环境后 进入到如下图的页面 其中APPID与支付宝网关是需要配置到AlipayConfig.java中的 最重要是设置秘钥
要配置秘钥就需要下载阿里提供的秘钥生成工具
https://docs.open.alipay.com/291/105971#LDsXr
工具的用法如下图
工具生成了应用公钥与应用私钥,生成的应用私钥直接配置到AlipayConfig.java中,应用公钥是不需要配置到AlipayConfig.java中的,只需要在沙箱环境网页的沙箱应用中设置应用公钥,设置应用公钥后就会获得支付宝公钥,这个支付宝公钥需要配置到AlipayConfig.java中。
配置应用公钥获得支付宝公钥如下图
经过上面的操作后AlipayConfig.java中我们配置了APPID、应用私钥、请求网关地址、支付宝公钥,还剩余异步通知页面路径、同步通知页面路径需要配置下面用到再来介绍。
3、支付接口实现
用IDEA创建SpringBoot项目 基本配置是JAP与Mysql,因为数据库操作我用的是JAP,如果你用的是Mybatis对这个例子影响不大。
配置application.yml
spring:datasource:username: rootpassword: 123456url: jdbc:mysql://127.0.0.1:3306/alpaydriver-class-name: com.mysql.cj.jdbc.Driverjpa:hibernate:#ddl-auto即定义数据表生成的策略 update更新或者创建数据表结构ddl-auto: update# 控制台显示SQLshow-sql: trueserver:port: 80
回顾一下官网的手机网站支付的Demo
我们需要将AlipayConfig.java这个类移植到SpringBoot项目中
pay.jsp中的Java代码 移植到SpringBoot中定义一个post的请求方法处理订单的请求
方法头部代码(具体代码可以在文章底部回复关键字获取):
//订单发起方法
@PostMapping("/paymethod")
public void paymethod(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
}
return_url.jsp中的Java代码 移植到SpringBoot中定义一个get的请求方法
方法头部代码(具体代码可以在文章底部回复关键字获取):
//同步回调处理方法@GetMapping("/return_url")public String return_url(HttpServletRequest request) throws AlipayApiException, UnsupportedEncodingException {}
notify_url.jsp中的Java代码 移植到SpringBoot中定义一个post的请求方法
方法头部代码(具体代码可以在文章底部回复关键字获取):
//异步回调处理方法
@ResponseBody
@PostMapping("/notify_url")
public String notify_url(HttpServletRequest request) throws AlipayApiException, UnsupportedEncodingException {
}
定义了以上两个方法后就可以配置AlipayConfig.java最后两个参数了同步通知页面路径、异步通知页面路径。
同步通知页面路径:
http://127.0.0.1/return_url
异步通知页面路径:
http://127.0.0.1/notify_url
注意:在真实的支付环境中需要将以上的127.0.0.1替换成外网IP或域名
上面配置的异步通知暂时是不生效的因为是内网IP,同步通知是可以生效的因为是直接跳转实现的。
展示与介绍SpringBoot的目录结构:
4、整合后沙箱测试
测试需要沙箱账号
https://openhome.alipay.com/platform/appDaily.htm?tab=account
启动SpringBoot项目
PC端测试效果:
1
2
3
4
5
6
7
8
如果在真实的支付环境中在手机端是可以弹出支付宝支付的(前提是手机安装了支付宝)。
如果你想搭建该项目你需要做的操作:
搭建Mysql数据库 密码123456 并且创建数据库名称为alipay的数据库,项目启动后JPA会自动创建数据库表。
你还需要自己配置AlipayConfig.java中的配置
回复获取资源
关注后回复 支付
获取SpringBoot整合支付宝支付接口源码
SpringBoot整合支付宝支付接口 详解 (有源文件)相关推荐
- SpringBoot整合Log4j2以及配置详解
文章目录 标题SpringBoot整合Log4j2以及配置详解 1.加入依赖 2.在src.java.main.resources目录下创建log4j2.xml文件 log4j2.xml文件内容如下: ...
- 对接支付宝App支付和网页支付接口详解
之前在项目中使用过支付宝的沙箱测试支付和实际开发支付,是关于App对接支付宝接口的,由于前段时间有朋友询问怎么对接网页支付,通过研究支付包的开发文档,在这里总结一下对接支付宝的App支付接口和网页支付 ...
- python 微信支付接口 详解_Python支付接口汇总大全(包含微信、支付宝等,长期更新、欢迎补充)...
wzhifuSDK- 由微信支付SDK 官方PHP Demo移植而来,v3.37下载地址 学习Python中有不明白推荐加入交流群 号:864573496 群里有志同道合的小伙伴,互帮互助, 群里有不 ...
- 对接银联支付接口详解java版mac开发
首先,这是一篇工具类的文章了,也是为了备忘,需求就是微信公众号的开发后台对接支付,有银联,支付宝,微信等,我负责写银联的接口.明天大年三十,今天在公司码完字也要灰走了,祝大家新年快乐,发大财. 先说一 ...
- 微信和支付宝支付模式详解及实现(.Net标准库)
支付基本上是很多产品都必须的一个模块,大家最熟悉的应该就是微信和支付宝支付了,不过更多的可能还是停留在直接sdk的调用上,甚至和业务系统高度耦合,网上也存在各种解决方案,但大多形式各异,东拼西凑而成. ...
- 微信和支付宝支付模式详解及实现(.Net标准库)- OSS开源系列
2019独角兽企业重金招聘Python工程师标准>>> 支付基本上是很多产品都必须的一个模块,大家最熟悉的应该就是微信和支付宝支付了,不过更多的可能还是停留在直接sdk的调用上,甚至 ...
- 集成支付宝支付(AliPay)详解,防跳坑
更新时间:2016/02/22 现在的支付方式一般有三种, 支付宝, 微信, 网银. 个人觉得最简单易用的还是支付宝, 微信虽然看起来币支付宝要简单,但是后端太麻烦了, 网银就不说了. 先放出官方文档 ...
- 个人免签支付接口详解
这里我们用到的个人免签支付下单接口如下: 请求地址:https://www.gogozhifu.com/shop/api/createOrder 请求方式:POST/GET 对应的参数列表如下: 参数 ...
- Springboot整合支付宝支付加内网穿透工具实现本地回调
项目中我们集成了支付宝,用户可以使用支付宝来进行支付 项目测试时,我们当然也需要一套测试环境对支付流程进行测试 如果我们使用线上的支付宝配置进行测试,那么我们必须使用真实货币进行支付 并且支付的金额会 ...
最新文章
- Sci. Adv. | 新算法识别治疗肺动脉高压的候选抗癌药物
- jdeveloper_在JDeveloper 12.1.3中为WebSocket使用Java API
- readonly 和 disable的区别
- IIS FTP部分文件上传报错451的原因及解决方法
- 操作系统第二章作业(2020@usc)
- html from嵌套from
- 如何限制对象只能建立在堆上或者栈上
- Python 操作 Kafka --- kafka-python
- php 100万数据,关于批量插入数据之我见(100万级别的数据,mysql)
- 数据结构:判断是否为同一棵二叉搜索树
- 合肥工贸高级技工学校计算机系,合肥工贸高级技工学校
- MOSS关于Workflow
- 理清网站数据分析思路导图
- 博途v14电脑要求_博图TIA V14版本完整体验加测试
- 消费型保险PK返还型保险
- __I、 __O 、__IO是什么意思?
- MFC 公用函数和函数指针和动态库
- c++中关于双循环跳出的小tips
- html5页面发送短信验证码,H5实现APP“输入短信验证码”效果
- 我的世界java旁观者模式_我的世界如何切换到旁观模式
热门文章
- 查询性能较 Trino/Presto 3-10 倍提升!Apache Doris 极速数据湖分析深度解读
- jupyter notebook中markdown 使用
- R语言学习路线图以及R数据挖掘包
- C++知识点 -- vector模拟实现
- 互联网带来的十大警示
- vivado 除法器ip核的使用
- utf8mb4 字符集(4字节 UTF-8 Unicode 编码)
- 让Mac复制文件到U盘的两种方法
- 香农误码率与信噪比 matlab,画QPSK的信噪比与误码率之间的线性关系图
- English语法_并列连词 - for / so