目录
前言
有了之前的微信支付,那退款肯定也是少不了的,有的客户支付后不想要或者买错后就肯定会申请退款,这时候就会用到这个退款功能
一、密钥
之前的支付用到的密钥,在退款这里同样会用到的,一般建议存放到自己项目的某个目录下,用的时候也方便,只需填写自己存放的路径就可以的。
二、直接上代码
单单是退款的话是相对较简单的,看着官方文档就可以写的,
@GetMapping("refund")
public String refund(RefundInfoDto refundInfoDto) {
String filePath ="自己的密钥路径";
if (config == null) {
config =
new RSAAutoCertificateConfig.Builder()
.merchantId(mchId)
.privateKeyFromPath(filePath)
.merchantSerialNumber(merchantSerialNumber)
.apiV3Key(apiV3Key)
.build();
}
// 构建service
if (refundService == null) {
refundService = new RefundService.Builder().config(config).build();
}
CreateRequest request = new CreateRequest();
request.setOutTradeNo(refundInfoDto.getOutTradeNo());
request.setOutRefundNo(refundInfoDto.getOutRefundNo());
request.setReason(refundInfoDto.getReason());
AmountReq amountReq = new AmountReq();
//退款金额(这个金额必须是小于等于原订单金额的,可以分多次退款,但是不能超过原订单金额,根据自己的业务需求定)
String length = AmountUnitConversionUtil.changeY2F(refundInfoDto.getRefundMoney().toString());
Long refundMoney = Long.valueOf(length);
//原订单金额
String total = AmountUnitConversionUtil.changeY2F(refundInfoDto.getTotalMoney().toString());
Long totalMoney = Long.valueOf(total);
amountReq.setRefund(refundMoney);
amountReq.setTotal(totalMoney);
amountReq.setCurrency("CNY");
request.setAmount(amountReq);
request.setOutRefundNo(IdUtils.getUUID());
Refund refund = refundService.create(request);
System.out.println(refund.getStatus().toString());
//发起退款
return refund.getStatus().toString();
}
总结
退款接口相对较简单,就没啥多说的,直接就上了代码,这里只是退款,根据自己的业务需求进行调用即可。有问题可以探讨!