前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >对接微信付款到银行卡来实现资金提现功能

对接微信付款到银行卡来实现资金提现功能

原创
作者头像
悟空码字
发布2023-05-26 16:42:09
1.3K1
发布2023-05-26 16:42:09
举报

大家好,我是小悟

使用场景

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

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

以前可以直接去微信支付商户平台开通企业付款到银行卡产品,可以将商户号余额付款至指定的收款银行账户。通过指定收款银行账户户名、卡号,以及收款银行信息即可实现付款来实现这个功能。

但随着微信支付下线了这个产品,准确来说,现在是要主动联系微信支付申请签约这个产品,才有权限调用接口。

企业付款到银行卡主要也是解决多种行业商家在其平台内存在佣金报酬、员工福利发放、费用报销或行政补贴支付等场景下,平台内的用户资金提现时面临的主要问题。

方便快捷

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

当发起接口转账后,微信支付官方提供安全保障。而对用户来说最重要的是,都希望提现资金能够实时到账,付款到账时效为1-3日,最快次日到账,但最终到账时效要以银行机构为准。

功能实现

实现功能前需要先联系微信支付申请签约这个产品,开通了才可以调用。

微信支付付款到银行卡使用的是V2接口,调用/mmpaysptrans/pay_bank,实现转账功能。

代码语言:javascript
复制
public void payBank() {
  Map<String, String> result = new HashMap<String, String>();    
  SortedMap<Object, Object> parameters = new TreeMap<Object, Object>();
  parameters.put("mch_id", "商户号");
  parameters.put("partner_trade_no", "商户付款单号");
  parameters.put("nonce_str", "随机字符串");
  parameters.put("enc_bank_no", "收款方银行卡号,需要加密");
  parameters.put("enc_true_name", "收款方用户名,需要加密");
  parameters.put("bank_code", "收款方开户行编号");
  parameters.put("amount", "付款金额,单位分,大于0的整数");
  parameters.put("desc", "付款到银行卡付款说明,即订单备注");
  String sign = PayUtils.createSign("UTF-8", parameters, "api密钥");
  parameters.put("sign", sign);
  String requestXML = PayUtils.getRequestXml(parameters);
  logger.info("微信企业付款到银行卡请求参数============:" + requestXML);
  try {
    KeyStore keyStore = KeyStore.getInstance("PKCS12");
    FileInputStream instream = new FileInputStream(new File("apiclient_cert.p12证书路径"));
    try {
      keyStore.load(instream, "商户号".toCharArray());
    } finally {
      instream.close();
    }
    SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, "商户号".toCharArray()).build();
    SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" },
        null, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
    CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
    HttpPost httpost = HttpClientConnectionManager.getPostMethod("https://api.mch.weixin.qq.com/mmpaysptrans/pay_bank");
    httpost.setEntity(new StringEntity(requestXML, "UTF-8"));
    HttpResponse weixinResponse = httpClient.execute(httpost);
    String result = EntityUtils.toString(weixinResponse.getEntity(), "UTF-8");
    logger.info("微信企业付款到银行卡返回结果"+result);
    Map<String, String> map = XMLUtils.doXMLParse(result);
    if ("success".equalsIgnoreCase((String) map.get("return_code"))) {
      logger.info("微信企业付款到银行卡成功");
    } else {
      logger.info("微信企业付款到银行卡失败");
    }
  } catch (Exception e) {
    logger.info("微信企业付款到银行卡失败");
  }
}

注意事项

值得注意的是,目前准入条件需要商户号已入驻90日,且截止今日商户号需要保持连续不间断的交易30天。

目前付款到银行卡支持17家银行,且是付款到个人银行卡,微信支付的付款到银行卡需要每笔按付款金额0.1%收取手续费,最低1元,最高25元。

出资账户根据商户是否开通了运营账户而有所不同,如果开通了,手续费和付款的金额都从运营账户出。反之,则都从基本账户出。

资金由商户号转出来的基本都需要使用证书,就是从微信支付商户平台下载的那个api证书,apiclient_cert.pem和apiclient_key.pem两个证书是在PHP环境中使用,apiclient_cert.p12是商户证书文件,除PHP外的开发均使用此证书文件。收款方银行卡号和收款方用户名必须先采用标准RSA公钥加密后再传入。

转账额度

涉及到转账,自然就有限额的问题,每个商户号单日最高转账10万元,单次转账限额2万元,每个商户号每天付款给同一银行卡的限额为2万元。

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

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用场景
  • 方便快捷
  • 注意事项
  • 转账额度
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档