深色模式
出金排障
本页说明
讲什么:出金过程中的常见异常——按"用户/运营看到什么症状"组织,给出排查路径和处理方式 适合谁:需要处理出金问题的运营人员,需要理解异常流程的产品经理 前置阅读:出金生命周期预计阅读:4 分钟 负责人:出金运营主管
核心要点:出金异常按错误码快速定位——BST 回调超时、通道无法自动选择(method=null)、银证授权异常、余额冻结失败是最常见的四类问题。
按错误码/状态码快速定位
| 错误码/状态 | 含义 | 跳转 |
|---|---|---|
回调码 -5 | 招行/民生 BST 超时 | 场景二 § BST 回调 |
回调码 -6 | 招行/民生 BST 拒绝 | 场景二 § BST 回调 |
天星 PENDING 超时 | 天星轮询超时 | 场景二 § 天星轮询 |
天星 FAILED | 天星指令失败 | 场景二 § 天星轮询 |
天星 REFUNDED | BST 入金退款 | 场景八 |
method = null | 系统无法自动选通道 | 场景一 § Confirm 卡住 |
| Mandate ≠ OPEN | 银证授权异常 | 场景七 |
| 140630xxx | 天星错误码 | 出金数据字典 |
| 冻结类型=2 (CASH_OUT) | 出金冻结 | 场景六 |
| 任务状态=5 | 出金已冲正 | 场景五 |
完整错误码 → 统一错误码中心
快速诊断:用户说"钱没到"
收到用户反馈"我已经提了出金但钱没到银行卡"时,按以下顺序排查:
大部分"钱没到"的原因是审批流程还在进行中——尤其是非 BST 通道的出金,需要运营手动操作多个步骤。
场景一:审批卡在某一步
症状:出金任务状态为"处理中",但长时间没有推进到下一步。
| 卡在哪一步 | 可能原因 | 处理方式 |
|---|---|---|
| Audit | 高风险审核排队中 | 检查风控标记原因,审核通过后点击 NEXT |
| Confirm | 运营未及时处理 / 银行卡信息需确认 | 验证银行卡状态,确认通道后点击 NEXT |
| Remittance | 自动出金条件不满足 / 运营未手动触发 | 检查 6 个自动出金条件,手动点击执行转账 |
Confirm 卡住最常见的原因:method = null(系统无法自动选择通道)。运营需要根据用户的银行卡手动选择合适的出金通道(网银 / FPS / 手工等),然后才能推进到 Remittance。
场景二:银行回调失败
症状:Remittance 已经执行了 startTransfer(),但银行回调结果不是成功。
招行 / 民生 BST 回调异常
| 回调码 | 含义 | 系统处理 | 运营操作 |
|---|---|---|---|
| -5 | 超时 | 自动切换备用 exit_server 重试 | 通常不需要干预,等待重试结果 |
| -6 | 银行拒绝 | 标记失败 | 联系银行确认拒绝原因,可能需要换通道重新出金 |
BST 超时(-5)通常是网络抖动——系统会自动尝试备用服务器。如果重试也失败,运营需要手动确认银行侧状态:钱是否已经扣出?
天星 BST 轮询异常
天星不是实时回调,而是系统轮询获取结果,因此异常模式不同:
| 异常 | 触发条件 | 系统处理 | 运营操作 |
|---|---|---|---|
| 轮询超时 | AsbBstTransfer 10 次轮询后仍 PENDING | 进入 SyncAsbBstWithdraw 2 小时兜底同步 | 等待,关注告警 |
| 同步超时 | 2 小时同步窗口结束仍 PENDING | 标记异常 | 人工查询天星 API 确认银行侧状态 |
| 指令失败 | 天星返回 FAILED | 释放冻结资金 | 查看 140630xxx 错误码定位原因 |
关键区别:招行/民生的"-5 超时"通常秒级可恢复(切换备用服务器),天星的轮询超时可能需要等待最长 2 小时 + 人工介入。
天星错误码 → 出金数据字典 § 天星错误码
网银 / FPS 回调异常
网银和 FPS 通道的异步回调周期可能更长。如果长时间没有回调:
- 检查银行侧的交易状态
- 确认出金指令是否成功发送
- 必要时联系银行核实
场景三:自动出金条件不满足
症状:BST 通道出金,Remittance 步骤没有自动执行,需要人工操作。
6 个自动出金条件中任何一个不满足,系统就会降级为人工模式。常见情况:
| 不满足的条件 | 表现 | 处理 |
|---|---|---|
| 金额超限 | 大额出金没有自动执行 | 运营确认金额合理后手动触发 |
| 每日超 10 笔 | 当天同一用户多笔出金 | 确认非异常操作后手动触发 |
| 自动开关关闭 | 某币种的自动出金被关闭 | 检查 auto_settings 表,确认是否需要重新开启 |
| 余额不足 | 可用余额小于出金金额 | 通知用户余额不足 |
这不是故障
自动出金条件不满足是正常的安全机制,不是系统故障。运营确认后手动执行即可。
场景四:出金被风控拦截
症状:用户在 App 发起出金时被拒绝,或出金任务进入了 Audit 步骤。
黑名单命中
hk-withdraw-blacklist-go 检查出金目标账户是否在黑名单中。命中黑名单的出金会被直接拒绝,不会创建出金任务。
运营处理:
- 确认黑名单命中原因
- 如果是误报,联系风控团队更新黑名单
- 用户需要重新发起出金
高风险标记
用户账户被风控标记为高风险时,出金会多一步 Audit 审核。这不是拒绝——审核通过后出金正常进行。
场景五:出金后冲正
症状:出金已完成(状态=已完成),但需要把资金追回。
冲正是低频但影响重大的操作,可能的触发原因:
| 原因 | 说明 |
|---|---|
| 银行退回 | 银行侧退回了已汇出的资金 |
| 错误出金 | 运营发现出金信息有误(如出错了用户) |
| 风控事后拦截 | 出金完成后风控发现异常 |
冲正流程:
- 运营在 OA 发起冲正(动作:REVERSE)
- 系统检查当前状态——只有"已完成"的任务才能冲正
- 执行冲正:更新任务状态为"已冲正"(5)
- SBA 执行反向资金操作
- 通知用户出金已撤回
冲正后,任务状态变为 5(REVERSE)。
场景六:用户无法发起出金
症状:用户在 App 点击出金时报错或无法提交。
| 原因 | 用户看到的 | 错误码 | 解决方式 |
|---|---|---|---|
| 账户冻结 | "账户异常,无法出金" | — | 检查冻结类型(CASH_OUT=2),联系相关团队解冻 |
| 出金限制(风控) | "您的账户暂时无法出金" | 140670003 | 检查是否有出金限制标记 |
| 黑名单 | "账户被限制提取资金" | — | 确认黑名单原因,联系风控团队 |
| 银行卡无效 | "银行卡不存在" | 140670002 | 引导用户重新绑定银行卡 |
| 余额不足 | "证券账户余额不足" | 140670005 | 可能有资金被冻结(货币兑换、基金等) |
| 穿仓 | "账户存在欠款" | 140670004 | 用户需补足欠款后才能出金 |
| GDCA 未完成 | "未完成 GDCA" | 140670009 | 引导用户完成 GDCA 认证 |
| NSS 问卷未完成 | "未完成 NSS 问卷" | 140670008 | 引导用户完成 NSS 问卷 |
| 不动账户/休眠户 | "休眠户不支持出金" | 140670006 | 用户需先激活账户 |
| 在线开户未入金满额 | "绑卡须转账 ≥ 10,000 港元" | 140670011 | 引导用户先入金满足门槛 |
| 银行账户未认证 | "银行账户还未通过认证" | — | 引导用户完成银行认证 |
| 天星银证未授权 | "未授权银证" | — | 仅银行发起出金场景,引导授权 |
| 大陆银行卡 | "不支持提取到中国大陆银行账户" | — | 引导用户使用香港银行卡 |
| A 股通 CNH 限制 | "CNH 仅支持提取到香港银行" | — | 选择香港银行账户出金 |
| 融资可提不足 | "超出现金可提金额" | — | 确认融资保证金要求 |
| Payoneer 限制 | "Payoneer 账户不支持出金" | — | 选择其他银行卡 |
| 证券账户不存在 | "未开通证券账户/已销户" | 140670007 | 引导用户开户 |
冻结类型速查 → 出金规则手册 § 冻结类型 前置校验错误码 → 出金数据字典 § 前置校验错误码
场景七:银证授权异常
症状:用户无法通过 BST 通道出金,或出金卡在 Confirm 步骤提示"银证授权状态异常"。
这类异常主要影响天星 BST 通道(Mandate 模型),招行/民生的传统签约模式较少出现。
| 异常 | 症状 | 可能原因 | 处理 |
|---|---|---|---|
| 授权超时 | Mandate 长时间停在 PROCESSING | 银行处理延迟或通信中断 | 等待银行处理;超时后人工查询天星 API |
| 授权失败 | Mandate 变为 FAIL | 用户信息校验不通过 / 银行风控 | 查看 140630xxx 错误码,引导用户重新授权 |
| 授权被取消 | Mandate 变为 CANCEL | 用户在银行端取消 | 确认用户意图,必要时重新发起授权 |
| 部分市场失败 | 3 个市场中部分绑定成功 | 某市场的银证配置异常 | 检查失败市场配置,手动补充绑定 |
| 状态不同步 | 银行已取消但 moomoo 仍 OPEN | 同步回调丢失 | 手动查询天星 API 同步最新状态 |
授权异常 vs 出金异常
授权异常阻止的是所有后续出入金(因为 Mandate 不是 OPEN),而出金异常只影响单笔交易。发现授权异常时应优先处理,避免影响更多交易。
Mandate 状态码 → 出金数据字典 § 银证授权状态码
场景八:BST 入金退款(REFUNDED)
症状:BST 入金已显示成功到账,但随后资金被银行退回。
这是天星 BST 独有的异常状态——REFUNDED。招行/民生的 BST 入金没有退款机制。
触发条件:
- 银行侧事后发现交易异常(如合规问题)主动发起退款
- 银行风控系统事后拦截
系统行为:
- 收到天星 API 返回的 REFUNDED 状态
- 系统触发冲正:撤回已入账到证券账户的资金
- 更新入金记录状态
- 触发告警通知运营
运营操作:
- 确认退款原因(查看天星 API 返回的错误信息)
- 核实用户证券账户余额是否已正确回滚
- 通知用户并说明原因
- 如需重新入金,引导用户发起新的入金操作
REFUNDED ≠ 入金失败
入金失败(FAILED)是指银行拒绝了入金指令,资金从未到账。REFUNDED 是入金已经成功后银行又把钱退回来——系统需要做冲正操作,比处理普通失败更复杂。
出金排障中绝对不要做的事
- 不要对"处理中"状态的任务执行冲正——资金可能正在银行侧流转,强行冲正会导致资金状态不一致
- 不要在 BST 当日 15:55 截止后重新触发
startTransfer()——会导致次日重复出金 - 不要手动修改数据库中的任务状态码绕过审批步骤——破坏审计链,违反内控要求
- 不要在银行回调码为 -5(超时)时立即驳回任务——系统会自动重试,大部分秒级恢复
按通道故障排查
上面按"症状"排查,这里补充按"出金通道"分类的常见故障。12 种 method 码对应的通道详见 银行能力矩阵 § 出金方法码。
BST 银证出金(method=auto_bs)— 详细 Runbook
Runbook:BST 出金未到账
触发:客户反映银证出金已显示"已完成"但资金未到银行账户
第 1 分钟 — 确认状态:
- CRM 出金任务 → 查任务状态字段和银行回调结果
- 招行/民生:回调码 = -5(超时)→ 系统自动切换备用 server,等待重试结果
- 招行/民生:回调码 = -6(拒绝)→ 银行明确拒绝,查看拒绝原因
- 天星:状态 = PENDING → 轮询中,等待
AsbBstTransfer完成(最多 10 次)
第 5 分钟 — 深入排查: 5. 天星轮询 10 次用尽仍 PENDING → 进入 SyncAsbBstWithdraw 2 小时兜底窗口,此时不要人工操作 6. 天星返回 FAILED → 查看 140630xxx 错误码 → 释放冻结资金 → 通知用户 7. 招行/民生重试也失败 → 确认银行侧资金是否已扣出(关键!)
第 15 分钟 — 升级: 8. 天星 2 小时兜底窗口结束仍未回调 → 严重告警,人工查询天星 API 确认银行侧实际状态 9. 招行/民生确认资金已扣出但系统未更新 → 联系银行对接人 + 通知技术运维手动同步状态
中银 FTS 出金(method=boc / boc_fps / tele_transfer)
| 异常 | 可能原因 | 处理 |
|---|---|---|
| FTS 文件未送达 | SFTP 连接异常或 S14 文件生成失败 | 检查 bochk_relay 日志,确认 SFTP 连通性 |
| 状态长时间无更新 | S16 回执文件未返回 | 手动登录中银 FTS 系统查询,确认文件状态 |
| 状态 F(失败) | 收款信息有误或账户异常 | 查看错误描述,联系中银确认后修正信息重新出金 |
| 状态 R(退回) | 银行退回已汇出资金 | 确认退回原因,必要时修正收款信息重新发起 |
| 状态 C(取消) | 出金被取消 | 确认取消来源(系统/运营/银行),必要时重新发起 |
| FPS 排除银行命中 | 收款银行在 FPS 排除列表中 | 改用 boc(同行)或 tele_transfer(跨境)通道 |
广发 FPS API(method=cgb_fps_api)
| 异常 | 可能原因 | 处理 |
|---|---|---|
| 状态码判断错误 | 2063 和 2065 的同一状态码含义相反 | 确认消息类型再判断 → 广发状态码反转 |
| 批量降级为单笔 | 2064 批量发送失败 | 系统自动拆为 2063 单笔重发,检查降级日志 |
| SIGN_ERROR | 签名或验签失败 | 检查签名密钥配置,确认广发侧是否更换了密钥 |
| A012 重复流水号 | 请求 ID 重复 | 确认是否为重复发送,不可重试 |
| A014 系统繁忙 | 银行侧负载高 | 系统自动重试,持续失败则等待恢复 |
| UNKNOWN 状态 | 批量结果无法确认 | 需人工登录广发系统查询确认 |
企业网银出金(method=hase / hsbc)
| 异常 | 可能原因 | 处理 |
|---|---|---|
| 长时间未操作 | 运营未及时登录网银执行转账 | 检查运营排班,确认 Remittance 步骤是否已触发 |
| 网银 session 超时 | 银行网银登录过期 | 重新登录网银,继续操作 |
| 转账被银行拒绝 | 金额超限或收款信息有误 | 核实银行侧限额和收款信息,修正后重新操作 |
渣打 FPS(method=sc)
| 异常 | 可能原因 | 处理 |
|---|---|---|
| Webhook 未收到 | 渣打推送延迟或 endpoint 不可用 | 主动调用 Payment Status 接口查询实际状态 |
| FAILED 状态 | FPS 转账失败 | 查看原因码,必要时换通道 → 渣打状态码 |
| RETURNED 状态 | 银行退回转账 | 确认退回原因,修正收款信息后重新出金 |
| JWT 认证失败 | Token 过期(仅 30 秒有效) | 检查服务器 NTP 时钟同步 |
EWB 电汇(method=ewb)
| 异常 | 可能原因 | 处理 |
|---|---|---|
| 到账时间长 | 跨境电汇通常 1-3 个工作日 | 正常等待,超过 3 日联系 EWB 确认 |
| 转账被退回 | 收款信息有误(SWIFT 代码/账号等) | 核实收款信息后重新发起 |
CHATS/RTGS(method=chats_rtgs)
| 异常 | 可能原因 | 处理 |
|---|---|---|
| 清算延迟 | CHATS 系统每日有固定清算窗口 | 在清算时间内等待,非工作时间顺延至下一工作日 |
| 金额不到账 | 清算手续费扣减 | 属正常,告知用户银行清算可能产生手续费 |
人工出金(method=manual)
| 异常 | 可能原因 | 处理 |
|---|---|---|
| 长时间处理中 | 运营未手动操作工银网银 | 检查排班和任务分配,手动完成转账 |
| 转账失败 | 工银账户余额不足或收款信息有误 | 核实后重新操作 |
运营工具清单
| 工具 | 用途 | 所需权限 |
|---|---|---|
| 出金任务列表 | 查看/筛选所有出金任务 | — |
| Audit 审核 | 高风险出金审核 | PERMISSION_CASH_TASKS_OUT_AUDIT |
| Confirm 确认 | 确认银行卡和通道 | PERMISSION_CASH_TASKS_OUT_CONFIRM |
| Remittance 汇款 | 执行出金转账 | PERMISSION_CASH_TASKS_OUT_REMIT |
| 冲正 | 撤回已完成的出金 | — |
| 跟进 | 标记任务为跟进中 | — |
| 转交 | 将任务转给其他运营 | — |
| Mandate 状态查询 | 查询银证授权状态(天星) | — |
| BST 轮询状态 | 查看天星轮询进度和结果 | — |
监控与告警
系统通过以下机制监控出金异常:
| 监控项 | 方式 | 告警条件 | 告警渠道 |
|---|---|---|---|
| 队列事件堆积 | cron 每分钟检查 | 待处理事件数超过阈值 | 飞书告警 |
| BST 轮询超时 | 天星 SyncAsbBstWithdraw 兜底 | 2 小时窗口后仍 PENDING | 飞书告警 |
| 自动出金余额不足 | autoOut() 扣减时判断 | 余额 < alarm_amount | 飞书告警 |
| 自动出金余额熔断 | autoOut() 扣减时判断 | 余额 < stop_amount | 飞书告警 + 自动关闭该币种自动出金 |
| 天星 Mandate 异常 | 定时状态同步 | Mandate 状态非 OPEN 但有出金任务 | 飞书告警 |
| 招行/民生回调异常 | 回调处理 | 回调码 = -5(超时)或 -6(拒绝) | 飞书告警 |
告警处理优先级
收到告警时按以下优先级处理:
| 优先级 | 告警 | 影响 | 操作 |
|---|---|---|---|
| P0 | 队列事件堆积 | 所有出金任务卡住不推进 | 检查队列消费者进程是否在运行,重启服务 |
| P0 | 自动出金余额熔断 | 该币种所有 BST 出金降级为人工 | "充值" auto_settings 余额 + 重新开启开关 |
| P1 | BST 轮询超时 | 单笔天星出金状态不明 | 人工查询天星 API 确认银行侧状态 |
| P1 | 招行/民生回调 -6 | 单笔出金被银行拒绝 | 联系银行确认拒绝原因,可能需换通道 |
| P2 | 余额报警 | 告知余额接近熔断线 | 关注后续出金量,必要时提前"充值" |
| P2 | Mandate 异常 | 影响该用户后续所有出入金 | 引导用户重新授权 |
常见误解
| 误解 | 事实 |
|---|---|
| "用户说钱没到就是系统故障" | 大部分是审批流程还在进行中——尤其是非 BST 通道需要运营手动操作多个步骤。先按诊断流程图排查任务状态 |
| "BST 回调超时(-5)就是出金失败" | 不是。系统会自动切换备用 exit_server 重试,通常秒级恢复。只有重试也失败才需要人工介入 |
| "自动出金条件不满足是系统故障" | 是正常的安全机制,不是故障。运营确认金额和操作合理后手动触发执行即可 |
| "冲正后资金会自动退回用户银行卡" | 不会。冲正只是把"已完成"的出金在系统内撤回(状态改为 REVERSE),资金回到证券账户。退回银行卡是另一个操作 |
读完之后
| 我想... | 去看 |
|---|---|
| 理解出金完整流程(才能排查卡在哪一步) | 出金生命周期 |
| 看某条规则的详细解释 | 出金规则手册 |
| 看某通道的技术执行细节 | 通道执行手册 |
| 查回调码、状态码的具体数字 | 出金数据字典 |
| 深入了解 BST 银行异常处理 | 内银系 BST 总览 |
这个页面有帮助吗?