错误码
代付接口 std1
三类结果
每个应答先看属于哪一类,再决定下一步:
| 类 | 意思 | 您该做什么 |
|---|---|---|
| A 本次未处理 | 本次请求未受理、未留记录,不说明该商户订单号此前是否已受理 | 修正后使用原商户订单号重新提交 |
| B 已拒绝 | 订单已拒绝(终态),该商户订单号已占用 | 如需代付,请使用新的商户订单号提交;原商户订单号重复提交返回相同的拒绝结果 |
| C 结果不明 | SYSTEM_BUSY,以及超时、断线、HTTP 不是 200、正文不是 JSON、验签不过、该带签名却没带 | 仅使用原商户订单号、原参数重试或查单,直到返回成功或 B 类结果 |
码表
| code | 类 | 出现在 | 带签名 | msg 原话 | 您该做什么 |
|---|---|---|---|---|---|
SUCCESS | — | 提代付、查代付、查余额 | 是 | — | 成功(提代付=已受理,不是已出款) |
PARAM_ERROR | A 本次未处理 | 提代付、查代付、查余额 | 部分 | 参数[…]不能指向内网地址参数[…]格式错误参数[…]缺失参数[…]重复请求体不能超过65536字节请求体必须是表单 | 参数缺失或格式不对、请求不是表单、正文太大。按 msg 改正,用原单号重发 |
MERCHANT_NOT_FOUND | A 本次未处理 | 提代付、查代付、查余额 | 否 | 商户不存在 | 商户号不对、没开通这个接口。核对商户号和接口地址 |
IP_NOT_ALLOWED | A 本次未处理 | 提代付、查代付、查余额 | 是 | IP[…]未授权 | 来源 IP 不在代付 IP 名单。把 msg 里的 IP 报给运营 |
SIGN_ERROR | A 本次未处理 | 提代付、查代付、查余额 | 是 | 签名错误 | 签名不对。核对签名串和密钥(密钥按文本用) |
RATE_LIMITED | A 本次未处理 | 提代付、查代付、查余额 | 是 | 请求过于频繁,请稍后重试 | 请求太频繁。稍等,用原单号重发 |
CURRENCY_NOT_SUPPORTED | A 本次未处理 | 提代付、查余额 | 是 | 不支持的币种 | 币种不是本平台收的。改正或不传,用原单号重发 |
ORDER_CONFIRM_FAILED | A 本次未处理 | 提代付 | 是 | 反查订单确认失败 | 开通了代付接口二次确认,受理时向您的确认地址反查本单没得到成功值(回了失败值、没答复或超时)。本次未处理、不占用商户订单号;核对后用原单号重新提交 |
MERCHANT_DISABLED | B 已拒绝 | 提代付、查代付 | 是 | 商户不可用或未开通代付商户未开通代付接口 | 商户不可用、没开通代付,或传的代付产品没开通、已关闭;「商户未开通代付接口」时不占用商户订单号,开通后可用原单号重新提交 |
PAYOUT_SUSPENDED | B 已拒绝 | 提代付、查代付 | 是 | 代付暂停受理 | 代付暂停受理 |
PAYEE_BLOCKED | B 已拒绝 | 提代付、查代付 | 是 | 交易受限 | 收款人受限 |
BANK_NOT_SUPPORTED | B 已拒绝 | 提代付、查代付 | 是 | 该银行暂不支持代付 | 这家银行暂不支持代付 |
ACCOUNT_NOT_SUPPORTED | B 已拒绝 | 提代付、查代付 | 是 | 收款账号类型或格式暂不支持代付 | 收款账号类型或格式暂不支持 |
AMOUNT_OUT_OF_RANGE | B 已拒绝 | 提代付、查代付 | 是 | 单笔金额不在可代付范围内 | 单笔金额不在可代付范围内 |
NO_AVAILABLE_CHANNEL | B 已拒绝 | 提代付、查代付 | 是 | 暂无可用代付通道 | 暂时没有可用的代付通道 |
INSUFFICIENT_BALANCE | B 已拒绝 | 提代付、查代付 | 是 | 可用余额不足 | 可用余额不足 |
ORDER_NO_CONFLICT | — | 提代付 | 是 | 商户单号已存在且参数不一致订单号重复 | 这个单号已有一笔,这次没执行、原单不受影响:参数和第一次不一样,或未开通代付接口时用已有单号提交(「订单号重复」)。先按这个单号查单;确实是另一笔代付,请使用新的商户订单号提交 |
ORDER_NOT_FOUND | — | 查代付 | 是 | 订单不存在 | 查不到这个单。不能据此认定没建单:申请可能还在路上 |
SYSTEM_BUSY | C 结果不明 | 提代付、查代付、查余额 | 部分 | 系统繁忙,结果以查单为准 | 系统繁忙,结果不明。用原单号、原参数重发或查单 |
- 码是字符串,一码一义。
msg是给人看的中文原话,方括号里的内容随请求变(参数名、IP),程序别拿msg做判断。 - 设计上不带签名的只有两种:
PARAM_ERROR(请求读不出来、缺商户号、正文太大时)和MERCHANT_NOT_FOUND。别的码没带签名,当 C 类处理。 - B 类的码查单时也会出现:查一笔被拒的单,回当初那个拒绝码。
- 两种不占用商户订单号的情形:
MERCHANT_DISABLED「商户未开通代付接口」(开通后可使用原商户订单号重新提交);ORDER_NO_CONFLICT「订单号重复」(未开通代付接口时提交了已存在的商户订单号,原订单不受影响,请按该订单号查单)。
代收接口 compat1(老协议)
老协议没有错误码,只有 retCode=FAIL 和一句 retMsg,原话和原来老系统一样。常见的:
| 接口 | retMsg 原话 | 原因 |
|---|---|---|
| 下单 | 请求参数[mchId]不能为空且为数值类型. | 商户号没传或不是数字 |
| 下单 | 商户不存在[mchId=…]. | 商户号不存在 |
| 下单 | 商户状态不可用[mchId=…]. | 商户被停用 |
| 下单 | IP[…]不允许访问 | 来源 IP 不在代收 IP 白名单 |
| 下单 | 参数中含有XSS符号! | 参数值里有 &、<、> 这类字符 |
| 下单 | 请求参数[…]不能为空. | 必填参数没传 |
| 下单 | 请求参数[…]长度不得大于…位. | 参数超长 |
| 下单 | 请求参数[notifyUrl]格式错误. | 回调地址第一个 ? 之前那一段不是 http、https 开头、带域名或 IP 的地址(原来老系统不查,现在查) |
| 下单 | 请求参数[notifyUrl]不能指向内网地址. | 回调地址写的是内网、本机这类 IP(127.0.0.1、10.x、192.168.x 等);回调只发往公网 |
| 下单 | 请求参数[amount]必须大于0. | 金额不大于 0 |
| 下单 | 该商户订单已存在[mchOrderNo=…] | 商户单号重复(不会返回原单) |
| 下单 | 验证签名不通过.正确签名结果:…,签名串参考:… | 签名不对;原话里会给出正确签名和签名串(密钥位写「替换商户私钥」) |
| 下单 | 交易受限 | 付款人受限 |
| 下单 | 商户没有该产品的支付通道[productId=…,mchId=…] | 没开通这个产品 |
| 下单 | 暂无可用支付通道,请稍后重试 | 暂时没有可用通道 |
| 下单 | 下单金额暂无可用支付通道,请稍后重试 | 这个金额暂时没有可用通道 |
| 下单 | 系统错误 | 系统错误,稍后再试 |
| 查单 | request params[mchId] error. | 商户号没传或不对 |
| 查单 | request params[mchOrderNo or payOrderId] error. | mchOrderNo、payOrderId 都没传 |
| 查单 | Verify XX pay sign failed. | 签名不对 |
| 查单 | 支付订单不存在 | 查不到这个单(切换到本平台之前下的单也是这句) |
| 查单 | 支付中心系统异常 | 系统异常,或参数里有 &、<、> 这类字符 |
| 查余额 | 参数[mchId]必填,且为数值类型.mchId=… | 商户号没传或不是数字 |
| 查余额 | 验证签名不通过. | 签名不对 |
| 查余额 | 商户账户不存在或冻结 | 商户资金账户不存在或被冻结 |
| 查余额 | 支付网关系统异常 | 系统异常 |
- 「…」是随请求变的部分(商户号、单号、参数名、长度)。
- 下单失败大多不带
sign;查单、查余额失败都不带。 - 查余额失败另有
errCode(固定0010)和errDes(一般和retMsg相同)。