SpringBoot 支付宝付款接口类、支付异步回调函数模板
1.付款接口类
1.1.引入Maven依赖
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.38.221.ALL</version>
</dependency>
1.2.将下面代码保存为AlipayTemplate.java
@Configuration
@ConfigurationProperties("alipay")
@Data
public class AlipayTemplate {
private String notifyUrl="";
private String returnUrl="";
private String serverUrl;//网关地址
private String appId;//应用ID
private String privateKey;//私钥
private String format="json";
private String charset="UTF-8";
private String alipayPublicKey;//公钥
private String signType="RSA2";
public String pay(String outTradeNo, BigDecimal totalAmount,String subject) throws AlipayApiException {
AlipayClient alipayClient = new DefaultAlipayClient(
serverUrl,//网关地址
appId,//应用ID
privateKey,//私钥
format,
charset,
alipayPublicKey,//公钥
signType//加密算法
);
AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
//异步接收地址,仅支持http/https,公网可访问
request.setNotifyUrl(notifyUrl);
//同步跳转地址,仅支持http/https
request.setReturnUrl(returnUrl);
/******必传参数******/
JSONObject bizContent = new JSONObject();
//商户订单号,商家自定义,保持唯一性
bizContent.put("out_trade_no", outTradeNo);
//支付金额,最小值0.01元,保留两位小数向上取整
bizContent.put("total_amount", totalAmount.setScale(2, RoundingMode.UP));
//订单标题,不可使用特殊符号
bizContent.put("subject", subject);
//电脑网站支付场景固定传值FAST_INSTANT_TRADE_PAY
bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY");
/******可选参数******/
/**
* time_expire可选string(32)
* 【描述】订单绝对超时时间。
* 格式为yyyy-MM-dd HH:mm:ss。超时时间范围:1m~15d。
* 注:time_expire和timeout_express两者只需传入一个或者都不传,两者均传入时,优先使用time_expire。
* 【示例值】2016-12-31 10:05:01
*/
//bizContent.put("time_expire", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now().plusMinutes(1)));
//// 商品明细信息,按需传入
//JSONArray goodsDetail = new JSONArray();
//JSONObject goods1 = new JSONObject();
//goods1.put("goods_id", "goodsNo1");
//goods1.put("goods_name", "子商品1");
//goods1.put("quantity", 1);
//goods1.put("price", 0.01);
//goodsDetail.add(goods1);
//bizContent.put("goods_detail", goodsDetail);
//// 扩展信息,按需传入
//JSONObject extendParams = new JSONObject();
//extendParams.put("sys_service_provider_id", "2088511833207846");
//bizContent.put("extend_params", extendParams);
request.setBizContent(bizContent.toString());
AlipayTradePagePayResponse response = alipayClient.pageExecute(request,"POST");
// 如果需要返回GET请求,请使用
// AlipayTradePagePayResponse response = alipayClient.pageExecute(request,"GET");
String pageRedirectionData = response.getBody();
// System.out.println(pageRedirectionData);
return pageRedirectionData;
/*if(response.isSuccess()){
System.out.println("调用成功");
} else {
System.out.println("调用失败");
}*/
}
}
1.3.支付调用范例
@RequiredArgsConstructor
@Controller
public class PayWebController {
private final AlipayTemplate alipayTemplate;//依赖注入
@ResponseBody
@GetMapping(value = "/pay",produces = MediaType.TEXT_HTML_VALUE)
public String payOrder(@RequestParam("orderSn") String orderSn) throws AlipayApiException {//传入orderSn订单号
BigDecimal totalAmount = new BigDecimal(100);//支付金额
String subject = "支付测试";//支付标题
return alipayTemplate.pay(orderSn,totalAmount,subject);
}
}
2. 支付异步回调函数模板
@RequiredArgsConstructor
@Controller
public class payedListener {
private final AlipayTemplate alipayTemplate;
@ResponseBody
@PostMapping("/payed/notify")
public String handleAlipayed(@RequestParam Map<String,String> paramsMap) throws AlipayApiException {
try {
boolean signVerified = AlipaySignature.rsaCheckV1(paramsMap, alipayTemplate.getAlipayPublicKey(), alipayTemplate.getCharset(), alipayTemplate.getSignType()); //调用SDK验证签名
if(signVerified){
//验签成功,执行正常业务代码
return "success";
}else{
//验签失败
}
}catch (Exception ignored){
}
return "failure";
}
}
SpringBoot 支付宝付款接口类、支付异步回调函数模板的更多相关文章
- ArcGIS中使用异步回调函数查询图层Graphic
在我们的地图的操作中经常会有一些操作是需要通过画多边形或者画线来查找某一块区域内的特定的Graphics比如我们在做的交警的项目中通过框选来查找某一块区域中的摄像机,某一块区域中的警力.警情.警员等相 ...
- Python并发编程06 /阻塞、异步调用/同步调用、异步回调函数、线程queue、事件event、协程
Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件event.协程 目录 Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件 ...
- Android开发---支付宝功能接口(支付功能)(转载!)
最近在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口,因为用的人比较多. 在网上搜索了以下,有很多这方面的教程,但大部分教程过于陈旧,而且描述的过于简单.而且支付宝提供的接口一直在 ...
- Django实现支付宝付款和微信支付
支付宝支付和微信支付是当今互联网产品常用的功能,我使用Django Rest Framework实现了网页上支付宝支付和微信支付的一个通用服务,提供rpc接口给其他服务,包括获取支付宝支付页面url的 ...
- Django 支付宝付款接口的使用
我们在开发的过程中经常会碰到调用微信或者支付宝接口进行付款,付款完成之后,如果用户绑定了我的账号,我只要有活动了,就要给这个关注我的用户推动消息,让用户知道,比如说,我们经常会关注一些公众号,然后这些 ...
- 【java回调】java两个类之间的回调函数传递
背景交代:熟悉用js开发的cordovaAPP:对java一窍不通的我,老师让做一个监测用户拍照事件的功能,无奈没有找到现成的库,无奈自己动手开发java插件~~0基础java GreenHand,祝 ...
- C#--委托的同步,异步,回调函数
原文地址 同步调用 委托的Invoke方法用来进行同步调用.同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行. using System; using System. ...
- WPF如何获得变量异步回调函数时产生的异步回调
有这样的问题,WPF当使用异步回调,需要使用产生的异步变量中的回调函数.数据库中查询诸如异步函数来获得一DataTable.怎样传递给回调函数呢? [方案一]使用全局变量 非常easy想到的是用全局变 ...
- 前端笔记之JavaScript(九)定时器&JSON&同步异步/回调函数&函数节流&call/apply
一.快捷位置和尺寸属性 DOM已经提供给我们计算后的样式,但是还是觉得不方便,因为计算后的样式属性值都是字符串类型. 不能直接参与运算. 所以DOM又提供了一些API:得到的就是number类型的数据 ...
- Java通过匿名类来实现回调函数
在C语言中,函数名可以当做函数指针传递给形参从而实现回调 void f1() { printf("f1()\n"); } void f2() { printf("f2() ...
随机推荐
- (C语言)每日代码||2023.12.24||printf换行的三种方法
#include <stdio.h> int main() { //printf()函数不同参数间可以换行 printf("num one : %d,num two : %d&q ...
- 内存泄漏定位工具之 mtrace(一)
1 前言 mtrace(memory trace),是 GNU Glibc 自带的内存问题检测工具,它可以用来协助定位内存泄露问题.它的实现源码在glibc源码的malloc目录下,其基本设计原理为设 ...
- 蓝鲸:安装SaaS组件bk_monitor失败分析解决
使用./bk_install saas-o 安装发现bk_monitor(蓝鲸监控)组件报错"ERROR deploy failed: timeout". 单独尝试安装各个组件: ...
- Argocd学习
argocd官网文档链接 ArgoCD官网文档 在K8S集群使用argocd命令将集群添加到argcd的cluster列表中 argocd cluster add kubernetes-admin@i ...
- push竟比concat快上数百倍?记一个concat在十万级数据引发的性能问题
壹 ❀ 引 公司产品一直在做企业项目研发工具,所以我们自己当然也会用自己的产品去管理公司大小项目,但在此之前,项目管理体验上一直存在一个卡顿问题.比如我刚登录上账号,在项目里随便到处点点到处跳转页面, ...
- NC15445 wyh的吃鸡
题目链接 题目 题目描述 最近吃鸡游戏非常火,你们wyh学长也在玩这款游戏,这款游戏有一个非常重要的过程,就是要跑到安全区内,否则就会中毒持续消耗血量,我们这个问题简化如下 假设地图为n*n的一个图, ...
- Linux dmesg命令使用方法详解
一.命令简介 dmesg(display message)命令用于显示开机信息.kernel 会将开机信息存储在 ring buffer 中.您若是开机时来不及查看信息,可利用 dmesg 来查看. ...
- Sora文生视频模型深度剖析:全网独家指南,洞悉98%关键信息,纯干货
Sora文生视频模型深度剖析:全网独家指南,洞悉98%关键信息,纯干货 Sora是一个以视频生成为核心的多能力模型,具备以下能力: 文/图生成视频 视频生成视频 1分钟超长高质量视频生成 视频裂变多视 ...
- seq2seq模型案例分析
1 seq2seq模型简介 seq2seq 模型是一种基于[ Encoder-Decoder](编码器-解码器)框架的神经网络模型,广泛应用于自然语言翻译.人机对话等领域.目前,[seq2seq+at ...
- 神经网络优化篇:详解深度学习框架(Deep Learning frameworks)
深度学习框架 一小点作者内心os:24年春节已过完,从熟悉的地方又回到陌生的地方谋生,愿新的一年都得偿所愿,心想事成. 学到这会儿会发现,除非应用更复杂的模型,例如卷积神经网络,或者循环神经网络,或者 ...