一、首先开通微信支付,在微信支付商户平台,产品中心,找到商家转账到零钱
开通条件:入账方式为即时入账至商户号,结算周期为T+1的商户,需满足三个条件:1)入驻满90天,2)连续正常交易30天,3)保持正常健康交易。其余结算周期的商户无90天/30天开通限制,但仍需保持正常健康交易。
注意:连续正常交易30天,不含退款的订单。
开通后,进行设置,设置方式如下:
1.直连模式免密设置:
商户平台-产品中心-商家转账到零钱-产品设置
2.服务商模式免密设置:
①不含资金授权:服务商平台-产品中心-服务商批量转账到零钱-产品设置
②资金授权:商户平台-产品中心-商家转账到零钱-产品设置
准备工作:微信支付商户平台-->账户中心-->账户设置-->API安全-->申请API证书并设置APIv3密钥
安全证书和APIv3密钥申请:
1)申请API安全证书
2)APIv3密钥设置
二、接口说明(商家转账到零钱-文档中心-微信支付商户平台)
适用对象:直连商户
请求URL:https://api.mch.weixin.qq.com/v3/transfer/batches
请求方式:POST
接口限频: 单个商户 50QPS,如果超过频率限制,会报错FREQUENCY_LIMITED,请降低频率请求。
是否需要证书:是
请求参数
参数名 | 变量 | 类型[长度限制] | 必填 | 描述 | ||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
直连商户的appid | appid | string[1,32] | 是 | body申请商户号的appid或商户号绑定的appid(企业号corpid即为此appid) 示例值:wxf636efh567hg4356 | ||||||||||||||||||||||||||||||
商家批次单号 | out_batch_no | string[1,32] | 是 | body商户系统内部的商家批次单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一 示例值:plfk2020042013 | ||||||||||||||||||||||||||||||
批次名称 | batch_name | string[1,32] | 是 | body该笔批量转账的名称 示例值:2019年1月深圳分部报销单 | ||||||||||||||||||||||||||||||
批次备注 | batch_remark | string[1,32] | 是 | body转账说明,UTF8编码,最多允许32个字符 示例值:2019年1月深圳分部报销单 | ||||||||||||||||||||||||||||||
转账总金额 | total_amount | int | 是 | body转账金额单位为“分”。转账总金额必须与批次内所有明细转账金额之和保持一致,否则无法发起转账操作 示例值:4000000 | ||||||||||||||||||||||||||||||
转账总笔数 | total_num | int | 是 | body一个转账批次单最多发起三千笔转账。转账总笔数必须与批次内所有明细之和保持一致,否则无法发起转账操作 示例值:200 | ||||||||||||||||||||||||||||||
-转账明细列表 | transfer_detail_list | array | 是 | body发起批量转账的明细列表,最多三千笔 | ||||||||||||||||||||||||||||||
|
请求示例
- JSON
{
"appid": "wxf636efh567hg4356",
"out_batch_no": "plfk2020042013",
"batch_name": "2019年1月深圳分部报销单",
"batch_remark": "2019年1月深圳分部报销单",
"total_amount": 4000000,
"total_num": 200,
"transfer_detail_list": [
{
"out_detail_no": "x23zy545Bd5436",
"transfer_amount": 200000,
"transfer_remark": "2020年4月报销",
"openid": "o-MYE42l80oelYMDE34nYD456Xoy",
"user_name": "757b340b45ebef5467rter35gf464344v3542sdf4t6re4tb4f54ty45t4yyry45"
}
]
}
!!!特别注意!!!参数名字一定要检查,确保无误,要不一定会报错
SortedDictionary dic = new SortedDictionary();
dic.Add("appid", appid);
dic.Add("out_batch_no", partnerTradeNo);
dic.Add("batch_name",DateTime.Now.ToString("D")+"提现记录");
dic.Add("batch_remark", DateTime.Now.ToString("D") + "提现记录");
dic.Add("total_amount",totalFee);
dic.Add("total_num", 1);
Log.Info("开始申请商户转账到零钱,参数1", Newtonsoft.Json.JsonConvert.SerializeObject(dic));
List list = new List();
SortedDictionary dic1 = new SortedDictionary();
dic1.Add("out_detail_no", partnerTradeNo);
dic1.Add("transfer_amount",totalFee);
dic1.Add("transfer_remark", "提现记录");
dic1.Add("openid", openID);
list.Add(dic1);
dic.Add("transfer_detail_list",list);
Log.Info("开始申请商户转账到零钱,参数2", Newtonsoft.Json.JsonConvert.SerializeObject(dic));
返回参数
参数名 | 变量 | 类型[长度限制] | 必填 | 描述 |
---|---|---|---|---|
商家批次单号 | out_batch_no | string[1,32] | 是 | 商户系统内部的商家批次单号 示例值:plfk2020042013 |
微信批次单号 | batch_id | string[1,64] | 是 | 微信批次单号,微信商家转账系统返回的唯一标识 示例值:1030000071100999991182020050700019480001 |
批次创建时间 | create_time | string[1,32] | 是 | 批次受理成功时返回,遵循rfc3339标准格式,格式为yyyy-MM-DDTHH:mm:ss.sss+TIMEZONE,yyyy-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss.sss表示时分秒毫秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35.120+08:00表示北京时间2015年05月20日13点29分35秒 示例值:2015-05-20T13:29:35.120+08:00 |
返回示例
- 正常示例
{
"out_batch_no": "plfk2020042013",
"batch_id": "1030000071100999991182020050700019480001",
"create_time": "2015-05-20T13:29:35.120+08:00"
}
后续将更新代码片段以及代码解读