有哪些接口,调用它们需要什么?
五个接口都是POST,JSON 进 JSON 出,签名方式与 /api/v1/order/create 完全一致。
两条访问规则拦住了大多数首次调用。API 密钥是有作用域的:仅为 payin 签发的密钥不能调用这些接口,会在签名校验之前就以
A0004 “Permission denied” 失败——
如果一个在别处签名正确的请求返回 A0004,请向 Waffo 申请作用域包含提现的密钥。并且请求体中的 merchantId 必须与你的密钥所对应的 MID 一致,否则返回 A0003。
/api/v1/withdraw/inquiry 是例外:它不带 merchantId——MID 来自密钥,属于其他 MID 的订单会被报告为未找到。
三个提现调用是怎么配合的?
consult——发送currency,可选amount。返回费用、预期到账金额、你协议的限额和收款账户,以便你在提交前校验。create——发送你确定的金额,加上你自己的withdrawRequestId。inquiry——轮询直到状态为终态,或等待发到你notifyUrl的回调。
create 刻意不等于一笔已完成的提现:审批记录和余额扣减是异步发起的,所以成功的 create 通常返回 IN_PROGRESS——把它当作「已受理」,绝不要当作「已打款」。
consult 会告诉我什么,不传金额会怎样?
省略amount,consult 回答的是「我现在一次最多能提多少」:你的可提现余额——结算账户的可用余额,在保证金余额为负时减去保证金缺口——以协议的最大值为上限。
实际的
fxRate 和 actualReceiveAmount 在订单完成后出现在 inquiry 上。
create 需要什么,幂等是怎么工作的?
省略
bankAccountId 时自动使用协议下唯一绑定的账户;如果协议绑定了多个账户,省略它会以参数错误失败并要求提供。
accountNo 只在你同一币种持有多个余额账户时才有意义——这发生在与另一个 Waffo 实体重新签约之后。
withdrawRequestId 是幂等键,作用域为你的 MID。用相同的 amount 和 currency 重放它,你会得到原订单的结果——不会产生第二笔提现。
用不同的 amount 或 currency 重放,调用以 A0011 “Idempotent param mismatch error” 失败。所以超时后用完全相同的请求体重试是安全的;真正的新提现需要新的 id。
怎么轮询状态,各状态是什么意思?
inquiry 至少需要 withdrawRequestId 或 withdrawOrderId 之一;两者都不传是参数错误。
两者都传时以 withdrawOrderId 为准,若两者不一致,调用会失败而不是返回错误的订单。
Portal 对同一订单显示更长、更细的状态列表——映射关系见
提现与批量 Payout FAQ。成功时
inquiry 补充 actualReceiveAmount、fxRate(同币种始终为 1.00)、bankRefId 和
withdrawCompleteTime;失败时带有 failureCode 和 failureReason。
余额查询返回哪些账户?
只有你的结算账户——每个结算币种一行,按签约实体合并。传currency 可以缩小范围,省略则返回全部币种。待结算余额不在这里暴露。
账户历史查询最多能查多久以前,每行有什么?
该接口上的所有时间均为 UTC——包括你发送的startTime / endTime(ISO-8601 本地日期时间,如 2026-08-01T00:00:00)和返回的 transactionTime(...Z)。
Portal 的账户历史则以 UTC+8 展示。
- 两个边界都省略时只返回当天;其他情况需同时发送两者。窗口不得超过 180 天,解析出超过 60,000 行的查询会被拒绝。
- 与 Portal 的账户历史不同,该接口同时覆盖结算账本和保证金账本。用
accountType=MERCHANT_SETTLEMENT或MERCHANT_RESERVE筛选;省略则两者都返回。currency和accountNo可进一步缩小范围,筛选一个你并不持有的账户会返回账户未找到错误而不是空列表。
accountNo、accountType、currency、amount、accountDirection(CREDIT / DEBIT)、newBalance(该笔变动之后的余额)、transactionTime、
businessId(关联的业务订单)和 businessType——诸如 SETTLEMENT、WITHDRAWAL、RESERVE_WITHHOLDING、RESERVE_RELEASING、RESERVE_ADJUSTMENT 和 ADJUSTMENT 等代码,
最好不区分大小写地匹配。它们的含义见余额与账户历史。
我应该显式处理哪些错误?
还是卡住了?联系支持并提供
withdrawRequestId 或 withdrawOrderId 以及调用的时间戳。