Skip to content

错误码与排查 ​

平台的错误信息都是给人看的句子,不是一串数字。这一页按"现象 → 原因 → 怎么办"整理, 用可读的类别名而不是编号,便于你直接照着排查。

HTTP 状态与类别 ​

开放接口的调用方是程序,所以它会用真实的 HTTP 状态码,让你在不解包正文的情况下也能分流:

类别典型状态码现象怎么办
API KEY 无效401返回"API KEY 无效或已失效,请核对请求头 X-Pay-Api-Key"检查头名是否拼对、KEY 有没有多余空格、是否已轮换。平台不区分失败原因,就是为了不泄漏"这个 KEY 存在"
商户状态不允许403返回具体原因(如未开通线上收款、商户已停用)这是给你看得懂的理由,不是 KEY 的问题。按提示去申请开通或联系平台
平台暂时不可用503服务端内部错误不是你的问题,按你的重试策略稍后重试;503 不该触发你"去轮换 KEY"
触发限流429提示请求过于频繁降低频率或加退避重试。下单按商户限流、查询额度更宽;限流计数器按来源 IP 与商户号分别统计
参数不合法业务错误码 + 可读 msg如"缺少商家订单号(merchantOrderNo)"按 msg 修正请求体
下单被拒业务错误码 + 可读 msg如"金额低于最小限额"被拒原因原样转达,修正后重试;这类不消耗幂等额度

粗看状态码,细看 msg

状态码用来分流(该改配置、该等一会儿、还是该改参数),msg 用来看具体原因。 两者都给你,是因为程序和人需要的粒度不一样。

常见问题 ​

现象可能原因排查顺序
API KEY 无效头名写错(不是 Authorization,是 X-Pay-Api-Key);KEY 前后带空格/换行(从环境变量读时常见);KEY 已轮换且过了过渡期① 打日志确认头名与 KEY 末 4 位 ② 环境变量是否带了引号或换行 ③ 是否刚轮换过 KEY
金额低于最小限额下单金额小于该代币配置的最小值① 从链与代币清单读 minAmount ② 确认 amount 是代币单位小数字符串(开放接口),不是最小单位整数串
金额形态传错开放接口要 "100.5",收银页要 "100500000",两者相反① 确认调的是哪个接口 ② 用 decimals 换算核对数量级,差 10 的幂通常就是这里
幂等重放同一 merchantOrderNo 重复调用,返回已有订单,idempotentReplay=true这是正常行为,不是错误。想确实再开一单,就换一个新的 merchantOrderNo
限流短时间请求过多① 确认不是重试风暴(幂等重试本身也会计数) ② 加指数退避 ③ 若为常态超限,联系平台调整档位
回调地址不可达换了域名、发版期间不可达、防火墙改规则、地址是内网地址① 从公网能否访问该 URL ② 是否只放行 POST ③ 是否 http(s) ④ 回复是否在超时内(约 10 秒)
回调验签不通过用了解析后重编码的正文;时间戳拼接方式不对;密钥不是 API KEY;轮换后没更新① 用原始报文字节算签名 ② timestamp + body 字符串拼接 ③ 密钥确认是当前 KEY
订单一直"待支付"买家还没转,或转到了别的地址,或金额与识别信息没带对① 用查询接口看 receivedAmountMinimal ② 确认买家按 payAddress + payAmountMinimal + identify 转 ③ 链上拥堵时确认会慢
订单"已提交"很久不动确认数还没攒够看查询结果里的 confirmations / requiredConfirmations。已提交 不等于已付款,别在这个状态下发货
订单"待人工认领"链上有一笔钱分不清属于哪张单(如同地址两笔同额)系统刻意不猜,猜错等于把 A 单标成已付而 B 单永远收不到钱。主动联系平台做人工认领
金额对不上(差一点)把最小单位当成了代币单位,或反过来;或用了浮点换算统一用最小单位整数字符串比对,别用浮点

排查时先确认这几件事 ​

  1. 你调的是哪一组接口。 开放接口要 API KEY,商户侧接口要 JWT,收银页公开接口无需登录 —— 走错组就是 401。
  2. 金额的形态。 开放接口小数字符串,收银页最小单位整数串。数量级不对先怀疑这里。
  3. 订单状态用名字判断,不要用数值大小。 状态数值不是按付款程度排序的。
  4. 回调不等于钱到没到。 关键动作前用查询订单核对。

需要人工协助 ​

尚未开放

匿名在线客服尚未上线。 遇到上面表格里没有的情况,请通过官网注册入口或邮箱联系我们, 并附上你的 merchantNo 与相关 orderNo,便于快速定位。

相关 ​

面向全球中小商家的 Web3 支付基础设施