支付宝相对微信而已。退款,支付宝相对容易。有封装好的sdk。也有列代码。仔细看文档就能搞定。重点记录一波微信的退款。微信退款有两种。1种可以自己登陆微信后台,自己手动退款。可以配置一个退款成功的回掉url。第二种自己程序调用微信的退款接口。退款接口,微信要求。配置正书
@RequestMapping("/wxRefund")
@ResponseBody
public AjaxResult wxRefund(String totalFee, String out_trade_no,String refund_amount,HttpServletRequest request, HttpServletResponse response){
Map<Object, Object> map = new HashMap<Object, Object>();
// 封装一个请求的参数model
PrepayIdRequestHandler prepayReqHandler = new PrepayIdRequestHandler(request, response);
int total_fee=(int) (Float.valueOf(totalFee)*100);
System.out.println("total:"+total_fee);
System.out.println("total_fee:" + total_fee);
prepayReqHandler.setParameter("appid", ConstantUtil.APP_ID);
prepayReqHandler.setParameter("mch_id", ConstantUtil.MCH_ID);
String nonce_str = WXUtil.getNonceStr();
prepayReqHandler.setParameter("nonce_str", nonce_str);
prepayReqHandler.setParameter("out_trade_no", out_trade_no);//request.getRemoteAddr()
String timestamp = out_trade_no;
prepayReqHandler.setParameter("out_refund_no", timestamp);
prepayReqHandler.setParameter("total_fee", String.valueOf(total_fee));
prepayReqHandler.setParameter("refund_fee", String.valueOf(total_fee));
//prepayReqHandler.setParameter("notify_url", "123/callbacks.do");
/**
* 注意签名(sign)的生成方式,具体见官方文档(传参都要参与生成签名,且参数名按照字典序排序,最后接上APP_KEY,转化成大写)
*/
prepayReqHandler.setParameter("sign", prepayReqHandler.createMD5Sign());
String createOrderURL = "https://api.mch.weixin.qq.com/secapi/pay/refund";
/*String retur = ClientCustomSSL.doRefund(createOrderURL, "123456");*/
prepayReqHandler.setGateUrl(createOrderURL);
String retur=null;
try {
retur = prepayReqHandler.sendRefund();
} catch (Exception e) {
new AjaxResult("退款失败",false);
e.printStackTrace();
}
if (!StringUtils.isEmpty(retur)) {
Map<String, String> map1=null;
try {
map1 = XMLUtil.doXMLParse(retur);
} catch (JDOMException | IOException e) {
new AjaxResult("退款失败",false);
e.printStackTrace();
}
String returnCode = (String) map1.get("return_code");
if(returnCode.equals("SUCCESS")){
System.out.println("成功");
return new AjaxResult();
}
else {
return new AjaxResult("退款失败",false);
}
}
else {
return new AjaxResult("退款失败",false);
}
}