一、API介绍
通用场景
当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,支付宝将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。 交易超过约定时间(签约时设置的可退款时间)的订单无法进行退款。 支付宝退款支持单笔交易分多次退款,多次退款需要提交原支付订单的订单号和设置不同的退款请求号。一笔退款失败后重新提交,要保证重试时退款请求号不能变更,防止该笔交易重复退款。 同一笔交易累计提交的退款金额不能超过原始交易总金额。
二、service
/**
* @Description: refund 退款
* @Param: [outTradeNo 订单编号, tradeNo 交易号, refundAmount 退款金额, outRequestNo 标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传]
* @return: java.lang.String
* @Author: 皮蛋布丁
* @Date: 2021/6/27 14:31
*/
String refund(String outTradeNo,String tradeNo,String refundAmount,String outRequestNo);
三、service实现
@Override
public String refund(String outTradeNo, String tradeNo, String refundAmount, String outRequestNo) {
try {
AlipayTradeRefundResponse response = Factory.Payment.Common()
.optional("trade_no", tradeNo)
.optional("out_request_no", outRequestNo)
.refund(outTradeNo, refundAmount);
if (ResponseChecker.success(response)) {
return response.getHttpBody();
} else {
log.error("退款调用失败,原因{}",response.getHttpBody());
}
} catch (Exception e) {
log.error("退款调用发生异常,原因{}",e.getMessage());
}
return null;
}
四、controller
/**
* @Description: refund 退款
* @Param: [outTradeNo 订单编号,
* tradeNo 交易号,
* refundAmount 退款金额,
* outRequestNo 标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传
* ]
* @return: java.lang.String
* @Author: 皮蛋布丁
* @Date: 2021/6/27 14:44
*/
@PostMapping("/refund")
public String refund(String outTradeNo,String tradeNo,String refundAmount,String outRequestNo) {
return alipayService.refund(outTradeNo, tradeNo, refundAmount, outRequestNo);
}
五、运行
1、查看账户余额
登录支付宝开放平台查看。
2、退款操作
3、复查账户余额
发现账户余额由原来的99998.80,变成了现在的99998.81元,退款成功!
注:能力有限,还请谅解,争取早日能够写出有质量的文章!
我是皮蛋布丁,一位爱吃皮蛋的热爱运动的废铁程序猿。