发布:2020/4/26 11:44:45作者:管理员 来源:本站 浏览次数:1980
由于公司开发需要,特地花时间看了看,在此记录一下,废话不多说,直接上代码,代码里面都有注释
到官网查看文档: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);
}
}
到此,就可以实现醍醐宝退款功能了,还是很简单的。