微信支付企业付款到零钱

方奕
2023-12-01

萌新第一次写博客,希望大佬们多多支持,以下是借鉴大佬的代码自己封装的一个方法。

//企业付款到零钱
    public Result returnWechatMoney(HttpServletRequest request, String money, String openId) throws Exception {
        Map<String, String> params = new HashMap<>();
        params.put("mch_appid", WXPayConfig.APPID);//微信公众号的appid
        params.put("mchid", WXPayConfig.mch_id);//商务号
        params.put("nonce_str", WXPayUtil.generateNonceStr());//随机生成后数字,保证安全性
        params.put("partner_trade_no", WXPayUtil.getorderid());//生成商户订单号
        params.put("openid", openId);// 支付给用户openid
        params.put("check_name", "NO_CHECK");//是否验证真实姓名呢
        params.put("re_user_name", "测试用户");//收款用户姓名
        params.put("amount", money);//企业付款金额,单位为分
        params.put("desc", "测试");//企业付款操作说明信息。必填。
        params.put("spbill_create_ip", WXPayUtil.getAddrIp(request));//调用接口的机器Ip地址
        try {
            String sign = WXPayUtil.generateSignature(params, NowData.PATERNERKEY);//签名
            params.put("sign", sign);//封装退款对象
            String orderxml = WXPayUtil.mapToXml(params);    //将数据转成XML格式
            String ru = CertHttpUtil.postData("https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers",
                    orderxml, WXPayConfig.mch_id, WXPayConfig.certificate_url);//退还零钱
            System.out.println("ru=================" + ru);
            Map<String, String> returnMap = WXPayUtil.xmlToMap(ru);//接口返回数据
            if (returnMap.containsKey("result_code") && returnMap.get("result_code").equals("SUCCESS")) {
                return new Result(true, StatusCode.OK, "企业付款到零钱成功。");
            } else if (returnMap.containsKey("err_code") && returnMap.get("err_code").equals("AMOUNT_LIMIT")) {//商户金额不足
                return new Result(false, StatusCode.AMOUNT_LIMIT, "商户余额不足,请联系相关人员处理。");
            } else if (returnMap.containsKey("err_code") && returnMap.get("err_code").equals("SENDNUM_LIMIT")) {//该用户今日付款次数超过限制
                return new Result(false, StatusCode.SENDNUM_LIMIT, "该用户今日付款次数超过限制,如有需要请登录微信支付商户平台更改API安全配置.");
            } else if (returnMap.containsKey("err_code") && returnMap.get("err_code").equals("OPENID_ERROR")) {
                return new Result(false, StatusCode.OPENID_ERROR, "openid与商户appid不匹配.");
            } else if (returnMap.containsKey("err_code") && returnMap.get("err_code").equals("MONEY_LIMIT")) {//已达到付款给此用户额度上限.
                return new Result(false, StatusCode.MONEY_LIMIT, "已达到付款给此用户额度上限.");
            } else {
                return new Result(false, StatusCode.ERROR, "企业付款到零钱出现未知错误。");
            }
        } catch (Exception e) {
            throw e;
        }
    }

 

 类似资料: