对接微信商家转账到零钱来实现资金提现功能

举报
悟空码字 发表于 2023/05/26 17:28:13 2023/05/26
【摘要】 使用微信提供的商家转账到零钱接入很灵活,可应用于多行业平台内用户分佣等场景。可以和自身业务系统直接集成实现转账功能,无需频繁登录微信支付商户平台转账。
大家好,我是小悟

使用场景

不管是做APP、电脑网站、手机网站还是小程序,为了推广基本上都离不开用户分佣的场景。

换句话说就是在其平台内为每个用户设置“电子钱包”功能,而电子钱包在平台那里只是一串数字,这就需要平台为用户实现提现的功能。

图片

以前可以使用企业付款到零钱产品来实现这个功能,但随着微信支付下线了这个产品,如果是下线前已经开通的还可以继续使用,不过额度下降了很多。而在下线之后,商户号已经无法再申请企业付款到零钱产品。

不过上线了替代品即商家转账到零钱,可以同时向多个微信零钱转账,当然,对于提现这种业务,只转一个微信零钱肯定也是可以的。主要解决多种行业商家在其平台内存在佣金报酬、员工福利发放、费用报销或行政补贴支付等场景下,平台内的用户资金提现时面临的主要问题。

图片

方便快捷

使用微信提供的商家转账到零钱接入很灵活,可应用于多行业平台内用户分佣等场景。可以和自身业务系统直接集成实现转账功能,无需频繁登录微信支付商户平台转账。

当发起接口转账后,用户可收到微信APP到账消息提醒。对商家来说最重要的是,可以免费使用接口,无手续费,微信支付官方提供安全保障。而对用户来说最重要的是,提现资金实时到账。

功能实现

实现功能前需要先到微信支付商户平台开通商家转账到零钱,审核通过了才可以调用。

图片

微信支付商家转账到零钱使用的是V3接口,交互略微繁琐但更安全。调用/v3/transfer/batches,实现转账功能。
public class InitiateBatchTransfer {
  public static String merchantId = "商户号";
  public static String privateKeyPath = "商户api证书位置路径";
  public static String merchantSerialNumber = "商户api证书序列号";
  public static String wechatPayCertificatePath = "微信支付平台证书位置路径";
  public static TransferBatchService service;
  public static void main(String[] args) {
    RSAConfig config =
        new RSAConfig.Builder()
            .merchantId(merchantId)
            .privateKeyFromPath(privateKeyPath)
            .merchantSerialNumber(merchantSerialNumber)
            .wechatPayCertificatesFromPath(wechatPayCertificatePath)
            .build();
    service = new TransferBatchService.Builder().config(config).build();
    InitiateBatchTransferRequest initiateBatchTransferRequest =
        new InitiateBatchTransferRequest();
    initiateBatchTransferRequest.setAppid("直连商户的appid");
    initiateBatchTransferRequest.setOutBatchNo("商家批次单号");
    initiateBatchTransferRequest.setBatchName("批次名称");
    initiateBatchTransferRequest.setBatchRemark("批次备注");
    initiateBatchTransferRequest.setTotalAmount(转账金额单位为“分”);
    initiateBatchTransferRequest.setTotalNum(转账总笔数);
    {
      List<TransferDetailInput> transferDetailListList = new ArrayList<>();
      {
        TransferDetailInput transferDetailInput = new TransferDetailInput();
        transferDetailInput.setOutDetailNo("商家明细单号");
        transferDetailInput.setTransferAmount(转账金额单位为分);
        transferDetailInput.setTransferRemark("转账备注");
        transferDetailInput.setOpenid("用户在直连商户应用下的用户标示");
        transferDetailInput.setUserName(
            "收款用户姓名,明细转账金额 >= 2,000元,收款用户姓名必填,该字段需进行加密处理");
        transferDetailListList.add(transferDetailInput);
      }
      initiateBatchTransferRequest.setTransferDetailList(
          transferDetailListList);
    }
    initiateBatchTransferRequest.setTransferSceneId("转账场景ID,如不填写则使用商家的默认转账场景");
    InitiateBatchTransferResponse response =
        service.initiateBatchTransfer(initiateBatchTransferRequest);
  }
}

注意事项

值得注意的是,目前准入条件仅针对企业商户号,且保持正常健康交易。记得去微信支付商户平台转账发起方式开启API发起,不然无法调用接口。

默认有转账验密,就是说为保障出资安全,通过API接口发起转账后,商户需通过商家助手小程序输入操作密码确认转账才会继续发起转账。

图片

那结合提现功能的场景,这显然不大可行,别慌,可以通过设置免密额度来解决这个二次确认的问题。意思就是说单笔转账明细单金额不超过免密额度时,系统不会向验密人发起验密请求,将直接执行转账。

图片

当明细转账金额也就是单笔转账金额不少于2000元时,必须传入收款用户姓名进行校验,但不是明文,需要进行加密处理。

转账额度

涉及到转账,自然就有限额的问题,对于单笔转账额度,根据不同的应用场景,有不同的转账额度,默认为0.3元,但可以调整,最低可设置0.1元。

图片

商户号单日转账额度最高为10万元,如果有更高的需求,可以调整最高到100万元。单日向单个用户最高限制可转2万元,这个无法提高。

图片

您的一键三连,是我更新的最大动力,谢谢

山水有相逢,来日皆可期,谢谢阅读,我们再会

我手中的金箍棒,上能通天,下能探海

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。