商户调用此接口给灵活用工人员付款,如请求接口网络异常或报错9999,建议查询以后或者原订单号重新发起付款,以防重复付款。
参数名 | 类型 | 是否必填 | 最大长度 | 参数含义 | 参数说明 |
---|---|---|---|---|---|
custBatchNo | String | 是 | 32 | 商户批次号 | 自定义批次号 |
batchNum | Int | 是 | 10 | 批次总笔数 | 不超过500,与明细笔数对应 |
batchAmt | BigDecimal | 是 | 18,2 | 批次总金额 | 保留两位小数,与明细总金额对应 |
serverCallbackUrl | String | 是 | 256 | 付款结果异步通知地址 | 服务器通知地址 |
remitDetailList | Array | 是 | - | 付款明细列表 | 明细参数如下 |
recvType | String | 否 | 10 | 付款类型 | 同一批次不支持多种付款类型的订单。不填写默认付款到银行卡(BANK),支付宝为(ALIPAY),微信钱包(WECHATPAY),对接微信需单独提供业务资料微信审核,详情咨询技术支持 |
参数名 | 类型 | 是否必填 | 最大长度 | 参数含义 | 参数说明 |
---|---|---|---|---|---|
custOrderNo | String | 是 | 32 | 商户订单号 | 自定义订单号需唯一 |
recvCustName | String | 是 | 32 | 收款者姓名 | |
recvMobile | String | 是 | 11 | 收款者手机号 | |
recvIdType | String | 是 | 32 | 收款者证件类型 | IDENTITY(居民身份证) |
recvIdNo | String | 是 | 18 | 收款整证件号 | |
recvCardNo | String | 是 | 20 | 收款者账号 | 如果是银行卡:传银行卡号; 支付宝:支付宝账号; 微信:公众号或小程序等对应的openID |
recvBankName | String | 是 | 18 | 收款银行 | 银行卡:不校验可传简称,比如北京银行; 支付宝:传“支付宝”; 微信钱包:传“微信钱包” |
remark | String | 否 | 128 | 付款备注 | 根据个人收款行不同,显示的内容略有差别 |
orderAmt | BigDecimal | 是 | 18,2 | 付款金额 | 个人实际收到金额,付款单笔最低限额:银行卡0.01元,支付宝0.1元,微信0.3元 |
RemitBatchRequestDTO remitBatchRequestDTO = new RemitBatchRequestDTO();
remitBatchRequestDTO.setCustBatchNo(UUID.randomUUID().toString().replace("-",""));//批次号
remitBatchRequestDTO.setBatchNum(1);//批次笔数
//new BigDecimal 时请写string类型 防止精度丢失
remitBatchRequestDTO.setBatchAmt(new BigDecimal("0.01"));//批次金额
remitBatchRequestDTO.setServerCallbackUrl("http://39.97.110.167/sop/callBack");//回调地址
//构建明细参数
List list = new ArrayList<>();
RemitDetailRequestDTO detail_1 = new RemitDetailRequestDTO();;
String cust_1 = UUID.randomUUID().toString().replace("-","");
System.out.println("cust_1 : "+cust_1);
detail_1.setCustOrderNo(cust_1);//明细订单号
System.out.println("cust_1 : "+cust_1);
//new BigDecimal 时请写string类型 防止精度丢失
detail_1.setOrderAmt(new BigDecimal("0.01"));//付款金额
detail_1.setRecvCustName("测试");//收款人姓名
detail_1.setRecvMobile("15652709003");//收款人手机号
// 收款人证件类型 收款人证件类型,IDENTITY(居民身份证),HOME_VISITING(港澳居民往来内地通行证),
// TAIWAN_ID(台胞证),PASSPORT(护照)
detail_1.setRecvIdType("IDENTITY");
detail_1.setRecvIdNo("130503199204100916");//收款人证件号
detail_1.setRecvCardNo("6227000013010417620");//收款人卡号
detail_1.setRecvBankName("ccb");//收款银行名称
detail_1.setrecvType("BANK");//付款帐户类型,默认银行卡(BANK),可填支付宝(ALIPAY),易宝钱包(YPWLT)
list.add(detail_1);
参数名 | 类型 | 是否必填 | 最大长度 | 参数含义 | 参数说明 |
---|---|---|---|---|---|
custBatchNo | String | 是 | 32 | 商户批次号 | 同请求 |
platBatchNo | String | 是 | 64 | 云享平台批次号 | 平台每次根据请求的商户批次号生成的平台批次号 |
recvType | String | 是 | 19 | 付款类型,银行(BANK)、支付宝(ALIPAY) | 同请求 |
batchAmt | BigDecimal | 是 | 16 | 付款金额 | 单位元保留两位小数 |
batchServFeeAmt | BigDecimal | 是 | 16 | 服务费金额 | 单位元保留两位小数 |
totalDeduction | BigDecimal | 是 | 32 | 总扣款金额 | 付款金额+服务费 |
batchStatus | Int | 是 | 64 | 批次状态 | 0-初始 |
code | String | 是 | - | 返回码,请参考返回码列表 | 见错误码秒 |
message | String | 是 | 64 | 返回码的详细说明 | 见错误码秒 |
参数名 | 类型 | 是否必填 | 最大长度 | 参数含义 | 参数描述值 |
---|---|---|---|---|---|
method | String | 是 | 128 | 接口名称 | settle.remit.api.payment |
sign_type | String | 是 | 10 | 商户生成签名算法类型 | RSA2 |
timestamp | String | 是 | 19 | 请求时间 | 2014-07-24 03:07:50 |
version | String | 是 | 3 | 接口版本号 | 1.0 |
merchant_request_no | String | 是 | 64 | 请求唯一标识 | 商户自定义 |
biz_content | String | 是 | - | 包含的业务参数为下表参数 |
参数名 | 类型 | 是否必填 | 最大长度 | 参数含义 | 参数描述值 |
---|---|---|---|---|---|
custBatchNo | String | 是 | 32 | 商户批次号 | 同请求 |
platBatchNo | String | 是 | 64 | 云享平台批次号 | 平台批次号 |
recvType | String | 是 | 19 | 付款账户类型,银行(BANK) 支付宝(ALIPAY) 微信钱包(WECHATPAY) |
同请求 |
batchAmt | BigDecimal | 是 | 16 | 付款金额,保留两位小数 | 批次付款金额 |
batchServFeeAmt | BigDecimal | 是 | 16 | 服务费金额,保留两位小数 | 服务费 |
totalDeduction | BigDecimal | 是 | 32 | 总扣款金额,保留两位小数 | 付款金额+服务费 |
batchStatus | Int | 是 | 64 | 1成功;2-失败;7部分失败;10-订单超时 | 批次状态 |
failList | String | 是 | - | 失败明细如下 | 仅当批次状态等于2或7时,存在失败明细 |
参数名 | 类型 | 是否必填 | 最大长度 | 参数含义 | 参数说明 |
---|---|---|---|---|---|
custOrderNo | String | 是 | 32 | 商户订单号 | 自定义订单号需唯一 |
recvCustName | String | 是 | 32 | 收款者姓名 | |
platOrderNo | String | 否 | 64 | 平台订单号 | 云享订单号 |
orderAmt | BigDecimal | 是 | 18,2 | 付款金额 | |
orderStatus | Int | 是 | 付款明细状态 | 2-失败;5-取消; | |
errorMsg | String | 是 | - | 失败原因 | 付款失败原因 |
biz_content='{"custBatchNo":"201819011515145155615","totalDeduction":0.11,'+
'"batchTotalAgentFeeAmt":0.00,"batchServFeeAmt":0.01,"batchAmt":0.10,"batchStatus":1,'+
'"platBatchNo":"110201910216218913801703479"}&method=callBack&sign=PScyv8ulqCgxdW3aM5m+'+
'nlTKn0V69QHaRQWiD+xNkNhsEcPCf+j9slSqS49UF0qrhT6L5+AtR6G2ttFaNYNiceyWaQI/YyLnLx0+za3Fg8m'+
'RaTY+iFXmrGFc1L5z/+3ker4pj2RiChXPMwU7JaNmZQFNI90fwSnvff7t2qhcMtQZYZCKWkRNER64f0eK02Lyev'+
'UaW08mKp9uB8+Fe2As7JbWSOZIwkq5ltsD0DERLQ9r52zZHnw2avYtJ8ub5uzzsuVt3dGl8WztgWL5mqoqDW2Or7'+
'sTJnen4alAHYMjzZ2DnXtZkcposM7IctZ7eV0hG/lr5jOg7qw9bX0jJOe7sw==&merchant_request_no=597fc'+
'84603404a69b3212f1ddf3c1df4&sign_type=RSA2&version=1.0×tamp=2019-10-21'
1、筛选并排序 所有参数(不含sign字段,尤其需要注意不包含返回值为空的字段)升序排序。即按照第一个字符的键值ASCII码递增排序(字母升序排序),如果遇到相同字符则按照第二个字符的键值ASCII码递增排序,以此类推。 2、拼接参数 排序后的参数和对应值,组合成“参数=参数值”的格式,然后把这些参数用&字符连接起来,例如:app_id = 10210715580801&merchant_request_no=001,此时生成的字符串为待签名字符串。biz_content对应的value不需要排序。 3、调用签名函数 使用java对应的SHA256WithRSA(对应sign_type为RSA2)签名函数,利用公钥对待签名字符串进行验签。 4、请求格式 application/x-www-form-urlencoded 5、通知 商户收到异步通知后,返回success(不区分大小写),则只推送一次;否则总共推送三次,三次后不再重复通知,需要通过商户付款订单查询接口主动发起查询获取。 订单状态:
批次状态 | 描述 |
---|---|
0 | 初始状态,需继续查询 |
1 | 成功 |
2 | 失败 |
7 | 部分失败 |
10 | 订单超时 |
其他状态 | 处理中,需要查询到1,2,7,10等状态 |
明细状态 | 描述 |
---|---|
0 | 初始状态,需继续查询 |
1 | 成功 |
2 | 失败 |
10 | 订单超时(可按失败处理) |
其他状态 | 处理中,需要查询到1,2,10等状态 |
错误码 | 错误码描述 | 错误码具体描述 |
---|---|---|
0000 | 成功 | 受理成功,可以通过调用“商户付款订单查询”接口获取订单终态 |
0001 | 参数为空或格式错误 | 参数错误或者批次号已存在,订单不能置为失败,需要通过“商户付款订单查询” 接口获取订单终态或者进行原单号重试,或联系我方技术支持进行处理 |
9999 | 系统异常 | 代表受理异常,订单受理状态未知,不能置为失败,需要通过“商户付款订单查询” 接口获取订单终态或者进行原单号重试,或联系我方技术支持进行处理 |
9001 | 账户不存 | 订单可以置为失败 |
9002 | 账户余额不足 | 订单可以置为失败 |
5003 | 超过限额 | 订单可以置为失败 |
0010 | 客户状态非法 | 订单可以置为失败,线下联系运营进行商户状态确认 |
5001 | 限额配置错误 | 商户限额配置错误,可线下联系运营确认 |
9005 | 未开通付款至支付宝 | 订单不受理,可线下联系运营处理 |