深色模式
入金方式总览
本页说明
讲什么:10 种入金方式的分类、体验差异和选择建议,以及一笔入金从申请到到账的完整生命周期 适合谁:需要了解入金渠道全貌、帮助用户选择最优方式的产品经理 前置阅读:新人导读预计阅读:7 分钟 负责人:入金产品经理
核心要点:入金有 10 种方式,按自动化程度分为 Push(用户主动转入,最常见)、Pull(eDDA 代扣)、BST(银证互转)三大类。一笔入金从申请到到账经历"申请→流水采集→匹配→入账→对账"五步。
入金系统全景图
下面这张图展示了入金系统的完整拓扑——从用户操作到资金到账,每个节点标注了对应的文档页面。建议新 PM 先花 2 分钟看懂这张图,再逐页深入。
图中各节点对应的文档:
| 节点 | 对应页面 | 关键内容 |
|---|---|---|
| Apply 申请表 | 入金规则速查 | 申请状态码、分表策略、核心字段 |
| 流水采集服务 | 银行流水采集 | 12 家银行的采集方式、协议、时效 |
| 匹配引擎 | 匹配与自动入账 | 五维匹配、银行专属规则、容差设计 |
| 自动入账判定 | 匹配与自动入账 | 限额、2412 规则、风控检查 |
| 运营 OA 审核 | 人工匹配指引 | 运营操作流程、审批权限 |
| eDDI 扣款 | eDDA 代扣入金 | 授权生命周期、扣款链路、错误码 |
| BST 指令 | BST 银证转账 | 招行/民生/天星的银证协议 |
| SBA 入账 | SBA 资金编排 | Procedure 执行模式 |
| 异常处理 | 入金排障 | 9 个场景 + Runbook |
| 变更指导 | 入金变更指南 | 10 种变更场景的操作指南 |
| 冲正/退款 | 退款与冲正 | 三种退款机制、决策树、失败恢复 |
三种入金模式
用户把钱从银行转到证券账户,有三种截然不同的"发起方":
Push(用户推):用户在银行 App 操作转账,钱到公司账户后,系统需要通过匹配引擎识别"这笔钱是谁的"。好处是无需预授权,任何银行都能用;代价是需要匹配,到账不够即时。
Pull(系统拉):用户在 moomoo App 一键操作,系统直接从用户银行账户扣款。系统自己发起的扣款天然知道资金归属,完全跳过匹配引擎。体验最好,但需要用户提前完成银行授权(eDDA),且仅汇丰和恒生支持。
Direct(银证直连):银行与证券公司的专线通道,系统通过银证协议发起扣款。与 Pull 类似,不需要匹配引擎,但走的是不同的技术协议(SM2 加密的银证专线)。仅招行、民生、天星支持。
10 种入金方式一览
| 代码 | 方式 | 模式 | 支持银行 | 用户操作 | 到账时效 |
|---|---|---|---|---|---|
| 3 | FPS 转数快 | Push | 渣打、广发、中银、恒生、工银 | 银行 App 转账 | 3~5 分钟 |
| 9 | eDDA 汇丰 | Pull | 汇丰 | App 内一键 | 数分钟 |
| 8 | eDDA 恒生 | Pull | 恒生 | App 内一键 | 数分钟 |
| 1 | BST 银证 | Direct | 招行、民生 | App 内一键 | ~10 分钟 |
| 10 | 天星银证 | Direct | 天星 | App 内一键 | ~10 分钟 |
| 5 | 网银转账 | Push | 几乎所有银行 | 网上银行转账 | 2 小时~3 天 |
| 2 | ATM/柜台 | Push | 大部分银行 | 去 ATM/柜台 | 2 小时~次日 |
| 4 | 缴付账单 | Push | 支持 BP 的银行 | 银行缴费功能 | 2 小时~次日 |
| 6 | 支票 | Push | 可开支票的银行 | 开支票 | 2~3 天 |
| 7 | 海外汇款 | Push | EWB、众安、新加坡工银子账户 | 跨境汇款 | 3~5 天 |
表格按用户体验排序——越上面的方式体验越好、到账越快。所有方式都支持 HKD 和 USD;FPS、网银、ATM 等 Push 方式额外支持 CNH。
入金量分布(产品优先级参考)
下面这张饼图展示各通道的入金量占比,帮助判断优先级:
关键结论:
- 汇丰 eDDA 是绝对主力(72%)——任何影响 eDDA 的变更都应优先保障,回归测试必须覆盖汇丰通道
- Pull 模式(eDDA)合计近 80%——验证了"用户偏好一键入金"的产品判断
- 工银是第二大来源(12.3%),但系统限制最多——涉及工银的变更需额外注意
- BST 银证(招行+民生+天星)合计约 4%,但对特定用户群体是唯一选项
数据说明
入金量占比基于近期业务统计,不同时段可能有波动。仅作为产品优先级参考,不代表精确实时数据。
每种方式的处理管线
三种入金模式在系统内部走完全不同的处理链路。下面分别展开。
Push 管线(FPS / 网银 / ATM / BP / 支票 / 海外汇款)
关键系统:
- 流水存储:
flows_{trans_type}_{month}分表,按银行和月份分片 - 匹配调度:
match:{bank}定时任务,每 3 分钟一轮 - 匹配结果常量定义在
MatchResult.php,流水处置结果定义在BankFlow.php
Pull 管线(eDDA 汇丰 / 恒生)
特点:系统自己发起扣款,天然知道资金归属,跳过匹配引擎。
关键数据表:
- 入金申请:
applys_{shard}(按用户 ID 分片) - 汇丰 eDDI:
hsbc_eddis;恒生 eDDI:hs_eddis - 授权管理:
setup_eddis
详见 eDDA 代扣入金。
Direct 管线(BST 招行 / 民生 / 天星)
特点:走银证专线协议(SM2 加密),同样跳过匹配引擎。招行/民生走 Socket 长连接,天星走 REST API。
详见 BST 银证转账。
Pull 模式:eDDA 入金
eDDA(Electronic Direct Debit Authorization)是体验最好的入金方式——用户在 moomoo App 内填金额、点确认,不需要切换到银行 App。对于绑定了汇丰或恒生的用户,eDDA 是转化率最高的入金方式。
前提:一次性授权。用户首次使用前,需完成 eDDA 授权,允许系统从其银行账户扣款。授权通过后长期有效,后续入金无需重复授权。
为什么 eDDA 跳过匹配引擎? 因为这笔扣款是系统自己发起的——系统在发起扣款请求时就知道这笔钱属于哪个用户、对应哪笔申请。不存在"这笔钱是谁的"的问题。
汇丰和恒生的 eDDA 在协议和授权规则上有显著差异,详见 eDDA 代扣入金。
为什么 eDDA 只有汇丰和恒生?
eDDA 是 HKMA(香港金管局)FPS 体系的一部分,技术标准统一,但每家银行的 API 实现、审核流程、商务条件各不相同。当前只有汇丰和恒生完成了全部对接(商务签约 + 技术联调 + 生产验证)。其他银行是否支持 eDDA、何时可接入,取决于银行侧的技术就绪度和商务合作意愿。想评估新增 eDDA 银行的可行性 → 入金变更指南 § 新增 eDDA
Push 模式:FPS、网银及其他
Push 模式的共同特点:用户在银行侧操作转账 → 资金到达公司银行账户 → 系统通过匹配引擎识别归属 → 入账。
FPS 转数快
FPS 是 Push 模式中体验最好的——转账即时到账,流水实时推送到系统,匹配引擎 3 分钟一轮,通常 3~5 分钟全自动完成。
为什么 FPS 这么快?两个原因:一是 FPS 网络本身即时结算(不像跨行转账要 T+1 清算);二是渣打和广发通过 API 实时推送 FPS 流水,不需要等批量文件。
网银转账
覆盖范围最广的入金方式,几乎所有银行都支持。但到账时效差异大:
- 同行转账(发送银行 = 收款银行):~2 小时
- 跨行转账(HKD):2~3 个交易日
- 跨行转账(外币):3~4 个交易日
为什么同行和跨行差这么多?同行转账在银行内部结算,当天处理。跨行需要通过银行间清算系统(CHATS),走批量清算周期。
其他 Push 方式
| 方式 | 适合谁 | 特殊之处 |
|---|---|---|
| ATM/柜台 | 偏好线下操作的用户 | 需上传转账凭证,凭证不清楚会要求补充 |
| 缴付账单(BP) | 熟悉银行缴费功能的用户 | 匹配时额外校验 BP 编号,精度更高 |
| 支票 | 偏好传统方式的用户 | 清算周期 2~3 天 |
| 海外汇款 | 境外银行账户的用户 | 通过子账户号匹配(非银行卡号),容差较大因中转行扣费不可控 |
Direct 模式:BST 银证转账
BST(Bank-Securities Transfer)是银行和证券公司之间的专线通道。与 eDDA 类似都是系统侧发起扣款,区别在于 BST 走银证专线协议,使用国密算法加密通信。
| 银行 | 入金方式 Key | 特点 |
|---|---|---|
| 招行 | bst | 通过银证双向链路,事件驱动 |
| 民生 | bst | 同招行 |
| 天星 | bstAsb | 虚拟银行,API 对接 |
前提:用户需完成银证账户绑定。绑定后可在 moomoo App 内一键入金。
处理时段:周一 08:00 ~ 周五 16:00。非营业时段的入金顺延到下一交易日自动处理。
为什么 BST 只有招行、民生、天星?
BST(银证转账)是中国特色的银证直连协议,通过 SM2 国密加密专线通信。只有在香港设有分支的大陆银行才具备银证转账能力。招商银行和民生银行是最早在港开通银证的两家,天星银行(虚拟银行)通过 API 适配了类似协议。其他外资银行(汇丰、恒生、渣打等)不使用银证协议,走各自的入金通道。
从申请到到账:完整生命周期
无论哪种入金方式,一笔入金都会经历以下生命周期:
| 状态 | 含义 | 典型触发 |
|---|---|---|
| 待处理(0) | 用户已提交,等待资金确认 | 用户在 App 提交入金申请 |
| 处理中(1) | 资金已确认,正在入账 | Push: 匹配成功;Pull/Direct: 银行扣款回调成功 |
| 已完成(2) | 入金成功,资金到账 | SBA Procedure 执行完毕 |
| 已驳回(3) | 申请被拒绝 | 超时未到账自动驳回 / 运营主动驳回 |
| 已撤回(4) | 用户取消 | 用户在 App 主动取消 |
| 已冲正(5) | 已到账资金被撤回 | 银行退款、错误入账纠正 |
三种模式的关键差异在"待处理→处理中"这一步:
- Push:需要等银行流水到达 + 匹配引擎匹配成功,可能几分钟到几天
- Pull(eDDA):系统发起扣款 → 银行回调成功,通常几分钟
- Direct(BST):系统发起扣款 → 银行回调成功,通常几分钟
详细的状态码和枚举值 → 入金规则速查
入金类型与流程模板
每笔入金在创建时会被赋予一个 DepositType,决定这笔入金走哪个流程模板(即需要哪些审批步骤)。
| 代码 | 类型 | 触发场景 | 是否需人工 | 流程模板 |
|---|---|---|---|---|
| 1 | NORMAL | 流水匹配 + 自动入账 | 否 | FLOW_NO_CONFIRM |
| 2 | PRE_APPROVAL | 线上开户首次入金 | 看情况 | FLOW_PRE_CONFIRM |
| 3 | ABNORMAL | 运营手工创建 | 是 | FLOW_PRE_CONFIRM_ABNORMAL |
| 4 | TRANS_AUTO | 前端精确匹配 | 否 | FLOW_NO_CONFIRM |
| 5 | HIGH_RISK | 命中风控(黑名单/高风险国家) | 是 | FLOW_CONFIRM |
| 11 | NORMAL_HOLD | eDDI + 基金定投冻结 | 否 | FLOW_NO_CONFIRM |
| 21 | STOCK_HOLD | eDDI + 股票定投冻结 | 否 | FLOW_NO_CONFIRM |
| 31 | FUND_PURCHASE_HOLD | eDDI + 基金申购冻结 | 否 | FLOW_NO_CONFIRM |
5 种流程模板详解
每种流程模板定义了入金从"待处理"到"已完成"需要经过的步骤:
| 模板 | 步骤 | 场景 |
|---|---|---|
| FLOW_CONFIRM | [SBAConfirm] | 需运营确认后 SBA 入账,用于高风险入金 |
| FLOW_NO_CONFIRM | [BankPending] | 全自动,等 SBA 完成即可,最常见的模板 |
| FLOW_PRE_CONFIRM | [Confirm, AccountPending] | 线上开户用户,需运营确认 + 等待账户就绪 |
| FLOW_PRE_NO_CONFIRM | [AccountPending] | 线上开户用户,自动入账 + 等待账户就绪 |
| FLOW_PRE_CONFIRM_ABNORMAL | [Confirm, AccountPending, SBAConfirm] | 异常场景全流程,三重关卡 |
- Confirm:运营在后台确认入金合规性
- AccountPending:等待用户证券账户开通完毕(线上开户场景)
- SBAConfirm:调用 SBA Procedure 完成资金入账
- BankPending:等银行侧处理完成,无需人工介入
代码来源:deposit/src/app/Business/Deposit.php:55-230、deposit/src/app/Business/Tasks/Deposit.php:68-80
如何选择入金方式
作为产品经理,推荐入金方式的优先级:
核心原则:Pull/Direct > Push。能避免匹配引擎的方式,体验和确定性都更好。
| 场景 | 推荐方式 | 原因 |
|---|---|---|
| 新用户首次入金 | FPS(如果支持)或 网银 | 无需预授权,门槛最低 |
| 高频入金用户 | eDDA 或 BST | 一键体验,无需反复操作 |
| 大额入金(超自动限额) | 任意方式 | 超限后需人工确认,方式不影响 |
| 境外用户 | 海外汇款 | 唯一选择,通过子账户匹配 |
入金方式可用性判断
系统根据以下因素决定用户能看到哪些入金方式:
| 因素 | 影响 | 配置来源 |
|---|---|---|
| 已绑定的银行卡 | 决定可用的银行通道 | bankcard_service 数据库,用户绑卡时写入 |
| eDDA 授权状态 | 未授权则不显示 eDDA | setup_eddis 表,授权成功后写入 |
| BST 绑定状态 | 未绑定则不显示 BST | bst_bindcards 表,银证签约后写入 |
| 用户所在地 | 香港/大陆/海外看到的方式不同 | 用户注册信息 + deposit 配置文件中的地区规则 |
| 选择的币种 | JPY、SGD 仅部分方式支持 | deposit/config/trans_type.php 币种-方式映射 |
| 开户方式 | 线上/线下开户可用方式有差异 | 用户账户表 account_type 字段 |
各方式处理时段与暂停窗口
不是所有入金方式 7×24 运行。以下是每种方式的精确处理时段:
| 方式 | 处理时段 | 暂停窗口 | 非工作时段行为 |
|---|---|---|---|
| eDDA 汇丰/恒生 | 周一 07:00 ~ 周六 10:00 | 08:55~09:00, 16:05~16:10 | 排队等下一交易日 |
| BST 招行/民生 | 交易日 07:00 ~ 次日 04:00 | 08:55~09:00, 16:05~16:10 | 排队等下一交易日 |
| BST 天星 | 交易日 08:00 ~ 22:00 | — | 排队等下一交易日 |
| FPS | 与 BST 类似 | 08:55~09:00, 16:05~16:10 | 自动入账暂停,辅助匹配继续 |
| 匹配引擎 | 7×24(每 3 分钟) | 08:55~09:00, 16:05~16:10 | 匹配照跑,但自动入账受时段限制 |
| 网银/ATM/支票 | — | — | 流水到系统后等待匹配,不受时段限制 |
16:00~16:10 暂停原因:收盘后系统对证券账户余额进行对账(2412 规则),此窗口内任何自动入金都会暂停,避免资金变动干扰对账。
如果需求变更:新增一种入金方式
代码位置:
- 入金方式定义:
deposit/proto/server/cash_deposit.proto— 添加新的入金方式枚举值 - 方式配置:
deposit/src/app/Common/DepositMethodConfig.php(如存在)或deposit/config/目录 - 前端展示:需同步更新 App 端的入金方式列表
步骤:
- 定义新方式的 Key 和 代码编号(确保不与现有 1~10 冲突)
- 确定模式:Push/Pull/Direct — 决定是否需要匹配引擎
- 如果是 Push 模式 → 需要新增 Match 类(参考
BocMatch.php) - 如果是 Pull/Direct → 需要新增 SBA 编排服务(参考
sba_hase_eddi) - 配置处理时段、容差规则、超时驳回天数
- 在可用性判断逻辑中添加新方式的展示条件
如果需求变更:修改入金方式的可用性规则
代码位置:deposit/src/app/Business/ 目录中的可用性判断逻辑
常见变更场景:
- 某银行新增 FPS 支持 → 在 FPS 可用银行列表中添加该银行的 TransType
- 取消某种入金方式 → 在可用性判断中将该方式的条件设为 false
- 修改线上开户限制 → 调整
account_type相关的判断分支 - 修改地区限制 → 调整
area相关的判断分支
如果需求变更:调整入金处理时段
代码位置:deposit/src/app/Business/DepositConfigNew.php
关键配置项:
- 营业时段开始/结束:约第 34-50 行,定义周一~周五的处理窗口
- 周六特殊处理:到 09:55 关闭(约第 498 行)
- 暂停窗口(2412 规则):16:05~16:10(约第 603-641 行)
- USD 特殊开始时间:09:01(约第 440 行)
注意:修改处理时段会影响所有依赖该时段的入金方式(eDDA、BST、匹配引擎的自动入账判定),需全面评估影响。
角色阅读路径
不同角色关注的重点不同,建议按以下路径阅读:
🆕 新入职 PM(第一周)
| 顺序 | 页面 | 目标 | 预计时间 |
|---|---|---|---|
| 1 | 本页(入金方式总览) | 理解 3 种模式 + 10 种方式 | 7 分钟 |
| 2 | 新人导读 | 跟着 3 个场景走查一遍 | 15 分钟 |
| 3 | 匹配与自动入账 | 理解匹配引擎核心逻辑 | 7 分钟 |
| 4 | 入金排障 § 场景一和二 | 掌握 70% 的日常问题 | 5 分钟 |
| 5 | 入金规则速查 | 知道数字在哪里查 | 浏览 2 分钟 |
💼 需要推动变更的 PM
| 顺序 | 页面 | 目标 |
|---|---|---|
| 1 | 入金变更指南 | 找到对应场景,看影响链和审批要求 |
| 2 | 入金规则速查 | 确认当前参数值 |
| 3 | 对应的专题页 | 理解变更涉及的具体模块 |
🔧 运营人员
| 顺序 | 页面 | 目标 |
|---|---|---|
| 1 | 入金排障 | 掌握 9 个场景的排查路径 |
| 2 | 人工匹配指引 | 掌握日常匹配操作 |
| 3 | 本页 § 入金方式一览 | 了解各方式时效 |
| 4 | 银行流水采集 | 理解流水到达机制 |
常见误解
| 误解 | 事实 |
|---|---|
| "入金只有一种方式" | 有 10 种,分为 Push/Pull/Direct 三种模式,体验和时效差异极大 |
| "eDDA 和出金有关" | eDDA/eDDI 仅用于入金代扣。出金走企业网银转账 |
| "所有入金都需要匹配引擎" | 只有 Push 模式需要。Pull(eDDA)和 Direct(BST)跳过匹配引擎 |
| "入金到账时间取决于我们系统" | 大部分等待时间是银行流水到达的延迟,不是我们系统处理慢 |
| "BST 银证和 eDDA 代扣是同一种技术" | 完全不同。BST 走银证专线(SM2加密Socket),eDDA 走 FPS 体系(HTTPS/SM2 HTTP) |
| "自动入账 = 秒到" | 自动入账也需要等匹配引擎的 3 分钟周期 + SBA 入账时间。最快也要 3~5 分钟 |
读完之后
| 我想... | 去看 |
|---|---|
| 了解绑卡与授权如何开启入金通道 | 银行卡绑定与入金授权 |
| 了解匹配引擎怎么工作 | 匹配与自动入账 |
| 了解 eDDA 代扣完整流程 | eDDA 代扣入金 |
| 看各银行流水怎么进系统 | 银行流水采集 |
| 入金出问题了怎么办 | 入金排障 |
| 查限额、容差、超时的数字 | 入金规则速查 |
| 推动入金变更需求 | 入金变更指南 |
| 了解退款和冲正机制 | 退款与冲正 |
这个页面有帮助吗?