之前有写过详细的微信支付功能:微信支付
我们使用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.p12privateKeyPath: classpath:apiclient_key.pemprivateCertPath: classpath:apiclient_cert.pem#JSAPI--公众号支付 NATIVE--原生扫码支付 APP--app支付tradeType: JSAPInotifyUrl:
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退款APIresult = 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;}
调用: