Z Zise Developers

当前已知问题

4 项未修复。 遇到下面这些,不是你的接入姿势错了 —— 不用再排查,按「怎么绕」那一列处理。

我方刻意不做「一切正常」式的状态页: 一个观测不到真实故障的绿灯,比没有状态页更坏 —— 你会拿它当判据。 这一页只声称一件事:我方知道下面这些。

修复后会在变更日志里登记,这一页的条目转成「已修复」并保留一段时间

—— 删掉它等于让照着旧行为写过绕行代码的人无从知道可以拆了。

未修复9 条事件的 status_version 恒为 0

影响:Webhook

表现:事件目录里逐条标注了。受影响的事件里,status_version 不随状态变更递增。

怎么绕:对这几条改用「按到达时间 + 拿 ID 回查确认」,不要只靠版本号向前合并 —— 一个「version 不大于当前值就跳过」的合并器会让它们只有第一条生效。

未修复沙盒的上游故障注入是空操作

影响:沙盒

表现:注入 timeout / unknown / unknown_status 会返回 200 并回显你设的值, 但后续每一单仍然打真实上游、用真实凭据

怎么绕不要依赖沙盒验证上游异常路径。 需要联调这几条时联系你的客户经理, 我方在受控环境里配合你走一遍。

未修复GET /v1/balances 的响应信封与其余清单端点不同

影响:余额

表现:它返回 { balances: [...] },而其余清单端点是 { data, next_cursor, has_more }

怎么绕:这一个端点单独取 balances 字段;你的通用翻页器会在这里读到 undefined

未修复同一自然人不能在两个商户下各建一个账号

影响:会员

表现:用已属其他商户的 email / 手机号建会员会返回 400 invalid_request (不是 409 —— 我方不下发「这个人已经存在」这种可被用来探测的信息)。

怎么绕:目前无法绕过,身份层的唯一索引尚未按商户拆分。 如果你的用户群与其他 Zise 商户有重叠,请提前告知你的客户经理。

已修复一部分业务拒绝返回 500 api_error,而不是 4xx

影响:兑换 · 站内转账 · 理财 · 扫码付 · 汇款 · 发卡 · 提现地址

表现:「余额不足」「报价过期」「该方向未启用」「地址校验和不对」这类合法的业务拒绝, 对外呈现成 500 api_error,而不是带明确 code 的 4xx。 成因是内部码没登记进对外码目录,走了缺省分支。

2026-08-12 已修复。 这些拒绝现在返回带明确 code 的 4xx。

如果你之前为此写过「对 500 设重试上限」的绕行代码,可以拆了 ——

保留一个上限总是对的upstream_timeout(504) 之外的 5xx 不该无限重。

同时新增了守卫 tools/check-open-error-codes.mjs:内部码没登记、

或登记了却零发射点,提交期就红。

已修复三个端点一调用就 500

影响:GET /v1/cards/{id}/transactions · GET /v1/earn/products/{id} · POST /v1/cards/{id}/replacements

表现:前两个选了不存在的列;第三个漏了 reason 白名单,任意字符串会撞库级约束。

已修复。 修的过程里还抓到第四个同类:GET /v1/cards/{id} 选的

balance_micro 在全部 127 个迁移里一次都没出现过(真名 upstream_balance)——

它同时是卡详情的全部内容、也是流水端点的门,所以流水就算列名全对也进不去。

卡消费流水现在多了一个 direction 出参amount 是绝对值,

只看金额的话一笔退款与一笔消费长得一模一样。

已修复GET /v1/remittances/{id} 会回显内部状态,且金额格式与列表不一致

影响:汇款

表现:详情端点可能返回 pending_merchant_funds(列表与下单口都会折叠成 pending); 同一笔单的 source_amount 在详情里是未插小数点的定点整数串, 在列表里是十进制串 —— 两者差 10^ledger_scale 倍,而两边都返回 200。

已修复。 三个出口(下单 / 列表 / 详情)现在走同一个映射函数,

不是三份各自的三元表达式 —— 后者正是这类泄漏复发的成因。

金额统一走十进制串并随行下发 ledger_scale