萌新第一次写博客,希望大佬们多多支持,以下是借鉴大佬的代码自己封装的一个方法。
//企业付款到零钱
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;
}
}