A0018、A0001 和 C0005。它们看起来很像——
一个错误码、一句简短消息、没有细节——但需要完全不同的应对。本页就是
决策树。逐错误码的参考是已发布的
错误码列表;每个错误码的
机制在
常见错误排障和
限额、币种与配置错误中。
我看到的是哪一种?
第一个字母是最快的分流依据:
A 由你修复,C 在 Waffo 或
支付方式一侧,E 表示未确定。绝不要把 E 当作失败——规则和
重试模式在已发布的
错误处理中。
A0018 是”尚未开通”,还是我传错了什么?
两者都有可能,这正是问题的关键。A0018 不是指”你指定的支付方式
没有签约”。它的意思是你签约的内容中没有任何一项在整个请求下存活,
而请求会同时在多个维度上收窄候选项。其中任何一个都可能把集合
清空,而它们全部返回同一个错误码和同一条消息。
按以下顺序逐一排查——你找到的第一个不匹配就是答案:
所以:未开通和传错是通过排除法而不是错误码来区分的。 最快的
区分方法:
- 调用
/api/v1/paymethodconfig/inquiry。如果方式、国家和币种的组合不在 响应中,那就是配置问题——你在载荷中改任何东西都没用。 - 如果它在响应中且可用性为”available”,则该组合已签约, 拒绝来自请求本身添加的某些内容——上面第 1、6、7、8、9 行之一。 逐个移除可选的收窄参数并重试。
A0018 相邻,含义与缺少合同相反——它们表示你有
不止一个匹配,必须指定明确:A0022(指明产品)和 A0033(指明
支付方式国家)。
为什么不支持的币种没有自己的错误码?
因为币种是上述维度之一,不是单独的检查。你未签约的订单币种或 币种对会以A0018 返回,带支付方式的措辞。不要
等待一个币种专属的错误码——参见
使用某个币种前我必须先开通它吗?。
同一个错误码出现在订阅上,含义一样吗?
错误码共用但解读不同。在收单侧它是上述合同不匹配。 在订阅侧它表示没有可用的支付方式来向该 订阅者扣款——例如已保存的方式被移除了。已发布的错误码列表按 第二种方式解释;而你收到的消息文本是合同措辞。请结合你调用的 API 一起解读。 值得为之构建的一个后果:在首个周期之后的续订上,此错误码被视为 不可重试——调度不会继续尝试。请修复支付方式,而不是等待 重试。参见 订阅重试与支付方式。我轮换了密钥,现在收到 A0001。新密钥坏了吗?
通常不是。按顺序排除三件事:
该窗口有多长、密钥、其范围、签名和你的 IP
白名单的精确检查顺序,以及
A0001 与 A0002 和范围拒绝的区别,在
API 凭据范围与鉴权错误分流中。
提交和轮换流程,以及在哪里查看提交被拒绝的原因,在
生产 API 密钥与公钥中。
如果密钥被接受但调用仍被拒绝,原因通常是该密钥
被允许做什么——那是另一种拒绝,不是 A0001。
C0005 到底告诉我什么,原因在哪里?
C0005——Payment channel rejection——表示支付方式拒绝了支付。就其本身而言
它几乎什么都没告诉你,因为它是大量底层拒绝所映射到的错误码,
包括每一次卡被拒绝。
细节在随订单返回的失败原因中,它有两部分:
它们作为
orderFailedReason 一起出现在
订单查询中,Portal 在交易
记录上以 Order Failure Code 和 Order Failure Description 显示同一对字段——参见
交易字段参考。
所以常规做法是:绝不要基于 C0005 分支;基于其中的失败码分支。 诸如
无法启动的认证步骤、或发卡行因欺诈或法律原因拒绝的卡,
正是通过这种方式到达的信息,它们需要
截然不同的处理。
哪些 C0005 失败值得重试?
可重试性属于底层原因,而不是 C0005。分类以及每一类
该怎么做——包括哪些拒绝绝不能重试、哪些需要顾客
重新输入凭据——在
卡被拒绝了,我应该重试吗?中。
在此之上的两条规则:
- 向顾客显示可用的消息并提供另一种支付方式。 Waffo 在集成验收时 会针对渠道拒绝和系统不可用响应精确检查这一行为—— 参见已发布的 验收标准。
- 在沙箱中,若干保留金额会故意返回
C0005,以便你构建该路径。如果 你在一个你没预料到有特殊含义的金额上收到C0005,请在下结论前先检查保留列表——参见 沙箱模拟器。
退款返回了 A0017。那笔订单还能通过 API 退款吗?
A0017——订单无法退款,因为支付渠道不支持——来自
支付方式本身,并且不可重试。原样再发一次会得到
同样的答案。
在把它视为最终结果之前,先把它与其他退款拒绝区分开:
这四种情形及各自的处理办法,在
支付方式退款与限额和
退款 FAQ中。