springboot实现支付宝支付功能

本文详细介绍了如何在SpringBoot项目中实现支付宝支付功能,包括入驻支付宝、沙箱环境配置、秘钥生成、SpringBoot环境配置、支付接口编写以及测试过程。在开发中可能遇到的常见问题如订单重复支付、掉单、网络错误等也有解决方案。
摘要由CSDN通过智能技术生成

支付系统中容易出现的问题

1,用户在页面下订单后,价格被篡改;
解决方案:通过后端计算订单的总金额

2,订单重复处理。用户支付成功后,支付宝会短时间内多次调用我们的回调接口,如果出现网络波动等原因会导致多次回调请求同时到达,同时对订单做处理,导致用户充一次钱,服务续费了两个月。
解决方案:对订单数据加乐观锁,避免订单被多次修改。(之前接手一个老项目就发现了这种情况)

3,掉单情况。用户支付完成了,回到平台一看,订单状态还处于未支付。这是因为用户虽然支付成功了,但是支付宝回调我们接口的时候可能没有回调成功,或者回调成功了但是订单状态修改没有成功,就会导致订单状态没有变更。用户一看钱付了,购买的服务却没有成功,要炸毛了。
解决方案:用户支付成功回到平台后,前端要开启一个轮询,调用查询订单的状态接口,后端然后去支付宝查看该订单是否实际支付成功,如果支付成功,及时更改订单的状态。还有一种方式是后端可以开启一个定时任务,定时30秒查询订单表最近5分钟未支付的订单,然后去查看实际的支付状态,如果支付成功再修改订单的状态以及后续的业务处理,这种方式适合业务比较小的平台。
支付系统中最重要的就是要保证支付订单和业务处理只能被修改一次,以及可能出现订单状态修改不及时的情况。

开发测试过程中可能出现页面渲染不出来的情况
参考解决方案:https://blog.csdn.net/weixin_51324855/article/details/124098732
支付系统开发好后,在生产环境下可能会出现重复支付和掉单的问题
参考一:
参考二:
参考三:

一,实现支付宝支付功能步骤

1,创建一个springboot项目

2,注册入驻支付宝成为开发人员
地址给你准备好了:https://open.alipay.com/platform/home.htm?from=wwwalipay

3,进入沙箱应用,获取配置到项目中的配置信息 (重要!!!)

4,下载支付宝开放平台开发助手,生成应用公钥和应用私钥 (重要!!!私钥要配置到项目中)
开发助手下载地址:https://opendocs.alipay.com/common/02kipl

5,springboot中配置支付宝支付信息,编写代码。

6,测试支付功能。

创建springboot项目省略

二,入驻支付宝成为开发人员

搜索支付宝,进入支付宝首页—》我是开发者—》注册登录(第一次登录时要求你必须入驻,直接入驻就行了)

地址给你准备好了:https://open.alipay.com/platform/home.htm?from=wwwalipay
直接登录注册就可以了

在这里插入图片描述

三,进入沙箱应用

简单解释下沙箱,就是模拟的支付系统,支付的钱都是假的。

1,沙箱中操作说明

登录—》控制台—》沙箱—》沙箱应用

登录之后,页面是这个样子的
在这里插入图片描述
在这里插入图片描述

2,沙箱其他信息说明

下面分别是生成的买家和卖家的支付宝账号

支付宝客户端沙箱版,用来模拟扫码支付的,账号是上面的沙箱版买家账号(买家扫码向卖家支付),建议手机扫码下载一个,登录买家账号
在这里插入图片描述

在这里插入图片描述

四,下载支付宝开发助手生成秘钥

1,生成秘钥

开发助手下载地址:https://opendocs.alipay.com/common/02kipl

下载后直接安装,打开后直接生成秘钥,生成秘钥后电脑会有两个文件,分别保存有应用公钥和应用私钥
在这里插入图片描述
在这里插入图片描述

2,配置秘钥

将应用公钥复制下来,然后到沙箱应用中配置生成支付宝公钥

在这里插入图片描述

五,springboot中配置环境

1,引入jar包

		<!-- 支付宝支付jar包 -->
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>3.1.0</version>
        </dependency>

2,application.properties

# 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号,在沙箱应用中获取
appId:2021000119675024
# 商户私钥,您的PKCS8格式RSA2私钥,通过开发助手生成的应用私钥
privateKey:
# 支付宝公钥,在沙箱应用获取,通过应用公钥生成支付宝公钥
publicKey:
# 服务器异步通知页面路径需http://格式的完整路径,不能加?id=123这类自定义参数
notifyUrl:http://localhost:8081/alipay/success
# 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数
returnUrl: http://localhost:8081/alipay/success
# 签名方式
signType: RSA2
# 字符编码格式
charset: utf-8
# 支付宝网关,在沙箱应用中获取
gatewayUrl: https://openapi.alipaydev.com/gateway.do

3,接收请求参数的实体类

实体类总的属性只能是下划线连接,不能使用驼峰命名

@Data
public 
要使用SpringBoot实现拉起支付功能,需要先接入相应的支付渠道或支付平台,例如支付宝、微信支付等。接入成功后,可以在SpringBoot中编写相应的控制器和服务类,实现拉起支付的功能。 以下是一个使用SpringBoot实现支付宝支付的示例代码: 首先,在pom.xml文件中添加支付宝SDK的依赖: ```xml <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>3.3.0.ALL</version> </dependency> ``` 接着,在application.properties文件中配置支付宝相关的参数: ```properties # 支付宝网关 alipay.gatewayUrl=https://openapi.alipay.com/gateway.do # 应用ID alipay.appId=应用ID # 商户私钥 alipay.merchantPrivateKey=商户私钥 # 支付宝公钥 alipay.alipayPublicKey=支付宝公钥 # 编码格式 alipay.charset=UTF-8 # 签名类型 alipay.signType=RSA2 ``` 然后,编写一个支付控制器: ```java @RestController @RequestMapping("/api/pay") public class PayController { @Autowired private AlipayConfig alipayConfig; @Autowired private AlipayService alipayService; @PostMapping("/alipay") public String alipay(@RequestParam("orderId") String orderId, @RequestParam("amount") String amount) { AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); alipayRequest.setReturnUrl(alipayConfig.getReturnUrl()); alipayRequest.setNotifyUrl(alipayConfig.getNotifyUrl()); AlipayTradePayModel model = new AlipayTradePayModel(); model.setOutTradeNo(orderId); model.setTotalAmount(amount); model.setSubject("订单支付"); model.setProductCode("FAST_INSTANT_TRADE_PAY"); alipayRequest.setBizModel(model); try { return alipayService.pageExecute(alipayRequest).getBody(); } catch (AlipayApiException e) { e.printStackTrace(); } return null; } } ``` 其中,AlipayConfig是一个配置类,用于读取配置文件中的支付宝相关参数;AlipayService是一个支付服务类,用于调用支付宝API实现支付功能。 最后,在启动类上添加@EnableAutoConfiguration和@ComponentScan注解,启动SpringBoot应用程序即可。 以上仅是一个简单的示例,实际应用中还需要考虑安全性、异常处理等问题。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值