浅析微信支付:(余额提现)企业付款到微信用户零钱或银行卡账户

本文是【浅析微信支付】系列文章的第十二篇,主要讲解在商户存在的提现、商户付款到微信用户零钱或者银行卡需求。



浅析微信支付系列已经更新十二篇了哟~,没有看过的朋友们可以看一下哦。

浅析微信支付:支付验收示例和验收指引

浅析微信支付:如何使用沙箱环境测试

浅析微信支付:下载对账单和资金账单

浅析微信支付:申请退款、退款回调接口、查询退款

如果你是做电商或者某些有福利返利的系统,基本上会遇到诸如 余额提现 这类需求,主要就是平台向用户返利现金,积累到某一个门槛,可以领取到自己的余额账号、银行卡;或者是使用为用户发送现金红包的方式。

接下来的两篇文章,会为大家描述在微信支付中,像用户付款的以上三种方式。

以下为三种付款方式的必要条件:

  1. 商户号(或同主体其他非服务商商户号)已入驻90日
  2. 商户号(或同主体其他非服务商商户号)有30天连续正常交易
  3. 登录微信支付商户平台-产品中心,开通企业付款。

企业付款到微信用户零钱

企业付款提供由商户直接付钱至用户微信零钱的能力,支持平台操作及接口调用两种方式,资金到账速度快,使用及查询方便。主要用来解决合理的商户对用户付款需求,比如:保险理赔、彩票兑换等等。

如何开通?

  1. 入驻成为商户:在线提交营业执照、身份证、银行账户等基本信息,快速提交申请;
  2. 超级管理员开通:前往商户平台-产品中心-企业付款到零钱-申请开通;
  3. 特殊要求:交易资金是即时入账到商户号基本户的商户,需要满足以下要求:需入驻满90天,连续交易30天。

所需资料:开通企业付款到零钱功能无需提供额外的材料。
费用:试用期间免费使用。

应用场景

企业付款为企业提供付款至用户零钱的能力,支持通过API接口付款,或通过微信支付商户平台(pay.weixin.qq.com)网页操作付款。

以下为官方的解释:

https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1

抓重点,首先需要知道的是,开通了运营账户的商户,付款时会从运营账户余额中扣除,这个一定要注意,以免金额不足时付款失败(可以使用主账户为运营账户充值,参考[交易中心]-[充值/转入])。

以下为特别需要注意的地方,为大家标记出来,设计系统时一定要参考一下,以免入坑。

接口链接

https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers

是否需要证书

请求需要双向证书。

调用接口

注意事项:
◆ 当返回错误码为“SYSTEMERROR”时,请不要更换商户订单号,一定要使用原商户订单号重试,否则可能造成重复支付等资金风险。
◆ XML具有可扩展性,因此返回参数可能会有新增,而且顺序可能不完全遵循此文档规范,如果在解析回包的时候发生错误,请商户务必不要换单重试,请商户联系客服确认付款情况。如果有新回包字段,会更新到此API文档中。
◆ 因为错误代码字段err_code的值后续可能会增加,所以商户如果遇到回包返回新的错误码,请商户务必不要换单重试,请商户联系客服确认付款情况。如果有新的错误码,会更新到此API文档中。
◆ 错误代码描述字段err_code_des只供人工定位问题时做参考,系统实现时请不要依赖这个字段来做自动化处理。

PS:目前支持向指定微信用户的openid付款。

官方文档如下:

https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2

具体的传入参数,这里就不一一列举了,请大家参考一下官方文档,下面贴上具体的实现源码:

/**
 * [微信支付提现接口] - 保存调用的相关记录
 * @param payment 支付对象
 * @param wxPayConfig 微信支付单例对象
 * @return map
 *
 * @author yclimb
 * @date 2018/7/30
 */
public Map<String, String> saveWxPayTransfers(Payment payment, WXPayConfig wxPayConfig) throws Exception {
    // 支付前验证

    // 微信支付对象
    // WXPay wxPay = new WXPay(WXPayConfigImpl.getInstance());
    WXPay wxPay = new WXPay(wxPayConfig);

    // 微信退款接口
    Map<String, String> resultMap = wxPay.transfers(...);
    logger.info("saveWxPayTransfers:resultMap:" + resultMap.toString());

    // 下单失败,进行处理
    if (WXPayConstants.FAIL.equals(resultMap.get(WXPayConstants.RETURN_CODE)) || WXPayConstants.FAIL.equals(resultMap.get(WXPayConstants.RESULT_CODE))) {

        // 处理结果返回,无需继续执行

        // 余额不足提醒
        if (WXPayCodeEnum.ERR_CODE_NOTENOUGH.getCode().equals(resultMap.get(WXPayConstants.ERR_CODE))) {
            // 发送余额不足的消息提醒

        }
    }

    // 付款记录修改 & 记录付款日志

    return resultMap;
}

以上为调用的应用方法,下面为大家贴出微信接口调用代码 imall.weixin.sdk.WXPay

/**
 * 作用:企业向微信用户个人付款<br>
 * 场景:企业付款为企业提供付款至用户零钱的能力,支持通过API接口付款,或通过微信支付商户平台(pay.weixin.qq.com)网页操作付款。
 * 接口文档地址:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2
 *
 * @param partner_trade_no 商户订单号
 * @param openid           用户openid
 * @param amount           企业付款金额
 * @param desc             企业付款描述信息
 * @param spbill_create_ip 该IP可传用户端或者服务端的IP
 * @return API返回数据
 * @throws Exception e
 */
public Map<String, String> transfers(String partner_trade_no, String openid, String amount, String desc, String spbill_create_ip) throws Exception {

    /** 构造请求参数数据 **/
    Map<String, String> data = new HashMap<>();

    // 商户订单号    partner_trade_no    是    10000098201411111234567890    String    商户订单号,需保持唯一性(只能是字母或者数字,不能包含有符号)
    data.put("partner_trade_no", partner_trade_no);
    // 用户openid    openid    是    oxTWIuGaIt6gTKsQRLau2M0yL16E    String    商户appid下,某用户的openid
    data.put("openid", openid);
    // 校验用户姓名选项    check_name    是    FORCE_CHECK    String    NO_CHECK:不校验真实姓名,FORCE_CHECK:强校验真实姓名
    data.put("check_name", "NO_CHECK");
    // 金额    amount    是    10099    int    企业付款金额,单位为分
    data.put("amount", String.valueOf(new BigDecimal(amount).multiply(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP).intValue()));
    // 企业付款描述信息    desc    是    理赔    String    企业付款操作说明信息。必填。
    data.put("desc", desc);
    // Ip地址    spbill_create_ip    是    192.168.0.1    String(32)    该IP同在商户平台设置的IP白名单中的IP没有关联,该IP可传用户端或者服务端的IP。
    data.put("spbill_create_ip", spbill_create_ip);

    /** 以下参数为非必填参数 **/

    /*// 设备号    device_info    否    013467007045764    String(32)    微信支付分配的终端设备号
    data.put("device_info", "xxx");
    // 收款用户姓名    re_user_name    可选    王小王    String    收款用户真实姓名。(如果check_name设置为FORCE_CHECK,则必填用户真实姓名)
    data.put("re_user_name", "xxx");*/

    // 微信调用接口
    Map<String, String> resultMap = this.transfers(data);

    WXPayUtil.getLogger().info("wxPay.transfers:" + resultMap);

    return resultMap;
}

PS:推荐数据库中对于金额存储为数值单位,以分为单位来存储,1.1元可以储存为101,这样和微信对应,会方便很多。

对于企业付款查询的接口,这里就不详细描述了,以下为具体的官方文档链接:

https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_3

需要的朋友,根据文档进行接口查询即可,非高频接口。

企业付款到银行卡

企业付款到银行卡提供由商户直接付钱至指定银行卡账户的能力,支持平台操作及接口调用两种方式,资金到账速度快,使用及查询方便。主要用来解决合理的商户对用户付款需求,比如:保险理赔、彩票兑换等等。

开通流程:

  1. 入驻成为商户:在线提交营业执照、身份证、银行账户等基本信息,快速提交申请;
  2. 超级管理员开通:前往商户平台-产品中心-企业付款到银行卡-申请开通;
  3. 特殊要求:交易资金是即时入账到商户号基本户的商户,需要满足以下要求:需入驻满90天,连续交易30天。

所需资料:开通企业付款到银行卡功能无需提供额外的材料。
费用:此功能需收取手续费,按照单笔金额收取,每笔收取0.1%,最低1元,最高25元。

应用场景

微信支付已上线企业付款至银行卡功能。商户可以将商户号余额付款至指定的收款银行账户。通过指定收款银行账户户名、卡号,以及收款银行信息即可实现付款。

官方文档地址:

https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_1&index=1

功能说明:

  1. 企业付款至银行卡只支持新资金流类型账户
  2. 目前企业付款到银行卡支持17家银行,更多银行逐步开放中
  3. 付款到账实效为1-3日,最快次日到账
  4. 每笔按付款金额收取手续费,按金额0.1%收取,最低1元,最高25元,如果商户开通了运营账户,手续费和付款的金额都从运营账户出。如果没有开通,则都从基本户出。
  5. 每个商户号每天可以出款100万,单商户给同一银行卡付款每天限额5万
  6. 发票:在账户中心-发票信息页面申请开票的商户会按月收到发票(已申请的无需重复申请)。

企业付款到银行卡发票与交易手续费发票为拆分单独开具。

需要注意的是,微信支持的银行有限,具体的支持银行见如下链接:

https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_4&index=5

所以肯定会出现不支持的银行,小伙伴们在开发的时候,可以在前后端控制用户选择提现银行来解决。

平台上手动付款流程:

  1. 在产品中心,开通企业付款到个人银行卡功能
  2. 进入交易中心-企业付款到银行卡页面进行付款
  3. 指定收款银行账号、户名、收款方开户行,及付款金额信息,即可实现付款

接口链接

https://api.mch.weixin.qq.com/mmpaysptrans/pay_bank

是否需要证书

请求需要双向证书。

调用接口

接口介绍:
用于企业向微信用户银行卡付款
目前支持接口API的方式向指定微信用户的银行卡付款。

接口调用规则:
◆ 单商户日限额——单日100w
◆ 单次限额——单次5w
◆ 单商户给同一银行卡单日限额——单日5w

注意:重点来了,首先,收款方银行卡号enc_bank_no、收款方用户名enc_true_name 这两个入参是需要 采用标准RSA算法,公钥由微信侧提供 得到的,所以还需要先拿到这个密钥,下面是官方文档地址:

https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_7&index=4

以上文档详细介绍了如何得到具体的密钥方式,如果有看不明白的小伙伴,可以直接百度 获取RSA加密公钥API,可以得到很多示例,这里我就不讲了。

除入参和企业付款到微信用户零钱有所不一致之外,其他方面都差不多,小伙伴们可以参考上面付款到零钱的接口来实现付款到银行卡接口。

结语

以上为微信余额提现相关的解释和源码,小伙伴们一定要注意看看官方文档哦,具体的源码可以看作者的github,里面对每个方法有详细的注释。

如果小伙伴有遇到解决不了的问题,可以关注作者微信公众号,加入讨论群中发出疑问,和小伙伴们一起解决哦~

预告:下一篇文章会讲发放奖励的另一种方式 商户平台-现金红包,敬请期待!!!

?如果想要提前一览源码的小伙伴,可以先看看我的 github,地址如下:
?
?`
?https://github.com/YClimb/wxp...
?`

关注作者微信公众号,点击下方讨论群,扫码即可加入微信支付讨论群与小伙伴一起探讨哦~

到此本文就结束了,关注公众号查看更多推送!!!




原文地址:https://www.cnblogs.com/jlfw/p/12687783.html

时间: 2024-07-31 22:25:05

浅析微信支付:(余额提现)企业付款到微信用户零钱或银行卡账户的相关文章

微信支付之企业付款--微信商户后台没有“企业付款到零钱”解决方案

项目需要用到用户提现功能,准备用微信支付提供的企业付款功能,即提供企业向用户付款的功能,支持企业通过API接口付款,或通过微信支付商户平台网页功能操作付款. 登录商户后台准备开通,发现产品中心中并不存在. 这没有,我要怎么开通啊,后来网上一顿搜索,发现一个解决方案,将原网址https://pay.weixin.qq.com/index.php/extend/product/lists?tid=3,com/后的改为/index.php/public/product/detail?pid=5,参见下

微信公众号开启企业付款到用户

将网址https://pay.weixin.qq.com/index.php/extend/product/lists?tid=3 改为   https://pay.weixin.qq.com/index.php/public/product/detail?pid=5 就能访问微信公众号隐藏功能之企业付款到用户功能啦!

浅析微信支付:商户平台代金券或立减优惠开通、指定用户代金券发放、查询等

本文是[浅析微信支付]系列文章的第十四篇,主要讲解在如何开通商户平台的代金券或立减优惠功能,商家向指定用户发送代金券,查询发送记录,代金券信息等. 浅析微信支付系列已经更新十四篇了哟-,没有看过的朋友们可以看一下哦. 浅析微信支付:商户平台开通现金红包.指定用户发放.红包记录查询 浅析微信支付:(余额提现)企业付款到微信用户零钱或银行卡账户 浅析微信支付:支付验收示例和验收指引 浅析微信支付:如何使用沙箱环境测试 首先我们需要了解一下什么是代金券和立减优惠? 代金券是微信支付为商家提供的一个营销

浅析微信支付:商户平台开通现金红包、指定用户发放、红包记录查询

本文是[浅析微信支付]系列文章的第十三篇,主要讲解在如何开通商户平台的红包功能和为用户发放红包,以及查询发送红包记录. 浅析微信支付系列已经更新十三篇了哟-,没有看过的朋友们可以看一下哦. 浅析微信支付:(余额提现)企业付款到微信用户零钱或银行卡账户 浅析微信支付:支付验收示例和验收指引 浅析微信支付:如何使用沙箱环境测试 浅析微信支付:申请退款.退款回调接口.查询退款 上一篇文章我们说到,如果有余额提现.返利福利等需求时,就会用到商家向用户付款的操作,基于微信支付,上篇我们说了付款到用户余额和

thinkphp 微信支付 thinkphp 微信企业付款

前面已经跑通了微信支付的流程,接下来吧微信支付和微信企业付款接入到thinkphp中,版本是3.2 把微信支付类.企业付款类整合到一起放到第三方类库,这里我把微信支付帮助类和企业付款类放到同一个文件了: 把Payment整个文件夹放到\ThinkPHP\Library\Vendor文件夹下面,打开WxPay.pub.config.php,配置四个参数即可,然后把微信提供的证书放到caccert文件夹:这样就完成了支付和 企业付款的所有代码配置! 待续...

11. PHP接入微信企业付款功能

payment 项目2.0版本 这个功能与支付宝的批量付款到支付宝帐号功能类似.但是当前支付宝这个接口已经停止审核了. 当前很多提问平台就用到了这两个平台.比如[来问医生],你提的问题如果被人看了.医生得0.5元,你得0.5元.然后累积够1元后,[来问医生]就会通过微信的企业付款功能给你的微信余额增加1元. 代码调用 use Payment\TransferContext; use Payment\Common\PayException; use Payment\Config; // 生成转款单

C#开发微信支付之企业向用户付款

1.企业付款的介绍 所谓企业付款指的是,在功能开放后诸如保险行业的客户理赔.退保.商品退款.发放征集活动奖金.抽奖互动等操作都可以通过企业付款完成.而此前,微信支付只能提供客户向企业单向付款. 商户如果需要给用户付款,可以直接将钱打入用户的"微信零钱"中,微信支付将做零钱入账消息通知,零钱收支明细会展示相应记录.针对无零钱账户的历史客户端版本,资金将进入用户的红包账户,微信支付无消息通知用户,企业可选择自行触达用户. 通过认证的企业号可以开通微信支付功能.通过认证的企业号可以管理平台的

asp微信支付企业付款功能代码下载

最近应一个客户要求写了一段代码,要求从公众号的支付平台给用户发钱,我大体看了一下,这叫企业付款功能,由于客户的代码是asp写的,所以只能用asp来写接口了,这个功能还比较实用,可以片外支付从0.30元以上的钱付给用户,不说了,下面让代码: 微信公众号支付平台asp企业付款功能代码: <% '作者微信:18611436777,转载请保留 set wxpay = New WxPayApi Dim Action,total_fee Action = Trim(Request.QueryString(&qu

浅析微信支付:如何使用沙箱环境测试

本文是[浅析微信支付]系列文章的第十篇,主要讲解如何使用沙箱环境来测试微信支付. 浅析微信支付系列已经更新十篇了哟-,没有看过的朋友们可以看一下. 浅析微信支付:下载对账单和资金账单 浅析微信支付:申请退款.退款回调接口.查询退款 浅析微信支付:查询订单和关闭订单 浅析微信支付:支付结果通知 在实际开发中,通常我们都是在开发环境中开发,本地环境也有很多限制,比如:微信支付无法调起.H5链接需要鉴权.支付结果通知需要外网等. 面对以上的问题,微信官方给出了解决的方法,就是咋们这篇文章的 沙箱环境,