微信支付踩坑记录 (java后端四:企业付款到零钱)

普通商户模式微信支付之企业付款到零钱:

前言:
为啥会用到企业付款到零钱呢,如果在自己的系统里面有涉及到用户提现,活动奖励等功能,则就可以使用到企业付款到零钱,我在这里将其称之为转账,但是使用企业付款到零钱有很多前提条件:
如:商户号已入驻90日且截止今日回推30天商户号保持连续不间断的交易。
这是非常重要的一点,这一点满足之后才能进行接口的调用,另外就是需要用户的微信openid,openid为用户使用微信登录保存在系统的数据库中方便使用。

在使用企业付款到零钱这个功能时,需要去商户平台开通这个功能:登录微信支付商户平台-产品中心,开通付款到零钱。

前提准备:appid应用id,商户号,商户密钥,商户证书文件(apiclient_cert.p12),这些都是十分重要的参数。

话不多说了,直接上代码:

    /**
     * 微信提现到零钱
     * 用于企业向微信用户个人付款
     * 目前支持向指定微信用户的openid付款。
     */
    public ResBean<Object> wxPayWithdrawal(JSONObject reqJson) {
        ResBean<Object> resBean = new ResBean<>();
        try {
            HashMap<String, String> map = new LinkedHashMap<>();
            map.put("amount", String.valueOf(reqJson.getInteger("amount"))); // 需要付款的金额,单位 分
            map.put("check_name", "NO_CHECK");//NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名
            map.put("desc", reqJson.getString("desc"));//提现备注
            map.put("mch_appid", appId);//app应用的appId,是和此商户产生绑定关系的
            map.put("mchid", mchId);  // 商户的商户号
            map.put("nonce_str", Long.toString(System.currentTimeMillis() / 1000));   // 随机字符串
            map.put("openid", reqJson.getString("openid"));//用户openid ,微信登录里面携带的参数,可存库于用户表中进行使用
            map.put("partner_trade_no", reqJson.getString("partner_trade_no"));//商户系统自己生成的订单号
            //map.put("re_user_name", reqJson.getString("re_user_name"));//用户真实姓名,如果选择校验真实姓名则需要传值
            map.put("sign", PayUtils.getSign(map, mchSecret));   // 构造签名

            //拿到证书路径
            String path = this.getClass().getClassLoader().getResource("apiclient_cert.p12").getPath();
            String s = HttpUtils.postSSL("https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers", PaymentKit.toXml(map), path, mchId);
            Map<String, String> result = PaymentKit.xmlToMap(s);

			// 拿到响应结果
            String return_code = result.get("return_code");
            String result_code = result.get("result_code");
            String err_code = result.get("err_code");
            String err_code_des = result.get("err_code_des");

            if (PaymentKit.codeIsOK(return_code)) {
                if (PaymentKit.codeIsOK(result_code)) {
                // 进行数据封装,响应个前端或者其他后端接口
                    String payment_no = result.get("payment_no");
                    //String payment_time = result.get("payment_time");
                    resBean.setRes_code("0000");
                    resBean.setRes_desc("企业付款到零钱申请成功");
                    resBean.setRes_content(payment_no);
                } else {
                    //或者调用查询企业付款到零钱接口来查看状态
                    resBean.setRes_code("9999");
                    resBean.setRes_desc(err_code_des);
                    resBean.setRes_content(err_code);
                }
            } else {
                //这里出错查看返回状态码及描述
                resBean.setRes_code("9999");
                resBean.setRes_desc(err_code_des);
                resBean.setRes_content(err_code);
            }
        } catch (Exception e) {
            log.error("微信提现到零钱申请出错", e);
            resBean.setRes_code("9999");
            resBean.setRes_desc("微信提现到零钱申请出错");
            resBean.setRes_content(e);
        }
        return resBean;
    }

到此企业付款到零钱就结束了,下一篇接着就是企业付款到银行卡了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值