微信支付退款功能(SDK版)

微信支付的退款功能,如果使用官方提供的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 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 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

你可能感兴趣的:(微信支付,微信支付退款,支付退款,java)