微信支付的退款功能,如果使用官方提供的SDK版本,使用起来还是很方便的,官方封装了签名,map转XMLString的一些方法,使用起来能剩很多代码量.
微信API参考链接:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_4
微信退款功能主题代码如下:
@Override
public Boolean refund(FWxRefund refund) {
try {
log.info("开始处理退款任务,订单号 [" + refund.getOrderId() + "]");
//这里使用的是微信配置文件自动从yam文件中读取微信必须配置
//WXConfigUtil config = new WXConfigUtil(wxConfigPro);
//WXPay wxpay = new WXPay(config);
//构建参数
Map<String, String> dataMap = new HashMap<>();
dataMap.put("appid","你的微信appid");
dataMap.put("mch_id","你的微信mch_id");
//自行实现该随机串
dataMap.put("nonce_str",WXPayUtil.generateNonceStr());
dataMap.put("out_trade_no",refund.getOrderId());
dataMap.put("out_refund_no",refund.getOrderId());
BigDecimal moneyDecimal = refund.getFee().multiply(new BigDecimal(100)).setScale(0);
dataMap.put("total_fee",moneyDecimal.toString());
dataMap.put("refund_fee",moneyDecimal.toString());
dataMap.put("refund_desc",refund.getRemark());
dataMap.put("notify_url" , wxConfigPro.getNotifyRefundUrl());
dataMap.put("sign_type", WXPayConstants.MD5);
log.info("退款信息" , dataMap.toString());
//生成签名
String sign = WXPayUtil.generateSignature(dataMap, "你的微信key");
dataMap.put("sign", sign);
//发起退款
Map<String, String> response = wxpay.refund(dataMap);
log.info(JsonUtil.toJSON(response));
String returnCode = response.get("return_code"); //获取返回码
//若返回码为SUCCESS,则会返回一个result_code,再对该result_code进行判断
Boolean flag;
refund.setUpdateTime(new Date());
if (returnCode.equals("SUCCESS")) {//
refund.setStatus(2);
flag = fWxRefundService.updateById(refund);
log.info("退款结果 [" + flag + "]");
return flag;
}else {
refund.setStatus(3);
flag = fWxRefundService.updateById(refund);
log.info("退款结果 [" + flag + "]");
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
微信配置信息需要提前配置好
主要问题:
1.无论在处理退款还是支付业务,涉及的金额参数,都需要转成以分为单位的整型字符串处理,如0.01元 => "1"
欢迎交流 qq群:786937587

793

被折叠的 条评论
为什么被折叠?



