支付宝退款api https://doc.open.alipay.com/docs/api.htm?spm=a219a.7629065.0.0.PbaltX&apiId=759&docType=4
根据支付宝退款文档,填入参数后,就可以调通支付宝退款接口,并且顺利退款。
但是在这里说的是,有些参数不要弄错了,一般的参数正确没有问题,但是,有个秘钥一定不能出错,最后肯导致的结果是钱是退成功了,但是response = alipayClient.execute(request);执行的时候会报错,导致抛异常,后面的逻辑没有办法处理,所以这里一定要小心。
现在先将代码写出来
退款代码
//退款
@RequestMapping(value = "/orderBackMoney/{code}")
public void delete(@PathVariable String code, PrintWriter out) {
TfunUserOrder tfunUserOrder = tfunUserOrderService.findByCode(code);
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.REQUEST_URL,
AlipayConfig.APP_ID, AlipayConfig.PRIVATE_KEY, AlipayConfig.FORMAT, AlipayConfig.INPUT_CHARSET, AlipayConfig.RETURN_ALIPAY_PUBLIC_KEY, "RSA2");
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
request.setBizContent("{" +
"\"out_trade_no\":\"" + tfunUserOrder.getCode() + "\"," + //订单号
//"\"trade_no\":\"2014112611001004680003956707\"," + //支付宝交易号
"\"refund_amount\":\"" + tfunUserOrder.getSetSum() + "\"," + //需要退款的金额,该金额不能大于订单金额,单位为元,支持两位小数
"\"refund_reason\":\"正常退款\"," + //退款的原因说明
"\"out_request_no\":\"HZ01RF001\"" +//标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传。
" }");
AlipayTradeRefundResponse response = null;
try {
response = alipayClient.execute(request);
} catch (AlipayApiException e) {
e.printStackTrace();
}
if (response.isSuccess()) {
System.out.println(response.getBody());
//业务逻辑处理
System.out.println("调用成功");
} else {
System.out.println("调用失败");
logger.info("*****************退款申请失败!*********************");
}
}
配置类
public class AlipayConfig {
public static String ALIPAYCOUNT= "xx@163.com";
//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
// 合作身份者ID,以2088开头由16位纯数字组成的字符串
public static String PARTNER = "2088xxxxxxxxxx";
// 合作伙伴密钥 MD5密钥:
public static String KEY = "MD5秘钥";
// 开放平台密钥 应用私钥(SHA256withRsa)
public static String PRIVATE_KEY = "应用私钥";
// 应用2.0签约2017122094761781 appId
public static String APP_ID = "2018xxxxx";
//支付宝公钥
public static String RETURN_ALIPAY_PUBLIC_KEY = "支付宝公钥";
//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
// 调试用,创建TXT日志文件夹路径
public static String LOG_PATH = "D:\\";
// 字符编码格式 目前支持 gbk 或 utf-8
public static String INPUT_CHARSET = "utf-8";
// 签名方式 不需修改
public static String SIGN_TYPE = "MD5";
//支付类型
public static String PAYMENT_TYPE = "1";
//订单支付可超时时间
public static String IT_B_PAY_TIME = "30m";
//Pc支付网关
public static String PC_SERVICE = "create_direct_pay_by_user";
//手机端支付网关
public static String MOBILE_SERVICE = "alipay.wap.create.direct.pay.by.user";
//退款网关
public static String REFUND_SERVICE = "refund_fastpay_by_platform_pwd";
public static String QUERY_SERVICE = "alipay.trade.query";
public static String REQUEST_URL="https://openapi.alipay.com/gateway.do";
public static String FORMAT="json";
}
一些需要的参数说明
your private_key :密钥 需要将生产的公钥上传至支付宝、密钥留在代码中使用
alipay_public_key :支付宝公钥
这2个参数不要出错,其他参数直接百度就行。