JAVA全系列 教程
3762个小节阅读:7094.1k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,支付宝将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。
注意:
- 同一笔交易的退款至少间隔3s后发起
- 当前接口与PC退款、批量退款等其他退款产品无幂等关系,当商户侧同一笔退款请求已使用了当前接口申请退款的情况下,【不要使用其他退款产品再次进行退款】,可能造成【重复退款】。
xxxxxxxxxx
/**
* 申请退款
*
* @param orderNo 订单编号
* @param reason 退款理由
* @return
*/
@PostMapping("/refund/{orderNo}/{reason}")
public BaseResult refund(@PathVariable String orderNo, @PathVariable String reason) throws IOException, AlipayApiException {
zfbPayService.refund(orderNo, reason);
return BaseResult.ok();
}
xxxxxxxxxx
/**
* 修改订单状态
* @param orderNo 退款编号
* @param reason 退款理由
* @throws IOException
* @throws AlipayApiException
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void refund(String orderNo, String reason) throws IOException, AlipayApiException {
log.info("************* 创建退款单 ******");
// 1. 根据订单编号创建退款单
RefundInfo refundInfo = iRefundInfoService.createRefundsByOrderNo(orderNo, reason);
// 2. 组装参数
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
JSONObject bizContent = new JSONObject();
// 退款单号
bizContent.put("out_trade_no", refundInfo.getOrderNo());
// 退款金额
bizContent.put("refund_amount", refundInfo.getRefund());
bizContent.put("refund_reason", reason);
request.setBizContent(bizContent.toString());
// 3. 发送请求
AlipayTradeRefundResponse response = alipayClient.execute(request);
if(response.isSuccess()){
log.info("调用成功===>{}",response.getSubMsg());
// 4. 修改订单状态
iOrderInfoService.updateOrderStatus(refundInfo.getOrderNo(), OrderStatus.REFUND_SUCCESS);
//5. 修改退款单状态
iRefundInfoService.updateOrderStatusAliPay(response.getOutTradeNo());
} else {
log.error("调用失败=>{}",response.getSubMsg());
}
}