当前位置: 首页 > ai >正文

【支付】支付宝支付

下面为你详细介绍使用 Spring Boot 对接支付宝支付,实现支付与退款功能的具体步骤和代码示例。

  1. 添加依赖
    在 pom.xml 里添加支付宝 SDK 依赖:
<dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 支付宝 SDK --><dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.10.103.ALL</version></dependency>
</dependencies>
  1. 配置支付宝信息
    在 application.yml 中配置支付宝相关信息:
alipay:app-id: your_app_idmerchant-private-key: your_merchant_private_keyalipay-public-key: your_alipay_public_keysign-type: RSA2gateway-url: https://openapi.alipay.com/gateway.donotify-url: your_notify_url
  1. 配置支付宝客户端
    创建配置类来初始化支付宝客户端:
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class AlipayConfig {@Value("${alipay.app-id}")private String appId;@Value("${alipay.merchant-private-key}")private String merchantPrivateKey;@Value("${alipay.alipay-public-key}")private String alipayPublicKey;@Value("${alipay.sign-type}")private String signType;@Value("${alipay.gateway-url}")private String gatewayUrl;@Beanpublic AlipayClient alipayClient() {return new DefaultAlipayClient(gatewayUrl, appId, merchantPrivateKey, "json", "UTF-8", alipayPublicKey, signType);}
}
  1. 实现支付功能
    创建服务类来处理支付业务逻辑:
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;@Service
public class AlipayService {@Autowiredprivate AlipayClient alipayClient;@Value("${alipay.notify-url}")private String notifyUrl;public String pay(String outTradeNo, String totalAmount, String subject, String body) throws AlipayApiException {AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();request.setReturnUrl(null);request.setNotifyUrl(notifyUrl);request.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\","+ "\"total_amount\":\"" + totalAmount + "\","+ "\"subject\":\"" + subject + "\","+ "\"body\":\"" + body + "\","+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");return alipayClient.pageExecute(request).getBody();}
}
  1. 实现退款功能
    在服务类中添加退款方法:
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayTradeRefundResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class AlipayService {@Autowiredprivate AlipayClient alipayClient;public AlipayTradeRefundResponse refund(String outTradeNo, String refundAmount) throws AlipayApiException {AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();request.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\","+ "\"refund_amount\":\"" + refundAmount + "\"}");return alipayClient.execute(request);}
}
  1. 创建控制器
    创建控制器来处理支付和退款请求:
import com.alipay.api.AlipayApiException;
import com.alipay.api.response.AlipayTradeRefundResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@RestController
@RequestMapping("/alipay")
public class AlipayController {@Autowiredprivate AlipayService alipayService;@GetMapping("/pay")public void pay(@RequestParam String outTradeNo, @RequestParam String totalAmount, @RequestParam String subject, @RequestParam String body, HttpServletResponse response) throws AlipayApiException, IOException {String form = alipayService.pay(outTradeNo, totalAmount, subject, body);response.setContentType("text/html;charset=" + "UTF-8");response.getWriter().write(form);response.getWriter().flush();response.getWriter().close();}@GetMapping("/refund")public AlipayTradeRefundResponse refund(@RequestParam String outTradeNo, @RequestParam String refundAmount) throws AlipayApiException {return alipayService.refund(outTradeNo, refundAmount);}
}

代码解释
依赖添加:引入 Spring Boot Web 和支付宝 SDK 依赖,以支持 Web 开发和支付宝支付功能。
配置信息:在 application.yml 中配置支付宝所需的关键信息,如应用 ID、商户私钥、支付宝公钥等。
支付宝客户端配置:创建 AlipayConfig 类初始化支付宝客户端。
支付服务类:AlipayService 类包含支付和退款的业务逻辑,调用支付宝客户端的方法完成相应操作。
控制器:AlipayController 处理前端的支付和退款请求,调用服务类的方法完成支付和退款操作。
注意事项
要保证私钥和公钥的正确性与安全性。
处理支付和退款回调时,要对签名进行验证,防止数据被篡改。
严格按照支付宝的开发文档进行开发,及时处理可能出现的异常情况。

http://www.xdnf.cn/news/582.html

相关文章:

  • FastAPI:现代高性能Python Web框架的技术解析与实践指南
  • 【刷题Day21】TCP(浅)
  • Java枚举
  • 排序算法-快速排序
  • 【数据结构 · 初阶】- 带环链表
  • Spring Boot 集成Poi-tl实现动态Word文档生成
  • pnpm确认全局下载安装了还是显示cnpm不是内部或外部命令,也不是可运行的程序
  • Windows 中使用 `netstat` 命令查看端口占用
  • shell 正则表达式与文本处理器
  • C语言之高校学生信息快速查询系统的实现
  • mysql——基础知识
  • 百级Function架构集成DeepSeek实践:Go语言超大规模AI工具系统设计
  • 深入解析主流数据库体系架构:从关系型到云原生
  • LeetCode第158题_用Read4读取N个字符 II
  • HTML 如何改变字体颜色?深入解析与实践指南
  • 大数据学习栈记——MapReduce技术
  • 在 Anaconda 上安装多版本 Python 解释器并在 PyCharm 中配置
  • Pandas的应用
  • OpenCV 找出两个图像之间的差异 cv2.absdiff
  • 大数据开发知识1:数据仓库
  • KWDB MCP Server:解锁 LLM 与数据库的无缝协作
  • python之计算平面曲线离散点的曲率
  • Vector的学习
  • 第五章 SQLite数据库:5、SQLite 进阶用法:ALTER 命令、TRUNCATE 操作、视图创建、事务控制和子查询的操作
  • 一文总结通信电路中LC谐振回路中各公式以及对深入解读品质因数Q
  • Retinex系列图像/视频增强算法介绍
  • 损失函数总结
  • OpenLayers:视图变换的方法
  • 【AI论文】ColorBench:视觉语言模型能否看到并理解多彩的世界?一个全面的色彩感知、推理和鲁棒性基准测试
  • 各种诈骗、骚扰电话