Spring Boot中实现支付宝、微信和银联支付的功能

Spring Boot中实现支付宝、微信和银联支付的功能

在Spring Boot中实现支付宝、微信和银联支付的功能,通常需要使用它们各自的SDK(Software Development Kit)。以下是一个简单的示例代码,演示了如何在Spring Boot项目中集成支付宝、微信和银联支付功能。请注意,这只是一个基本的示例,实际上,支付集成涉及更多的配置和安全考虑。

1. 集成支付宝支付

首先,你需要添加支付宝SDK的依赖。在pom.xml中添加以下依赖:

<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>3.10.0.ALL</version>
</dependency>

然后,创建一个Controller类,处理支付宝支付请求:

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
@RequestMapping("/alipay")
public class AlipayController {@Value("${alipay.appId}")private String appId;@Value("${alipay.privateKey}")private String privateKey;@Value("${alipay.publicKey}")private String publicKey;@RequestMapping(value = "/pay", method = RequestMethod.POST)@ResponseBodypublic String alipay(@RequestParam("outTradeNo") String outTradeNo,@RequestParam("totalAmount") String totalAmount,@RequestParam("subject") String subject) throws AlipayApiException {AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", appId, privateKey, "json", "utf-8", publicKey, "RSA2");AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();alipayRequest.setReturnUrl("回调地址");alipayRequest.setNotifyUrl("异步通知地址");alipayRequest.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\","+ "\"total_amount\":\"" + totalAmount + "\","+ "\"subject\":\"" + subject + "\","+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");return alipayClient.pageExecute(alipayRequest).getBody();}
}

application.properties中添加支付宝相关的配置:

alipay.appId=your_app_id
alipay.privateKey=your_private_key
alipay.publicKey=your_public_key

2. 集成微信支付

首先,你需要添加微信支付SDK的依赖。在pom.xml中添加以下依赖:

<dependency><groupId>com.github.wxpay</groupId><artifactId>wxpay-sdk</artifactId><version>0.0.3</version>
</dependency>

然后,创建一个Controller类,处理微信支付请求:

import com.github.wxpay.sdk.WXPay;
import com.github.wxpay.sdk.WXPayConfigImpl;
import com.github.wxpay.sdk.WXPayConstants;
import com.github.wxpay.sdk.WXPayUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.HashMap;
import java.util.Map;@Controller
@RequestMapping("/wechat")
public class WechatController {@Value("${wechat.appId}")private String appId;@Value("${wechat.mchId}")private String mchId;@Value("${wechat.key}")private String key;@RequestMapping(value = "/pay", method = RequestMethod.POST)@ResponseBodypublic Map<String, String> wechatPay(@RequestParam("outTradeNo") String outTradeNo,@RequestParam("totalFee") String totalFee,@RequestParam("body") String body,@RequestParam("spbillCreateIp") String spbillCreateIp) throws Exception {WXPayConfigImpl config = new WXPayConfigImpl();config.setAppID(appId);config.setMchID(mchId);config.setKey(key);WXPay wxPay = new WXPay(config, WXPayConstants.SignType.MD5);Map<String, String> data = new HashMap<>();data.put("body", body);data.put("out_trade_no", outTradeNo);data.put("total_fee", totalFee);data.put("spbill_create_ip", spbillCreateIp);data.put("trade_type", "NATIVE");data.put("notify_url", "异步通知地址");Map<String, String> result = wxPay.unifiedOrder(data);if ("SUCCESS".equals(result.get("return_code")) && "SUCCESS".equals(result.get("result_code"))) {String codeUrl = result.get("code_url");// 返回给前端,用于生成支付二维码Map<String, String> response = new HashMap<>();response.put("codeUrl", codeUrl);return response;} else {// 处理支付失败的逻辑throw new Exception("微信支付失败:" + result.get("return_msg"));}}
}

application.properties中添加微信相关的配置:

wechat.appId=your_app_id
wechat.mchId=your_mch_id
wechat.key=your_key

3. 集成银联支付

首先,你需要添加银联支付SDK的依赖。在pom.xml中添加以下依赖:

<dependency><groupId>cn.joylau.commons</groupId><artifactId>unionpay-common</artifactId><version>1.0.0</version>
</dependency>

然后,创建一个Controller类,处理银联支付请求:

import cn.joylau.commons.unionpay.acp.sdk.AcpService;
import cn.joylau.commons.unionpay.acp.sdk.LogUtil;
import cn.joylau.commons.unionpay.acp.sdk.SDKConfig;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.HashMap;
import java.util.Map;@Controller
@RequestMapping("/unionpay")
public class UnionpayController {@RequestMapping(value = "/pay", method = RequestMethod.POST)@ResponseBodypublic String unionpay(@RequestParam("orderId") String orderId,@RequestParam("txnAmt") String txnAmt) {Map<String, String> requestData = new HashMap<>();// 银联分配的商户号requestData.put("merId", "your_mer_id");// 订单号,8-40位数字字母requestData.put("orderId", orderId);// 交易金额,单位分requestData.put("txnAmt", txnAmt);// 前台交易请求地址requestData.put("frontUrl", "前台回调地址");// 后台交易请求地址requestData.put("backUrl", "后台回调地址");// 其他参数...Map<String, String> responseData = AcpService.post(requestData, "https://gateway.95516.com/gateway/api/frontTransReq.do", "UTF-8");if (!AcpService.validate(responseData, "UTF-8")) {// 验证签名失败LogUtil.writeLog("验证签名失败");// 处理支付失败的逻辑return "验证签名失败";}String respCode = responseData.get("respCode");if ("00".equals(respCode)) {// 支付成功,处理业务逻辑return "支付成功";} else {// 支付失败,处理业务逻辑return "支付失败:" + responseData.get("respMsg");}}
}

application.properties中添加银联相关的配置:

# 银联商户号
acpsdk.merId=your_mer_id
# 银联签名私钥
acpsdk.signCert.path=/path/to/your_sign_cert.pfx
# 银联签名私钥密码
acpsdk.signCert.pwd=your_sign_cert_password
# 银联验签公钥
acpsdk.validateCert.dir=/path/to/your_validate_cert_dir
# 银联对账文件下载地址
acpsdk.fileTransUrl=https://filedownload.95516.com/

以上代码仅为示例,实际情况中需要根据具体需求进行适当调整。请确保在生产环境中采取必要的安全措施,如使用HTTPS、加密敏感信息等。

示例中完整代码,可以从下面网址获取:

https://gitee.com/jlearning/wechatdemo.git

https://github.com/icoderoad/wxdemo.git

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/194440.html

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

相关文章

Flutter笔记:拖拽手势

Flutter笔记 拖拽手势 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/134485123 目 录 1. 概述2. 垂直拖…

Flutter笔记:缩放手势

Flutter笔记 缩放手势 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/134485138 目 录 1. 概述2. 缩放手…

BatchNormalization:解决神经网络中的内部协变量偏移问题

ICML2015 截至目前51172引 论文链接 代码连接(planing) 文章提出的问题 减少神经网络隐藏层中的”内部协变量偏移”问题。 在机器学习领域存在“协变量偏移”问题,问题的前提是我们划分数据集的时候,训练集和测试集往往假设是独立同分布(i.i.d)的,这种独立同分布更有利于…

RabbitMQ消息的可靠性

RabbitMQ消息的可靠性 一 生产者的可靠性 生产者重试 有时候由于网络问题&#xff0c;会出现连接MQ失败的情况&#xff0c;可以配置重连机制 注意&#xff1a;SpringAMQP的重试机制是阻塞式的&#xff0c;重试等待的时候&#xff0c;当前线程会等待。 spring:rabbitmq:conne…

OSI参考模型

目录 一. OSI参考模型的各层功能二. 网络排错三. 网络安全四. 实体、协议、服务和服务访问点SAP五. TCP IP体系结构 一. OSI参考模型的各层功能 \quad \quad \quad \quad 我们首先来看应用层实现的功能 每个字段的各种取值所代表的意思 \quad \quad 比如要保存的文件内容是ab…

Linux 网络:PMTUD 简介

文章目录 1. 前言2. Path MTU Discovery(PMTUD) 协议2.1 PMTUD 发现最小 MTU 的过程 3. Linux 的 PMTUD 简析3.1 创建 socket 时初始化 PMTUD 模式3.2 数据发送时 PMTUD 相关处理3.2.1 源头主机发送过程中 PMTU 处理3.2.2 转发过程中 PMTUD 处理 4. PMTUD 观察5. 参考链接 1. 前…

配置VNC环境时,出现xauth: file /root/.Xauthority does not exist的解决方案。

问题描述 在配置VNC&#xff08;Virtual Network Computing&#xff09;环境的过程时&#xff0c;首先安装了tigervnc-server包。在使用&#xff1a; vncserver命令创建VNC会话号的时候出现了一个报错&#xff1a;xauth: file /root/.Xauthority does not exist 原因分析&…

【Linux进阶之路】动静态库

文章目录 回顾一. 静态库1.代码传递的方式2.简易制作3.原理 二. 动态库1.简易制作2.基本原理 尾序 回顾 前面在gcc与g的使用中&#xff0c;我们简单的介绍了动态库与静态库的各自的优点与区别&#xff1a; 动态链接库&#xff0c;也就是所有的程序公用一份代码,虽然方便省空间&…

SpringBoot 整合 JdbcTemplate

数据持久化有几个常见的方案&#xff0c;有 Spring 自带的 JdbcTemplate 、有 MyBatis&#xff0c;还有 JPA&#xff0c;在这些方案中&#xff0c;最简单的就是 Spring 自带的 JdbcTemplate 了&#xff0c;这个东西虽然没有 MyBatis 那么方便&#xff0c;但是比起最开始的 Jdbc…

Go——一、Go语言安装及介绍

Go 一、Windows下安装Go1、下载Go2、配置环境变量3、下载Jetbrain下的GoLang4、编写hello world5、编译和执行 二、Go语言介绍1、开发文档2、Go语言核心开发团队3、为什么要创建Go4、Go语言发展史5、Go语言特点6、Golang执行过程6.1 执行过程分析6.2 编译是什么 7、开发注意事项…

RobotFramework进阶之自定义的python模块(十四)

引言 RobotFramework自动化框架&#xff08;以下简称RF&#xff09;之前文章我们讲了通过import第三方的library&#xff08;RequestsLibrary等&#xff09;&#xff0c;在实际项目中第三方的包并不能满足我们的需要&#xff0c;此时我们可自己编写python模块&#xff08;.py文…

算法通关村第十六关白银挑战——滑动窗口高频问题

关注微信公众号&#xff1a;怒码少年。回复关键词【电子书】&#xff0c;领取多本计算机相关电子书 公众号后台开启了咨询业务&#xff0c;欢迎大家向我提问&#xff0c;免费&#xff0c;为爱发电&#x1f60e; 大家好&#xff0c;我是怒码少年小码。 武汉今天真的超级冷&…