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: root
      password: 123456
      url: jdbc:mysql://127.0.0.1:3306/alpay
      driver-class-name: com.mysql.cj.jdbc.Driver


    jpa:
      hibernate:
        #ddl-auto即定义数据表生成的策略     update更新或者创建数据表结构
        ddl-auto: update
      #    控制台显示SQL
      show-sql: true


server:
  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整合支付宝支付接口源码

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值