切换主题
订单重新结算
概述
用于对自动提现失败的虚拟银行订单重新发起结算。该接口不会创建新的业务订单,只会重试原订单关联的失败提现记录。
接口说明
| 项目 | 说明 |
|---|---|
| 接口名称 | 订单重新结算 |
| 请求方式 | POST |
| 正式地址 | https://pay.rscygroup.com/api/open/virtualBank/order/settle |
| 沙箱地址 | https://pay-test.rscygroup.com/api/open/virtualBank/order/settle |
| 接口版本 | 1.0 |
| 鉴权方式 | 支持 API Key 和应用 appId 两种模式;请求携带 apiKey 时优先使用 API Key 模式 |
| Content-Type | application/json |
TIP
💡 调用前提 • 原虚拟银行子订单必须为转账成功状态。 • 原订单必须存在自动提现记录,且该提现记录当前状态为失败。 • 提现账户必须属于当前商户并处于可用状态。 • 同一笔失败记录只能被一个请求成功抢占重试,请勿并发重复提交。
请求参数
公共请求参数及签名规则参见 签名规则说明。bizData 必须作为 JSON 字符串参与签名。
| 变量名 | 类型 | 必填 | 示例值 | 说明 |
|---|---|---|---|---|
| orderNo | String | 条件必填 | AP<DEMO_ID> | 平台子订单号;与 outOrderNo 二选一,不能同时传入 |
| outOrderNo | String | 条件必填 | ITEM<DEMO_ID> | 商户子订单号;与 orderNo 二选一,不能同时传入 |
| remark | String | 是 | 重新结算 | 结算备注;系统会过滤特殊字符,过滤后不能为空,UTF-8 编码长度不能超过 32 字节 |
| recvAcctName | String | 否 | 示例企业 | 不传默认使用开户绑定的卡,如果需要传入其他结算卡请先绑定结算卡白名单 |
| recvAcctNo | String | 否 | 622202******1234 | 本次重试使用的收款银行卡号;不修改时可不传 不传默认使用开户绑定的卡 如果需要传入其他结算卡请先绑定结算卡白名单 |
reqId:每次请求必须唯一,最大 40 位;相同流水号在 10 分钟内不能重复使用。
reqTime:格式为 yyyyMMddHHmmss,与服务器时间差不能超过 10 秒。
version:固定为 1.0。
signType:API Key 模式仅支持 MD5;appId 模式支持 MD5 或 RSA2。
请求示例
json
{
"reqId": "ORDERSETTLE<DEMO_ID>",
"reqTime": "<DEMO_ID>",
"version": "1.0",
"signType": "MD5",
"apiKey": "YOUR_API_KEY",
"bizData": "{\"outOrderNo\":\"ITEM<DEMO_ID>\",\"remark\":\"重新结算\"}",
"sign": "<按签名规则生成>"
}bash
curl -X POST "https://pay.rscygroup.com/api/open/virtualBank/order/settle" \
-H "Content-Type: application/json" \
-d '{
"reqId": "ORDERSETTLE<DEMO_ID>",
"reqTime": "<DEMO_ID>",
"version": "1.0",
"signType": "MD5",
"apiKey": "<CONFIGURED_VALUE>",
"bizData": "{\"outOrderNo\":\"ITEM<DEMO_ID>\",\"remark\":\"重新结算\"}",
"sign": "<按签名规则生成>"
}'API Key + MD5:
text
apiKey=YOUR_API_KEY&bizData={"outOrderNo":"ITEM<DEMO_ID>","remark":"重新结算"}&reqId=ORDERSETTLE<DEMO_ID>&reqTime=<DEMO_ID>&signType=MD5&version=1.0&apiSecret=YOUR_API_SECRETappId + MD5:将签名原文中的 apiKey 替换为 appId,末尾使用 appSecret。RSA2 模式不在原文末尾追加密钥。
响应参数
公共响应中的 bizData 是 JSON 字符串。响应包含 sign 时,应先验签再解析业务数据。
| 变量名 | 类型 | 示例值 | 说明 |
|---|---|---|---|
| orderNo | String | AP<DEMO_ID> | 平台订单号 |
| outOrderNo | String | ITEM<DEMO_ID> | 商户订单号 |
| state | String | PROCESSING | 业务状态,常见值:PROCESSING、SUCCESS、FAIL |
| note | String | 渠道处理中 | 渠道或业务处理说明;失败时重点关注该字段 |
| amount | Long | 1000 | 提现金额,单位:分 |
| fee | Long | 0 | 手续费,单位:分 |
| realAmount | Long | 1000 | 实际到账金额,单位:分 |
| acctNo | String | VA<DEMO_ID> | 提现虚拟账户号 |
| feeType | String | ORDER | 手续费扣费方式:ORDER 为订单内扣,ACCOUNT 为账户外扣 |
| payerName | String | 示例企业 | 付款账户名称 |
| payerBankAcctNo | String | 622202******1234 | 付款银行账户号 |
json
{
"code": "000000",
"msg": "请求成功",
"timestamp": "<DEMO_ID>",
"signType": "MD5",
"sign": "<平台响应签名>",
"bizData": "{\"acctNo\":\"VA<DEMO_ID>\",\"amount\":1000,\"fee\":0,\"feeType\":\"ORDER\",\"orderNo\":\"AP<DEMO_ID>\",\"outOrderNo\":\"ITEM<DEMO_ID>\",\"payerBankAcctNo\":\"622202******1234\",\"payerName\":\"示例企业\",\"realAmount\":1000,\"state\":\"PROCESSING\"}"
}结果判定
公共状态:code=000000 仅表示接口请求已成功处理,不代表提现已经最终成功。
业务处理中:bizData.state=PROCESSING 表示渠道处理中,平台会继续异步查询结果。
业务成功:bizData.state=SUCCESS 表示重新结算成功。
业务失败:bizData.state=FAIL 表示重新结算失败,应结合 note 排查原因。
响应未知:网络超时或未收到明确响应时,不要立即重复提交,应先查询订单状态或在平台后台核实。
常见错误
| 错误提示 | 处理建议 |
|---|---|
| 平台订单号和商户订单号参数不能同时为空 | 传入 orderNo 或 outOrderNo,且只传其中一个 |
| 当前订单不是转账成功状态,无法发起提现 | 确认原虚拟银行子订单已经转账成功 |
| 当前订单类型不支持该操作 | 该接口只支持自动提现类型的失败记录 |
| 只能操作到账状态为失败的订单 | 确认关联提现记录当前为失败状态 |
| 订单状态已变化,请勿重复提交 | 已有请求正在处理或状态已更新,请勿并发重试 |
| 结算备注长度不允许超过32个字节 | 按 UTF-8 字节长度缩短 remark,中文通常占 3 个字节 |
接入注意事项
该接口是失败重试接口,正常提现应调用“登记簿提现”接口。
每次重试必须生成新的 reqId 和当前时间 reqTime。
签名必须使用请求体中完全一致的 bizData 字符串,字段顺序、空格和转义变化都会影响验签。
不要仅根据 HTTP 200 或公共返回码判断资金结果,必须检查 bizData.state。
