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 支付宝付款接口类、支付异步回调函数模板的更多相关文章

  1. ArcGIS中使用异步回调函数查询图层Graphic

    在我们的地图的操作中经常会有一些操作是需要通过画多边形或者画线来查找某一块区域内的特定的Graphics比如我们在做的交警的项目中通过框选来查找某一块区域中的摄像机,某一块区域中的警力.警情.警员等相 ...

  2. Python并发编程06 /阻塞、异步调用/同步调用、异步回调函数、线程queue、事件event、协程

    Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件event.协程 目录 Python并发编程06 /阻塞.异步调用/同步调用.异步回调函数.线程queue.事件 ...

  3. Android开发---支付宝功能接口(支付功能)(转载!)

    最近在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口,因为用的人比较多. 在网上搜索了以下,有很多这方面的教程,但大部分教程过于陈旧,而且描述的过于简单.而且支付宝提供的接口一直在 ...

  4. Django实现支付宝付款和微信支付

    支付宝支付和微信支付是当今互联网产品常用的功能,我使用Django Rest Framework实现了网页上支付宝支付和微信支付的一个通用服务,提供rpc接口给其他服务,包括获取支付宝支付页面url的 ...

  5. Django 支付宝付款接口的使用

    我们在开发的过程中经常会碰到调用微信或者支付宝接口进行付款,付款完成之后,如果用户绑定了我的账号,我只要有活动了,就要给这个关注我的用户推动消息,让用户知道,比如说,我们经常会关注一些公众号,然后这些 ...

  6. 【java回调】java两个类之间的回调函数传递

    背景交代:熟悉用js开发的cordovaAPP:对java一窍不通的我,老师让做一个监测用户拍照事件的功能,无奈没有找到现成的库,无奈自己动手开发java插件~~0基础java GreenHand,祝 ...

  7. C#--委托的同步,异步,回调函数

    原文地址 同步调用 委托的Invoke方法用来进行同步调用.同步调用也可以叫阻塞调用,它将阻塞当前线程,然后执行调用,调用完毕后再继续向下进行. using System; using System. ...

  8. WPF如何获得变量异步回调函数时产生的异步回调

    有这样的问题,WPF当使用异步回调,需要使用产生的异步变量中的回调函数.数据库中查询诸如异步函数来获得一DataTable.怎样传递给回调函数呢? [方案一]使用全局变量 非常easy想到的是用全局变 ...

  9. 前端笔记之JavaScript(九)定时器&JSON&同步异步/回调函数&函数节流&call/apply

    一.快捷位置和尺寸属性 DOM已经提供给我们计算后的样式,但是还是觉得不方便,因为计算后的样式属性值都是字符串类型. 不能直接参与运算. 所以DOM又提供了一些API:得到的就是number类型的数据 ...

  10. Java通过匿名类来实现回调函数

    在C语言中,函数名可以当做函数指针传递给形参从而实现回调 void f1() { printf("f1()\n"); } void f2() { printf("f2() ...

随机推荐

  1. php批量更新多条数据

    /** * @param $table 表名 * @param array $multipleData 拼接的批量更新的数组格式: * $students = [['id' => 1, 'cit ...

  2. Oracle 19c RAC自动应用RU补丁过程

    笔者好久没有使用opatchauto打过补丁了,搜了下自己的历史随笔,上次opatchauto打补丁的记录还是Oracle 11g版本: Oracle 11g RAC 自动应用PSU补丁简明版 而11 ...

  3. JS Leetcode 179. 最大数 题解分析,sort a-b与b-a的区别,sort排序原理解析

    壹 ❀ 引 今天的题目来自LeetCode179. 最大数,题目描述如下: 给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数. 注意:输出结果可能非常大,所以你 ...

  4. linux 中grep 命令详细使用方法说明

    前言在linux命令行中,经常需要对当前获取的一堆数据进行过滤.提取和分析,其中grep命令是其中非常重要的命令之一,比如,在生产环境服务器上,经常使用到下面这个命令 ps -ef | grep ja ...

  5. Swoole从入门到入土(24)——多进程[进程管理器Process\Manager]

    Swoole提供的进程管理器Process\Manage,基于 Process\Pool 实现.可以管理多个进程.相比与 Process\Pool,可以非常方便的创建多个执行不同任务的进程,并且可以控 ...

  6. Python之初级RPG小游戏

    在国外网站上找到一个练习Python的小游戏感觉不错,自己实现了一下. 通过该练习你能学到: 元组 字典 简单定义函数和封装 条件控制语句 游戏说明 以下是3个房间和1个花园: Hall 客厅 有一把 ...

  7. rsyslog 系统日志收集上报(可增加自定义项目日志)

    Linux 自带应用,没有复杂的依赖关系却有强大的日志采集上报功能 本文以上报阿里云为例 1.基础配置讲解 /etc/rsyslog.conf 为其主配置文件(不用动) /etc/rsyslog.d/ ...

  8. [BUUCTF][WEB][极客大挑战 2019]BabySQL 1

    靶机打开url 界面上显示,它做了更严格的过滤.看来后台是加了什么过滤逻辑 老规矩先尝试时候有sql注入的可能,密码框输入 123' 爆出sql错误信息,说明有注入点 构造万能密码注入 123' or ...

  9. Flink本地模式安装和使用

    Flink官方主页:https://flink.apache.org/ . 安装部署 不同版本的Flink对JDK版本要求不尽相同,需要根据具体的Flink版本要求先安装好JDK环境. 通常,在Fli ...

  10. python中操作csv

    示例 import csv with open('t.csv', mode='r', encoding='utf-8') as f: reader_obj = csv.reader(f) # 通过re ...