Skip to main content
Waffo 的多个页面会写”参见字段要求表”或”参见错误码列表”。 这些表格统一收录在本页。本页是完整查询表;相邻的两个页面 从不同角度覆盖了同样的内容,通常读起来更快: 快速参考里唯一查不到的是一个错误码属于哪个 API 族 ——而有几个错误码在不同 API 族里含义不同。这就是下面的第一个问题。

同一个错误码在 Waffo 每个 API 上的含义都一样吗?

不一样。 错误码的数字部分是按 API 族划分的,不是全局的。尤其有三个错误码 是陷阱: 因此,/api/v1/payout/create 上的 A0013 表示你之前带该 payoutRequestId 的请求仍在处理中——请等待,然后先查询该请求,再重新提交;而 /api/v1/order/cancel 上的 A0013 是终态,不得重试。 务必按你所调用端点所属的 API 族来解读错误码。 前缀的含义在所有地方都是稳定的:A 商户相关,B 用户相关,C 系统相关,D 风控拒绝,E 未知(持续查询直到得到最终状态)。

Payout 时我必须传哪些收款人字段,哪些要放进 payoutMethodProperty?

字段要求是一个收款国家 × Payout 方式的矩阵,而不是 API 本身的属性。 正因为如此,规范中把 payeeFirstName、payeeMiddleName、payeeLastName 和 payeeIDType 声明为 conditional。 有两条身份规则写在矩阵之外的字段定义本身里: 对于其他所有通道,收款人字段由下游校验而非按国家规则校验, 所以请把你持有的信息全部传上。随着通道的接入,矩阵中会不断增加行 ——把它当作下限而不是上限,让拒绝结果告诉你到底缺了什么。

哪些字段应放在 payoutMethodProperty 里而不是顶层?

payoutMethodProperty 是一个 JSON 字符串(最长 512 个字符),不是对象,而且它是 唯一接受银行路由信息的地方: 收款人的账户标识本身不在 payoutMethodProperty 里——它是 payoutInfo.payoutMethodUserAccountNo,其格式取决于 payoutMethodType:BANK_ACCOUNT 为银行账号,EWALLET 为 钱包自身的账号或公开用户标识。payoutMethodName 在 EWALLET 时为钱包 名称,在 BANK_ACCOUNT 时为空。 创建 / 查询 / 通知循环本身请参见 Payout FAQ。

Payout 的 purpose 可以取哪些值?

/api/v1/payout/create 上的 purpose 在向中国大陆 Payout 时为必填,此时 必须是下列值之一;对于其他通道它是可选的,会按你传入的原样透传给 收款方。可接受的值: 请选择真正符合该笔付款性质的值。某些通道——尤其是中国大陆—— 会据此进行校验。 相邻的两个自由文本字段经常与它混淆。description(最长 128 个字符)会打印在收款人的银行或钱包账单上,所以请保持简短:银行 和钱包会截断它,实际上限大约是 16 个英文单词或 10 个中文字符。 extendInfo(最长 128 个字符,JSON)会原样回传给你, 不会到达收款人。

/api/v1/order/create 上哪些”可选”字段对某些支付方式来说会变成必填?

收单规范把 goodsInfo、addressInfo 和 userInfo 的大部分字段标记为 可选,因为是否必填取决于实际使用的支付方式。 按 payMethodType 汇总如下: 请把这张表当作评估工作量的信息,而不是契约:同一个 payMethodType 在不同 市场之间可能不同,这也是为什么有几个单元格写着视市场而定。BNPL 是唯一 在所有提供它的地方都要求完整逐项商品清单的类型。 如果你使用 Waffo 托管的收银台,通常可以忽略这张表。 当所选 方式需要你未提供的用户信息时,买家会被重定向到收银台, 由收银台收集。只有在流程中没有收银台时,这张表才重要。 关于权威做法——提交、读取返回的缺失字段列表、重新发送——以及 可能被要求的全部字段路径,请参见 按支付方式划分的条件必填字段。

orderAction.actionData 里有什么?

当 orderStatus = AUTHORIZATION_REQUIRED(即买家还有事情要做)时, /api/v1/order/create 和 /api/v1/order/inquiry 会返回 orderAction。 actionType 为 WEB(把买家重定向到 webUrl)或 DEEPLINK(打开 deeplinkUrl)。 actionData 是重定向之外的另一种选择:它携带原始的支付凭据,让 你可以渲染自己的收银台页面。任何一次响应中只会出现与所选支付 方式相关的子集,所以请把每个字段都视为可选,有什么就渲染什么。

支付凭证字段

金额与汇率字段

银行转账字段

虚拟账户(按订单生成的 bankAccount)仅凭账号即可对账; 共享收款账户则凭 referenceNumber 对账。如果两者都返回了, 两个都要展示,并把 referenceNumber 视为买家必须输入的内容。

完整错误码表——Payout

/api/v1/payout/create、/api/v1/payout/inquiry 以及 Payout 通知。 注意 Payout 没有的错误码:没有 A0015–A0047。如果你在 Payout 端点上看到其中之一,说明你看错表了。

完整错误码表——收单

/api/v1/order/create、/inquiry、/cancel、/refund、/capture、 /api/v1/refund/inquiry 以及支付和退款通知。 收单族是最宽的一族, 快速参考 中还包含本规范版本之外的其他收单错误码。两者不一致时, 以快速参考为较新的列表。

完整错误码表——订阅

/api/v1/subscription/create、/inquiry、/cancel、/manage、/change、 /change/inquiry、/update 以及订阅通知。 有两个错误码是这一族独有的,值得单独处理:A0025(订阅 必须运行超过一个周期)和 A0028(在首期付款完成结算之前请求管理 URL)。

完整错误码表——提现、余额与交易限额规则

/api/v1/account/balance/inquiry、/api/v1/account/history/inquiry、 /api/v1/withdraw/consult、/create、/inquiry、提现通知,以及 /api/v1/risk/transactionlimit/create、/update、/inquiry。 A0100–A0102 只存在于这里,并且只出现在交易限额规则 端点上。它们不在通用快速参考中,所以 A0100 不是 写错了的 A0010。

我收到了一个不在上述任何表格里的错误码,它是什么?

Waffo 在签名公共 API 上返回的每个错误码都符合以下形式之一:0,或 单个字母 A–E 后跟四位数字。任何其他形式的值——更长的 字符串、不同的前缀、混合的字母数字标识——都不属于公共 错误契约,你的集成不应基于它做分支判断。把它连同 paymentRequestId / payoutRequestId 一起记录下来,并 联系支持;在通过查询调用获得确定状态之前, 按 E0001 的方式处理该笔交易。 对于形式符合公共规范、但就是不在你所调用 API 族表格里的错误码也一样: 查询订单以获得其真实状态,而不是从错误码推断结果。