java集成微信原路退款功能
* 注意,微信原路退款需要操作证书,操作证书可以放在项目中,也可以放在远程服务器
/****
* @param transactionID 微信订单号,就是微信支付的流水号
* @param outTradeNo 退款订单的订单号 ,也就是交易记录的主键
* @param totalFee 订单金额
* @param refundFee 退款金额,必须小于或等于用户实际支付的金额
* @param outRefundNo 订单退款的单号,也就是订单的主键
* @param request
* @param response
* @return success 退款成功 error 退款失败
* @throws Exception
*/
public static String weixinRefund(String transactionID,String outTradeNo,String totalFee,String refundFee,String outRefundNo,String appVersion,HttpServletRequest request,HttpServletResponse response) throws Exception {
//获得微信退款操作证书当前目录
String path =request.getSession().getServletContext().getRealPath("/");
log.info("当前未处理微信退款买家实际支付金额展示:"+totalFee);
RefundReqData refundData= new RefundReqData();
String refundXml=refundData.RefundReqData(transactionID, outTradeNo, outRefundNo, new BigDecimal(totalFee).multiply(new BigDecimal(100)).intValue(), new BigDecimal(refundFee).multiply(new BigDecimal(100)).intValue(),appVersion,request, response);
log.info("微信退款请求结果xml展示:"+refundXml);
log.info("当前未处理微信退款买家实际支付金额转int类型展示:"+new BigDecimal(totalFee).multiply(new BigDecimal(100)).intValue());
try {
WeixinRefundRequest refundRequest = new WeixinRefundRequest();
String result = refundRequest.httpsRequest("https://api.mch.weixin.qq.com/secapi/pay/refund", refundXml, path,appVersion);
log.info("微信退款返回结果:"+result);
Map<String,String> getMap = WeixinMessage.parseXml(new String(result.toString().getBytes(), "utf-8"));
if("SUCCESS".equals(getMap.get("result_code"))){
log.info("微信订单退款原路返回成功!");
return "success"; //退款成功
}else{
log.info("微信订单退款原路返回失败了呜呜呜!");
//返回错误描述
return "error"; //退款失败
}
}catch(Exception e){
log.info("微信订单退款原路返回失败了呜呜呜!");
e.printStackTrace();
return "error"; //退款失败
}
}
* 以上所有用到的微信相关工具类都可以去官方网站下载