java实现支付宝退款功能
作者:王啸tr1912 发布时间:2021-09-25 14:00:00
标签:java,支付宝,退款
最近完成的差不多的项目突然需要加退款的流程需求了,所以来小小的实现以下。
其实对比其他的支付和退款来说,支付宝算是特别专业,也是特别简单的一个了。
一、引入支付宝SDK
在这里说一下,其实每种支付都会有一个官方带的SDK,我们可以把这个sdk引入到我们的项目中去,然后我们就可以调用里面的方法和对象,给里面传值,进行我们相应的请求的访问和介入。
首先引入如上图所示的jar包,然后我们就算是成功了一半了。
下载地址
然后我们需要把这个jar包引入到所需要的地方,这里不做过多的描述。
二、找到需要的资源
做支付,最最基本的还是各种appid,还有公钥,私钥,以及请求的网关等等内容,支付宝需要的包括:
APP_ID:开放平台账号申请的appid
requestUrl:实现功能所需要请求的网关地址
APP_PRIVATE_KEY:用户自己生成的私钥
ALIPAY_PUBLIC_KEY:支付宝生成的公钥
CHARSET:我们需要的字符编码,一般为utf-8的
三、编写请求代码
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeRefundModel;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayTradeRefundResponse;
public class AlipayUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(AlipayUtil.class);
private static String APP_ID = "234789720984098";
//支付宝退款请求的网关
private static String requestUrl = "https://openapi.alipay.com/gateway.do";
//用户自己生成的私钥
private static String APP_PRIVATE_KEY = "随机字符,见文档";
//支付宝公钥
private static String ALIPAY_PUBLIC_KEY = "从支付宝中获得";
//编码级别
private static String CHARSET = "UTF-8";
public static String refundOrder(AliRefundTO aliRefundTO){
System.out.println("开始调用支付宝加密******************************************************");
//实例化客户端
AlipayClient alipayClient = new DefaultAlipayClient(requestUrl, APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2");
//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeRefundModel refundModel = new AlipayTradeRefundModel();
refundModel.setTradeNo(aliRefundTO.getTrade_no());
refundModel.setRefundAmount(aliRefundTO.getRefund_amount());
refundModel.setRefundReason("商品退款");
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
request.setBizModel(refundModel);
try{
AlipayTradeRefundResponse response = alipayClient.execute(request);
System.out.println(response.getMsg()+"\n");
System.out.println(response.getBody());
}catch(Exception e){
e.printStackTrace();
LOGGER.error("支付宝退款错误!",e.getMessage());
}
return "";
}
public static void main(String[] arg){
AliRefundTO aliRefundTO=new AliRefundTO();
aliRefundTO.setRefund_amount("0.01");
aliRefundTO.setTrade_no("2018050421001004310518105890");
String res=refundOrder(aliRefundTO);
}
}
来源:https://blog.csdn.net/tr1912/article/details/80219745


猜你喜欢
- 要想了解Java * ,首先要了解什么叫做代理,熟悉设计模式的朋友一定知道在Gof总结的23种设计模式中,有一种叫做代理(Proxy)的对
- 在上面的例子中多次使用到了Thread类的join方法。我想大家可能已经猜出来join方法的功能是什么了。对,join方法的功能就是使异步执
- 解析:如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象,那么可以使用Java集合框架。如果启用集合的删除方法,那么集合中所有
- 1、返回字符串,Model传输数据/** * 返回String * @param m
- 如题,在GitHub上找了一圈想找一个MongoDB的的ORM框架,未偿所愿,就去翻了翻官网(https://docs.mongodb.co
- 前言:Springboot的出现极大的简化了开发人员的配置,而这之中的一大利器便是springboot的starter,starter是sp
- Apache 和 Tomcat 都是web网络服务器,两者既有联系又有区别,在进行HTML、PHP、JSP、P
- 本文简单分析了C/C++中常用函数的易错点,包括memset、sizeof、getchar等函数。分享给大家供大家参考之用。具体分析如下:1
- 本文实例为大家分享了android自定义环形统计图动画的具体代码,供大家参考,具体内容如下一、测试截图二、实现原理 package
- 前面已经认识了不同的数据类型,你们有没有尝试过让不同的数据类型进行运算呢?int a = 1;double b = a;Console.Wr
- 从Handler.post()说起Handler.post()是用来发送消息的,我们看下Handler源码的处理:public final
- Android Support Annotations &
- 1.创建列表(列表可以存储任何类型的数据,在创建列表对象的时候首先要指定你要创建的这个列表要存储什么类型的)(泛型)//创建列表  
- 本文实例为大家分享了Android列表时间轴展示的具体代码,供大家参考,具体内容如下实现的效果图如下:实现的方式是利用recycleview
- 一、配置xml路径mybatis-plus:mapper-locations: classpath:mapper/*.xml二、编写Mapp
- 目录Update计时器Invoke协程DoTween最开始接触unity的时候,我做延时都是在update里做计时器。后来才发现,我屮艸芔茻
- 本文实例讲述了Java单例模式下的MongoDB数据库操作工具类。分享给大家供大家参考,具体如下:我经常对MongoDB进行一些基础操作,将
- 前言水波纹特效,想必大家或多或少见过,在我的印象中,大致有如下几种: 支付宝 "咻
- AuthenticationProvider解析首先进入到AuthenticationProvider源码中可以看到它只是个简单的接口里面也
- 1.@RequestMapping的介绍通过@RequestMapping,我们可以把请求地址和方法进行绑定的,可以在类、方法上进行声明。类