商户付款申请(settle.remit.api.payment)

付款异步通知公钥

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqIh4dbuxTOA63kTTQDNa6wOvbqAe28N/zd4e1c913Fc1F16 vKQ/vaxpeocYf7yBnuEyQZoEkBOoQQcLeTLXvyTSyvz4wLcqwmlvIhH37pFs+MLWb/ovZ3nbd1L15RNpGNR59pnUSwS KkjwsbgtFng/ptMWZwUkv11egs+2UjpsltHtaEkw/w2Ai0N8JZTqaFdCnqZGkht4CSVQKOMZrAeF4AD1Siwfk0PqsFG QeJh1/iMdEA7+6P/s2K+OZjT0833nsM5MSoPOHJO4Y3mA+95KFLt30icJGNXm2U/jN4ykD6HPG4X0G8J2g8SuhB86YI OeSQB53afArB2ayfievz5QIDAQAB

简要描述

商户调用此接口给灵活用工人员付款,如请求接口网络异常或报错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 - 包含的业务参数为下表参数
biz_content包含以下参数:
参数名 类型 是否必填 最大长度 参数含义 参数描述值
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 未开通付款至支付宝 订单不受理,可线下联系运营处理