【支付】支付宝支付

下面为你详细介绍使用 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.mzph.cn/pingmian/77523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell 正则表达式与文本处理器

目录 前言 一、正则表达式 &#xff08;一&#xff09;定义与用途 &#xff08;二&#xff09;基础正则表达式 &#xff08;三&#xff09;基础正则表达式元字符 &#xff08;四&#xff09;扩展正则表达式 二、文本处理器&#xff1a;Shell 编程的得力助手 &#xff0…

ASP.NET Core 最小 API:极简开发,高效构建(上)

一、概述 构建最小 API&#xff0c;以创建具有最小依赖项的 HTTP API。 它们非常适合于需要在 ASP.NET Core 中仅包括最少文件、功能和依赖项的微服务和应用。 本文介绍使用 ASP.NET Core 生成最小 API 的基础知识&#xff0c;将创建以下 API&#xff1a; API&#xff08;应用…

Apache Parquet 文件组织结构

简要概述 Apache Parquet 是一个开源、列式存储文件格式&#xff0c;最初由 Twitter 与 Cloudera 联合开发&#xff0c;旨在提供高效的压缩与编码方案以支持大规模复杂数据的快速分析与处理。Parquet 文件采用分离式元数据设计 —— 在数据写入完成后&#xff0c;再追加文件级…

IntelliJ IDEA 2025.1 发布 ,默认 K2 模式 | Android Studio 也将跟进

2025.1 版本已经发布&#xff0c;在此之前我们就聊过该版本的 《Terminal 又发布全新重构版本》&#xff0c;而现在 2025.1 中的 K2 模式也成为了默认选项。 可以预见&#xff0c;这个版本可能会包含不少大坑&#xff0c;为下个 Android Studio 祈祷。 首先有一点可以确定&…

云效部署实现Java项目自动化部署图解

前言 记录下使用云效部署Java项目&#xff0c;实现java项目一键化自动化部署。 云效流程说明&#xff1a; 1.云效拉取最新git代码后 2.进行maven编译打包后&#xff0c;上传到指定服务器目录 3.通过shell脚本&#xff0c;先kill java项目后&#xff0c;通过java -jar 启动项…

国际数据加密算法(IDEA)详解

以下是修正后的准确版本,已解决原文中的术语、符号及技术细节问题: ​国际数据加密算法(IDEA)​ IDEA是一种分组加密算法,由Xuejia Lai(来学嘉)和James Massey于1990年设计。IDEA使用128位密钥对64位明文分组进行加密,经过8轮迭代运算后生成64位密文分组。其安全性基于…

TensorFlow介绍

TensorFlow 是由 Google 开发 的开源机器学习框架&#xff0c;主要用于构建、训练和部署机器学习模型。它支持深度学习、传统机器学习和数值计算&#xff0c;适用于图像识别、自然语言处理&#xff08;NLP&#xff09;、推荐系统、强化学习等多种任务。 核心特性 基于 数据流…

百级Function架构集成DeepSeek实践:Go语言超大规模AI工具系统设计

一、百级Function系统的核心挑战 1.1 代码结构问题 代码膨胀现象&#xff1a;单个文件超过2000行代码路由逻辑复杂&#xff1a;巨型switch-case结构维护困难依赖管理失控&#xff1a;跨Function依赖难以追踪 // 传统实现方式的问题示例 switch functionName { case "fu…

嵌入式芯片中的 SRAM 内容细讲

什么是 RAM&#xff1f; RAM 指的是“随机存取”&#xff0c;意思是存储单元都可以在相同的时间内被读写&#xff0c;和“顺序访问”&#xff08;如磁带&#xff09;相对。 RAM 不等于 DRAM&#xff0c;而是一类统称&#xff0c;包括 SRAM 和 DRAM 两种主要类型。 静态随机存…

标准的JNI (Java Native Interface) 加载函数 JNI_OnLoad

1.JNI_OnLoad 在 Android Native 开发中&#xff0c;JNI_OnLoad 是动态注册本地方法的标准入口点。以下是一个标准实现示例及其说明&#xff1a; JNI_OnLoad 标准实现 #include <jni.h> #include <string>// 声明本地方法对应的 C/C 函数 jint native_add(JNIEnv…

算法导论思考题

2-1 在归并排序中对小数组采用插入排序 c. 假定修改后的算法的最坏情况运行时间为 Θ \Theta Θ(nknlg(n/k))&#xff0c;要使修改后的算法与标准的归并排序具有相同的运行时间&#xff0c;作为n的一个函数&#xff0c;借助 Θ \Theta Θ记号&#xff0c;k的最大值是什么&#…

JavaScript 性能优化

JavaScript 性能优化是提高 Web 应用性能的关键步骤,特别是在处理大量数据、复杂计算或频繁的 DOM 操作时。以下是一些常见的 JavaScript 性能优化技巧和策略: 文章目录 @[TOC]一、代码层面优化1. **减少全局变量**2. **避免使用 `with` 语句**3. **使用局部变量**4. **减少 …

NLP高频面试题(四十七)——探讨Transformer中的注意力机制:MHA、MQA与GQA

MHA、MQA和GQA基本概念与区别 1. 多头注意力(MHA) 多头注意力(Multi-Head Attention,MHA)通过多个独立的注意力头同时处理信息,每个头有各自的键(Key)、查询(Query)和值(Value)。这种机制允许模型并行关注不同的子空间上下文信息,捕捉复杂的交互关系。然而,MHA…

51单片机的原理图和PCB绘制

51单片机最小系统原理图 加了两个led灯和按键检测电路。 PCB中原件摆放位置 成品 资源链接&#xff1a;https://download.csdn.net/download/qq_61556106/90656365

使用注解方式整合ssm时,启动tomcat扫描不到resource下面的xxxmapper.xml

解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xxx.mapper.方法 在Spring与Mybatis整合时&#xff0c;可能会遇到这样的报错 原因&#xff1a; 其原因为mapper路径的映射错误&#xff0c;表示在尝试执行某个 Mapper 接口的方法时…

提示词设计:动态提示词 标准提示词

提示词设计:动态提示词 标准提示词 研究背景:随着人工智能与司法结合的推进以及裁判文书公开数量增多,司法摘要任务愈发重要。传统司法摘要方法生成质量有待提升,大语言模型虽有优势,但处理裁判文书时存在摘要结构信息缺失、与原文不一致等问题。研究方法 DPCM方法:分为大…

Jenkins 多分支管道

如果您正在寻找一个基于拉取请求或分支的自动化 Jenkins 持续集成和交付 (CI/CD) 流水线&#xff0c;本指南将帮助您全面了解如何使用 Jenkins 多分支流水线实现它。 Jenkins 的多分支流水线是设计 CI/CD 工作流的最佳方式之一&#xff0c;因为它完全基于 git&#xff08;源代…

跨境电商管理转型:日事清通过目标管理、流程自动化助力智优美科技项目管理升级与目标落地复盘

1.客户背景介绍 深圳市智优美科技有限公司是一家专业从事外贸B2C的电子商务公司&#xff0c;公司总部位于深圳市宝安区&#xff0c;旗下拥有三家子公司。目前销售的品类有&#xff1a;家居用品、电子产品、电子配件产品等&#xff0c;在深圳外贸电商行业销售额稳居行业前10名。…

基于Docker+k8s集群的web应用部署与监控

项目架构图 server ip master 192.168.140.130 node1 192.168.140.131 node2 192.168.140.132 ansible 192.168.140.166 jumpserver 192.168.100.133 firewall 192.168.1.86 nfs 192.168.140.157 harbor 192.168.140.159 Promethethus 192.168.140.130 Jen…

量子计算与经典计算融合:开启计算新时代

一、引言 随着科技的飞速发展&#xff0c;计算技术正迎来一场前所未有的变革。量子计算作为前沿技术&#xff0c;以其强大的并行计算能力和对复杂问题的高效处理能力&#xff0c;吸引了全球科技界的关注。然而&#xff0c;量子计算并非要完全取代经典计算&#xff0c;而是与经典…