之前有写过详细的微信支付功能:微信支付
我们使用weixin-java-pay的jar包等,配置上的流程同微信支付,可以看上面的文章。
退款使用的WxPayService类的refundV3方法。使用该方法需要在微信支付配置的基础上加上:apiclient_key.pem 证书文件、 apiclient_cert.pem证书文件、apiV3 秘钥值的配置
1、下载API证书,并放到程序的指定位置
按照指引下载后解压内容如下,放到程序的resource下面
放置的程序路径如下:
2、在yml配置文件中定义
wechat:
appid:
secret:
# 商户
mchId:
# 秘钥
mchKey:
apiV3Key:
# p12证书的位置,可以指定绝对路径,也可以指定类路径(以classpath:开头)
keyPath: classpath:apiclient_cert.p12
privateKeyPath: classpath:apiclient_key.pem
privateCertPath: classpath:apiclient_cert.pem
#JSAPI--公众号支付 NATIVE--原生扫码支付 APP--app支付
tradeType: JSAPI
notifyUrl:
3、在原有的WxProperties和WxConfig中对WxPayService配置的内容中进行新增内容。
WxProperties:
WxConfig:
4、调用退款方法定义以及调用
/**
* 微信支付退款
* @param orderNo
* @param amount
* @return
*/
public Result<WxPayRefundV3Result> rebackPay(String orderNo,Integer amount){
Result<WxPayRefundV3Result> res = new Result<WxPayRefundV3Result>();
//微信支付-申请退款请求参数
WxPayRefundV3Request request = new WxPayRefundV3Request();
WxPayRefundV3Request.Amount am = new WxPayRefundV3Request.Amount();
am.setTotal(amount);//原订单金额
//退款币种
am.setCurrency("CNY");
//退款金额 单位为分
am.setRefund(amount);
//金额信息
request.setAmount(am);
//transaction_id:微信支付订单号
request.setTransactionId(orderNo);
//商户订单号
request.setOutRefundNo("return_"+orderNo);
request.setNotifyUrl(this.wxPayService.getConfig().getPayScoreNotifyUrl());//回调地址
WxPayRefundV3Result result;
try {
//调用微信V3退款API
result = wxPayService.refundV3(request);
System.out.println("***************************退款:"+result.toString());
String status = result.getStatus();
switch (status) {
case "SUCCESS":
res.success("退款成功");
break;
case "CLOSED":
res.success("退款关闭");
break;
case "PROCESSING":
res.success("退款处理中");
break;
case "ABNORMAL":
res.success("退款异常");
break;
default:
res.error("受理失败");
break;
}
res.setResult(result);
} catch (Exception e) {
e.printStackTrace();
res.error("申请退款失败,"+e.getMessage());
}
return res;
}
调用: