- 请求参数微信订单编号或者商户生成的订单编号,有一个就ok
- 拼接其他请求参数
- 签名
以下代码返回退款结果
public String ApplicationForRefund(String out_trade_no, String transaction_id, Double total) throws Exception {
log.info("退款开始!!!!");
log.info("退款开始!!!!" + out_trade_no); //商户订单编号
log.info("退款开始!!!!" + transaction_id); //微信订单编号
Map<String, String> map = new HashMap<>();
map.put("appid", WXPayConfig.APPID); //微信公众号appid
map.put("mch_id", WXPayConfig.mch_id); //商户号
map.put("nonce_str", WXPayUtil.generateNonceStr()); //生成随机字符串
if (transaction_id == null || transaction_id.equals("")) {
if (out_trade_no != null && out_trade_no != "") {
map.put("out_trade_no", out_trade_no);
} else {
throw new Exception("订单号为空");
}
} else {
map.put("transaction_id", transaction_id);
}
map.put("out_refund_no", "TK" + WXPayUtil.generateNonceStr()); //生成退款订单号
String money = String.valueOf(total * 100); //微信以分为单位
money = money.substring(0, money.indexOf(".")); //去掉小数点及后面的数字
map.put("total_fee", money);
map.put("refund_fee", money);
log.info("参与签名参数:" + map);
try {
String sign = WXPayUtil.generateSignature(map, WXPayConfig.paternerKey);//签名需要支付秘钥
map.put("sign", sign);
} catch (Exception e) {
log.info("退款参数错误");
e.printStackTrace();
}
String respXml = WXPayUtil.mapToXml(map);
String ru = CertHttpUtil.postData(WXPayConfig.refund_url, respXml, WXPayConfig.mch_id, WXPayConfig.certificate_url);
if (ru.indexOf("SUCCESS") != -1) {
return "退款成功!";
} else {
return "退款错误!";
}
}