springboot集成支付宝的支付(easy版)
2024-09-06 20:15:33
SpringBoot对接支付宝
需要先注册账号
到支付宝开发者平台创建网页支付应用
启用公钥模式
需要使用到
appId
和下面的两个秘钥
写配置信息的代码
1.引入依赖
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-easysdk</artifactId>
<version>2.2.0</version>
</dependency>
2.写配置
alipay:
appId: appid
appPrivateKey: 应用私钥
alipayPublicKey: 支付宝的公钥
notifyUrl: 回调地址3.新建一个alipayConfig类
import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct; @Data
@Component
//拿配置文件里面alipay开头的配置信息
@ConfigurationProperties(prefix = "alipay")
public class AliPayConfig {
private String appId;
private String appPrivateKey;
private String alipayPublicKey;
private String notifyUrl; @PostConstruct
public void init() {
// 设置参数(全局只需设置一次)
Config config = new Config();
config.protocol = "https";
config.gatewayHost = "openapi.alipaydev.com";
config.signType = "RSA2";
config.appId = this.appId;
config.merchantPrivateKey = this.appPrivateKey;
config.alipayPublicKey = this.alipayPublicKey;
config.notifyUrl = this.notifyUrl;
Factory.setOptions(config);
System.out.println("=======支付宝SDK初始化成功=======");
}
}
4.写接口
@GetMapping("/pay")
public String pay(AliPay aliPay) {
AlipayTradePagePayResponse response;
try {
// 发起API调用(以创建当面付收款二维码为例)
response = Factory.Payment.Page()
.pay(URLEncoder.encode(aliPay.getSubject(), "UTF-8"), aliPay.getTraceNo(),String.valueOf(aliPay.getTotalAmount()), "");
} catch (Exception e) {
System.err.println("调用遭遇异常,原因:" + e.getMessage());
throw new RuntimeException(e.getMessage(), e);
}
return response.getBody();
} //如果设置了拦截器 需要放行该接口
5.设置回调接口
@PostMapping("/notify") // 注意这里必须是POST接口
public String payNotify(HttpServletRequest request) throws Exception {
if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) {
System.out.println("=========支付宝异步回调========"); Map<String, String> params = new HashMap<>();
Map<String, String[]> requestParams = request.getParameterMap();
for (String name : requestParams.keySet()) {
params.put(name, request.getParameter(name));
// System.out.println(name + " = " + request.getParameter(name));
}
String tradeNo = params.get("out_trade_no");
String gmtPayment = params.get("gmt_payment");
String alipayTradeNo = params.get("trade_no");
// 支付宝验签
if (Factory.Payment.Common().verifyNotify(params)) {
// 验签通过
System.out.println("交易名称: " + params.get("subject"));
System.out.println("交易状态: " + params.get("trade_status"));
System.out.println("支付宝交易凭证号: " + params.get("trade_no"));
System.out.println("商户订单号: " + params.get("out_trade_no"));
System.out.println("交易金额: " + params.get("total_amount"));
System.out.println("买家在支付宝唯一id: " + params.get("buyer_id"));
System.out.println("买家付款时间: " + params.get("gmt_payment"));
System.out.println("买家付款金额: " + params.get("buyer_pay_amount")); // 更新订单未已支付
//ordersMapper.updateState(tradeNo, "已支付", gmtPayment, alipayTradeNo);
}
}
return "success";
}
最新文章
- 仿浏览器TAB效果
- QQ付费群规则重大变更!特别是这类群!
- Oracle基础和用户管理
- 捕获当前事件作用的对象event.target和event.srcElement
- Android应用与系统安全防御
- Visual Studio安装项目中将用户选择的安装路径写入注册表的方法[转]
- java的nio之:浅析I/O模型
- 【英语】Bingo口语笔记(51) - 相信怀疑的表达
- 第一个c++程序 helloworld
- DateTime.ToString格式化日期,使用DateDiff方法获取日期时间的间隔数
- 【技巧】centos6.5_yum本地安装mysql
- HDU5044---Tree 树链剖分
- Thread 常搞混的几个概念sleep、wait、yield、interrupt (转)
- 如何不保存Word即可用Word打开想显示的内容!
- DELL服务器安装Windows server 2003---解决找不到安装在计算机上的硬盘驱动器 安装无法
- H5基础浏览器兼容性
- 关于一些基础的Java问题的解答(四)
- Linux - 主机的细部权限规划:ACL 的使用
- RAC(ReactiveCocoa)介绍(一)
- webloigc 控制台修改登录密码