微信支付 企业付款到银行卡开发过程
1. 业务背景
微信支付付款到指定银行卡。商户可以将商户号余额付款至指定的收款银行账户。通过指定收款银行账户户名、卡号,以及收款银行信息即可实现付款。
注意事项:
企业付款至银行卡只支持新资金流类型账户
目前企业付款到银行卡支持17家银行,更多银行逐步开放中
付款到账实效为1-3日,最快次日到账
每笔按付款金额收取手续费,按金额0.1%收取,最低1元,最高25元,
如果商户开通了运营账户,手续费和付款的金额都从运营账户出。如果没有开通,则都从基本户出。
每个商户号每天可以出款100万,单商户给同一银行卡付款每天限额5万
发票:在账户中心-发票信息页面申请开票的商户会按月收到发票(已申请的无需重复申请)。
企业付款到银行卡发票与交易手续费发票为拆分单独开具。
2. 支持银行
| 银行名称 | 银行Id |
|---|---|
| 工商银行 | 1002 |
| 农业银行 | 1005 |
| 中国银行 | 1026 |
| 建设银行 | 1003 |
| 招商银行 | 1001 |
| 邮储银行 | 1066 |
| 交通银行 | 1020 |
| 浦发银行 | 1004 |
| 民生银行 | 1006 |
| 兴业银行 | 1009 |
| 平安银行 | 1010 |
| 中信银行 | 1021 |
| 华夏银行 | 1025 |
| 广发银行 | 1027 |
| 光大银行 | 1022 |
| 北京银行 | 1032 |
| 宁波银行 | 1056 |
3. 微信接口文档
4. 企业付款到银行卡API加密
在付款到指定银行卡的接口中,“收款方银行卡号” 与 “收款方用户名” 必须使用微信请求回来的RSA公钥加密,密文提交数据到接口,中间涉及到RSA加密问题
获取微信RSA加密公钥
请求得到报文:
123456789101112131415<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg><result_code><![CDATA[SUCCESS]]></result_code><mch_id><![CDATA[微信商户号]]></mch_id><pub_key><![CDATA[-----BEGIN RSA PUBLIC KEY-----MIIBCgKCAQEAxJcg631t+6ev+K5fWWX+S96OIrCiR3cDCsn0izbmcc7hTUwOKP50oaFCFzDEfh1Vkt9fEoyvyqbwbJFUJlTWlQrTYi2DdzOSyYA5XR7PiCtCJO+zeJ2x6lHeW+xS5w+PGR3FGWbqdubtFOk5WdRKWBW0Mk2ghfThn9n8QI9aMUurkr/XFoExrzeJNWbPrrl69CgdaoCq4p/CW2z8A/oXuEdBIsP75e7sDBFH+SfvY5dDZptIslahrOL544CGctLRy4tsqhesXBlz+Rt/crBmfKPbbxNSIZlp9wNRuqK+cBuHBkBFaNYmR2NdZOPbymjwTPWLiNjqiCa5d/ff4RX8XwIDAQAB-----END RSA PUBLIC KEY-----]]></pub_key></xml>得到的公钥
为PKcs#1的格式,在使用对接过程中,java使用PKcs#8 格式公钥,Csharp同样也可以使用PKcs#8格式的公钥进行加密。注意在:用标准的RSA加密库对敏感信息进行加密,选择RSA_PKCS1_OAEP_PADDING填充模式 (eg:Java的填充方式要选 “ RSA/ECB/OAEPWITHSHA-1ANDMGF1PADDING”) ,而在Csharp中没有对应的填充方式,进而造成接口返回“解密真实姓名或银行卡号出错”。 转换RSA公钥格式PKcs#1 到Pkcs#8方法
有几点原因会造成转换失败:
- 请求得到的公钥不能改动格式,不能移除/n /r 等换行符
- 在Windows保存.pem 格式,会保存ANSI格式(应为UFT-8无BOM格式)
使用CentOS转换如下:

使用CShap代码使用PKcs#8格式公钥加密字段
引用 Nuget包:Install-Package BouncyCastle -Version 1.8.2
实例代码:
|
|
5. 参考链接
- C#使用私钥进行RSA加密(https://blog.csdn.net/theodore26/article/details/50331049)
- .netcore支付宝支付,微信支付(http://www.cnblogs.com/AsprosL/p/7661480.html)
6. 赞助
