实现支付宝全额退款和部分退款功能
由于公司开发需要,特地花时间看了看,在此记录一下,废话不多说,直接上代码,代码里面都有注释
到官网查看文档:https://docs.open.alipay.com/api_1/alipay.trade.refund
之前必须要引入相应jar包
maven依赖如下:
<execution>
<id>install-alipay-sdk</id>
<phase>clean</phase>
<configuration>
<file>${project.basedir}/libs/alipay-sdk-java20171026141113.jar</file>
<groupId>com.alipay</groupId>
<artifactId>alipay-sdk</artifactId>
<version>20171026141113</version>
<packaging>jar</packaging>
<generatePom>true</generatePom>
</configuration>
<goals>
<goal>install-file</goal>
</goals>
</execution>
<dependency>
<groupId>com.alipay</groupId>
<artifactId>alipay-sdk</artifactId>
<version>20171026141113</version>
</dependency>
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);
//商户的appid
public static String APP_ID="";
//支付宝退款请求的网关
private static String requestUrl = "https://openapi.alipay.com/gateway.do";
//用户自己生成的私钥
public static String PRIVATE_KEY = "";
//支付宝公钥
public 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, 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("xxxxxxxxxxxxxxxxxxxx");//设置支付宝流水号
String res=refundOrder(aliRefundTO);
}
}
//一个订单部分退款
import org.apache.commons.lang.RandomStringUtils;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayTradeRefundResponse;
public class AlipayRefundUtil {
/** 支付宝退款接口
* @param out_trade_no 订单支付时传入的商户订单号,不能和支付宝交易号(trade_no)同时为空。
* @param trade_no 支付宝交易号
* @param refund_amount 需要退款的金额,该金额不能大于订单金额,单位为元,支持两位小数
* @return 将提示信息返回
*/
public synchronized static String alipayRefundRequest(String out_trade_no,String trade_no,double refund_amount) {
String returnStr = null;
String out_request_no=RandomStringUtils.randomAlphanumeric(13);//随机数 不是全额退款,部分退款必须使用该参数,同一个订单,不同的out_request_no代表部分退款
try {
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","商户的appid","用户自己生成的私钥","JSON", "utf-8", "支付宝公钥", "RSA2");
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
request.setBizContent("{" +
"\"out_trade_no\":\"" + out_trade_no + "\"," +
"\"trade_no\":\"" + trade_no + "\"," +
"\"refund_amount\":\"" + refund_amount + "\"," +
"\"out_request_no\":\"" + out_request_no+ "\"," +
"\"refund_reason\":\"正常退款\"" +
" }");
AlipayTradeRefundResponse response;
response = alipayClient.execute(request);
if (response.isSuccess()) {
System.out.println("支付宝退款成功");
} else {
returnStr = response.getSubMsg();//失败会返回错误信息
}
} catch (Exception e) {
e.printStackTrace();
}
return returnStr;
}
public static void main(String str[]){
String strq= alipayRefundRequest("","XXXXXX",0.01D);//第一个参数和第二个参数必须填一个
System.out.println(strq);
}
}
到此,就可以实现醍醐宝退款功能了,还是很简单的。
阅读更多- java实现支付宝退款功能
- List的All方法使用问题:我用List1的All方法来确保List1的所有每个数组元素中是否包含Arr1中的任意元素,这个部分很难实现。 因为,没有一个数组中是否包含另一个数组中的任意元素这个功能
- 完成一个个人博客,博客头像可上传本地图片;部分图片实现点击看大图功能
- WPF DataGrid分页功能实现代码 修改原作者不能实现的部分
- ASP.NET实现支付宝接口功能
- 实现了酒店预订系统的预订部分功能。
- 聊天室的功能实现(主要部分)
- 使用js实现贪吃蛇的部分功能
- vue.js实现用户评论、登录、注册、及修改用户部分信息功能代码。
- Mybatis实现原理探究-实现部分Mybatis功能(上)
- Thinkphp与支付宝对接功能的实现 -- 第一步
- [置顶] 支付宝退款功能开发
- HTML5介绍和部分功能实现
- 名词解释功能:TextView 给部分文字加下划线并实现点击事件
- 收藏,对比功能的JS部分实现代码
- ThinkPHP5.0 实现 app支付宝支付功能
- 大连实训之体验android的开发过程(实现部分功能)
- ThinkPHP实现支付宝接口功能
- MVC4制作网站教程第四章 部分栏目功能实现代码
- 《Spring Security3》第三章第三部分翻译上(Remember me功能实现)