莫方教程网

专业程序员编程教程与实战案例分享

SpringBoot 集成支付宝支付功能详细教程

宝子们,在如今的电商和线上交易盛行的时代,为咱们的应用接入支付功能那可是刚需啊!今天就来给大伙唠唠怎么用 SpringBoot 快速集成支付宝支付,让你的项目轻松开启收款之路,全程干货满满,记得收藏哟!

一、前期准备

  1. 注册支付宝商家账号

这是接入支付宝支付的基础,前往支付宝官网完成商家入驻流程,审核通过后就能获得一系列后续要用的关键信息。

  1. 创建应用

在支付宝开放平台创建属于自己的应用,填写好应用名称、简介等基本信息,创建成功后,平台会分配给咱们一个 appId,这可是后续代码里的重要标识,千万别弄丢。

二、引入依赖

在 SpringBoot 项目的 pom.xml 文件中,加入支付宝的相关 SDK 依赖。目前常用的有 alipay-sdk-java,通过以下配置引入:

com.alipay.sdk

alipay-sdk-java

最新稳定版本

记得把版本号替换成官方最新的稳定版本,这样才能保证功能的兼容性和稳定性。

三、配置支付宝参数

在 application.properties 或者 application.yml 文件中,配置咱们前面申请到的支付宝参数:

# 支付宝应用ID

alipay.app-id=你的appId

# 支付宝私钥,用于签名

alipay.private-key=你的私钥

# 支付宝公钥,用于验签

alipay.public-key=支付宝公钥

# 支付宝网关,不同环境对应不同网关,一般生产环境为
https://openapi.alipay.com/gateway.do

alipay.gateway-url=网关地址

# 回调地址,支付完成后支付宝会向这个地址发送通知

alipay.notify-url=你的项目回调接口地址

这些参数的准确配置至关重要,错一个字符都可能导致支付流程出错。就拿支付宝公钥配置错误来说,有小伙伴遇到过明明支付流程都写对了,但支付后一直回调失败的情况。仔细排查后发现,原来是在复制支付宝公钥的时候,不小心多复制了一个空格在末尾,这就导致验签一直不通过。解决办法呢,就是仔仔细细地核对公钥,确保没有多余的字符,重新配置后,回调就正常啦。

还有小伙伴在配置回调地址的时候,写的是本地测试地址,在本地调试没问题,一部署到线上环境,支付完成后就收不到回调通知了。原因就是线上环境无法访问本地的这个回调地址呀!这时候就得把回调地址改成线上服务器能访问的公网地址,重新配置后,支付回调就顺顺利利了。

四、编写支付接口

创建一个支付服务类,比如 AlipayService:

@Service

public class AlipayService {

@Autowired

private AlipayClient alipayClient;

public String createPayOrder(String orderNo, BigDecimal totalAmount) throws AlipayApiException {

// 构建订单信息

AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();

request.setReturnUrl("支付成功后的前端跳转页面");

request.setNotifyUrl("上面配置的回调地址");

JSONObject bizContent = new JSONObject();

bizContent.put("out_trade_no", orderNo);

bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY");

bizContent.put("total_amount", totalAmount.toString());

bizContent.put("subject", "订单标题");

request.setBizContent(bizContent.toString());

// 发起支付请求,获取支付表单

return alipayClient.pageExecute(request).getBody();

}

}

这里我们构建了支付订单的核心逻辑,设置订单号、金额、商品标题等信息,然后通过支付宝客户端发起支付请求,返回的是一个支付表单页面的 HTML 代码。

五、处理回调通知

支付完成后,支付宝会向咱们配置的回调地址发送通知,咱们得写个接口来处理:

@RestController

@RequestMapping("/alipay/notify")

public class AlipayNotifyController {

@PostMapping

public String handleNotify(HttpServletRequest request) throws AlipayApiException {

Map params = new HashMap<>();

Map requestParams = request.getParameterMap();

for (String name : requestParams.keySet()) {

params.put(name, StringUtils.join(requestParams.get(name), ","));

}

boolean signVerified =
AlipaySignature.rsaCheckV1(params, "支付宝公钥", "UTF-8", "RSA2");

if (signVerified) {

// 验证通过,处理业务逻辑,比如更新订单状态

String tradeStatus = params.get("trade_status");

if ("TRADE_SUCCESS".equals(tradeStatus)) {

// 订单支付成功,在这里写更新数据库订单状态等操作

}

return "success";

}

return "fail";

}

}

这个接口负责接收支付宝的回调通知,验证签名确保通知来源可靠,然后根据支付状态更新订单状态,最后按支付宝要求返回相应结果。

六、前端对接

前端小伙伴拿到后端生成的支付表单 HTML 代码后,通过 iframe 或者直接跳转的方式,引导用户进入支付宝收银台页面,完成支付流程。

至此,咱们就完整地实现了 SpringBoot 项目集成支付宝支付功能啦!过程虽有点小复杂,但一步步跟着做下来,肯定没问题。要是在过程中遇到啥坑,欢迎在评论区交流,咱们一起填坑,让项目一路 “钞” 能跑!

赶紧动手试试吧,让你的应用快速拥有强大的支付能力,开启线上赚钱之旅。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言