深色模式
星展 DBS
本页说明
讲什么:星展银行的 API 流水采集、子账户优先匹配模式、SubAccountSDK 集成的完整业务规则 适合谁:需要了解星展对接细节的产品经理 前置阅读:银行能力矩阵预计阅读:4 分钟 负责人:入金产品经理
核心要点:星展的核心特点是子账户优先匹配——每个用户有独立的 DBS 子账户,入金先按子账户精确匹配再走通用逻辑。
能力总览
| 能力 | 支持情况 | 协议/通道 | 核心服务 |
|---|---|---|---|
| 入金流水采集 | ✅ | API 定时拉取 | 标准 BankFlow 采集 |
| 子账户入金 | ✅ | SubAccountSDK | DbsMatch 子账户匹配 |
| 出金 | ❌ | — | — |
| eDDA/eDDI | ❌ | — | — |
| FPS | ❌ | — | — |
| 银证 BST | ❌ | — | — |
星展是子账户匹配模式的典型代表——匹配逻辑围绕子账户归属展开,用户必须有子账户历史记录才能匹配。HKD 自动入账容差高达 -350,是所有银行中最宽的自动入账容差。
渠道接口概览
| 维度 | 说明 |
|---|---|
| Protocol | API |
| 数据采集 | 定时拉取 |
| 子账户管理 | SubAccountSDK |
| IMPORT_BANK_ID | 16 (DBS) |
| TransType | 208 |
| 匹配引擎 | DbsMatch |
入金:API 流水采集
采集方式
星展通过标准 API 接口提供流水数据,系统定时拉取后写入统一的 BankFlow 格式。
数据流
API 接口字段
星展的流水数据基于通用 BankFlow 格式,包含以下关键字段:
| 字段 | 说明 | 用途 |
|---|---|---|
| transaction_id | 交易唯一标识 | 去重唯一键 |
| transaction_date | 交易日期 | 日期窗口匹配 |
| value_date | 起息日 | 辅助日期参考 |
| currency | 币种 | 币种匹配条件 |
| amount | 交易金额 | 金额容差匹配 |
| payer_name | 付款人姓名 | 姓名精确匹配 |
| payer_account | 付款人银行账号 | 子账户匹配核心字段 |
| beneficiary_account | 收款账号 | moomoo 收款账户标识 |
| transaction_type | 交易类型 | 区分转入/转出 |
| remarks | 交易备注 | 补充信息 |
关键字段
payer_account(付款人银行账号)是 DBS 匹配的核心字段——系统用它去 SubAccountSDK 查询是否属于某个用户的已分配子账户。
匹配规则 (DbsMatch)
核心特征:子账户优先匹配
星展采用子账户优先匹配模式——与其他银行先看金额/姓名不同,星展首先检查流水账号是否在用户的子账户列表中。只有子账户检查通过,才进入后续的金额和姓名匹配。
| 维度 | 规则 | 说明 |
|---|---|---|
| 自动入账 | ✅ 已启用 | 子账户+金额+姓名全部通过时自动入账 |
| 前置条件 | 子账户历史检查 | 必须通过 SubAccountSDK 验证 |
| 币种匹配 | 必须一致 | 流水币种 = 申请币种 |
| 姓名匹配 | 英文精确匹配 | 自动入账条件之一 |
| 日期窗口 | -3 ~ +2 天 (daySimilar) | 标准日期规则 |
金额容差
| 场景 | HKD 容差 | USD 容差 |
|---|---|---|
| 自动入账 | CRM - 350 ≤ 流水 ≤ CRM | CRM - 50 ≤ 流水 ≤ CRM |
CRM-350 HKD 是所有银行中最宽的自动入账容差
为什么这么大? 星展的子账户入金通常涉及跨行转账,中间可能经过多个中转行,每个中转行可能收取手续费。由于子账户本身已经证明了资金归属(只有持有该子账户的用户才能转入),系统可以放心使用更大的容差来覆盖不确定的手续费。
SubAccountSDK 子账户体系
SubAccountSDK 是子账户管理的核心组件,负责维护用户与子账户的映射关系:
| 功能 | 说明 |
|---|---|
| 子账户分配 | 为每个用户分配唯一的 DBS 子账户号 |
| 归属查询 | 根据银行账号反查所属用户 |
| 历史记录 | 维护用户的子账户使用历史 |
| 跨银行支持 | 同一 SDK 同时服务 DBS、SCB 等子账户银行 |
子账户匹配的核心逻辑:
完整匹配逻辑
| 条件组合 | 匹配结果 | 说明 |
|---|---|---|
| 币种匹配 + 子账户历史存在 + 姓名精确 + 金额在容差内 | 自动入账 (Deposit Match) | 最理想情况,系统自动完成入账 |
| 币种匹配 + 子账户历史存在 | 普通匹配 | 子账户本身证明资金归属 |
| 币种匹配 + 子账户历史不存在 | 不匹配 | 无法确认资金归属 |
| 币种不匹配 | 不匹配 | 基础条件不满足 |
为什么子账户存在就能返回普通匹配? 子账户是分配给特定用户的唯一账号。如果流水的付款账号在某用户的子账户列表中,即使金额或姓名不完全匹配(可能因手续费扣减或姓名格式差异),也可以合理推断这笔钱属于该用户。运营人员只需做最终确认。
匹配条件详解
| 条件 | 检查方法 | 自动入账 | 普通匹配 |
|---|---|---|---|
| 币种 | 直接比较 | ✅ 必须 | ✅ 必须 |
| 子账户归属 | SubAccountSDK 查询 | ✅ 必须 | ✅ 必须 |
| 姓名 | 英文精确匹配 | ✅ 必须 | ❌ 不要求 |
| 金额 | amountSimilarForAuto | ✅ 必须 | ❌ 不要求 |
| 日期 | daySimilar (-3~+2) | ✅ 必须 | ❌ 不要求 |
定时任务
| 任务 | 频率 | 说明 |
|---|---|---|
| 流水采集 | 定时拉取 | 从星展 API 获取最新流水 |
| match:dbs | 每 3 分钟 | 执行星展流水匹配 |
与其他子账户银行对比
星展不是唯一支持子账户的银行,以下是子账户银行的横向对比:
| 维度 | 星展 DBS | EWB 子账户 | 渣打 SCB |
|---|---|---|---|
| bank_id | 16 | 38 | — |
| 匹配引擎 | DbsMatch | EwbSubAccountMatch | — |
| 子账户 SDK | ✅ SubAccountSDK | ❌ 独立逻辑 | ✅ SubAccountSDK |
| 自动入账 | ✅ | ✅ | — |
| HKD 自动入账容差 | -350 | -40 | — |
| USD 自动入账容差 | -50 | ❌ 不支持 | — |
| 子账户检查 | 前置条件 | 隐含在匹配中 | 前置条件 |
| 无子账户时 | 不匹配 | 不匹配 | — |
DBS 容差为什么远大于 EWB 子账户? EWB 子账户以本地 HKD 转账为主,手续费低;DBS 子账户涉及更多跨行转账场景,中转费用不确定性更高。
子账户入金全流程
从用户视角看,DBS 子账户入金的完整流程如下:
需求变更指引
| 变更需求 | 改动位置 | 说明 |
|---|---|---|
| 修改自动入账容差 | DbsMatch.php → amountSimilarForAuto() | 调整 HKD -350 / USD -50 阈值 |
| 修改子账户匹配逻辑 | DbsMatch.php → SubAccountSDK 调用 | 调整子账户归属验证规则 |
| 新增子账户来源 | SubAccountSDK 配置 | 添加新的子账户分配渠道 |
| 启用辅助姓名匹配 | DbsMatch.php → 改为 nameSimilar() | 从精确匹配改为相似匹配 |
| 修改日期窗口 | DbsMatch.php → daySimilar() | 调整 -3~+2 天范围 |
| 新增支持币种 | DbsMatch.php → 币种判断 + 容差配置 | 添加新币种的匹配规则 |
| 修改匹配频率 | deposit/doc/crontab.sh → match:dbs | 调整 cron 间隔 |
| 子账户分配策略变更 | SubAccountSDK → 分配逻辑 | 修改子账户号的生成/分配规则 |
监控与告警
| 告警项 | 触发条件 | 严重度 | 处理步骤 |
|---|---|---|---|
| 子账户 API 连接超时 | SubAccountSDK 请求超时 | 🟡 中 | 检查网络连通性,确认星展 API 是否正常 |
| 流水采集延迟 | API 返回数据滞后 | 🟡 中 | 确认查询时间范围,必要时手动补采 |
| 子账户不匹配 | 流水账号与系统记录不一致 | 🔴 高 | 核实子账户映射关系,手动修正 |
SubAccountSDK 接口详情
流水查询接口
| 字段 | 类型 | 必填 | 描述 |
|---|---|---|---|
sub_account_id | string | ✅ | 星展子账户 ID |
start_date | string | ✅ | 查询起始日期。格式 YYYY-MM-DD |
end_date | string | ✅ | 查询结束日期。格式 YYYY-MM-DD |
currency | string | ❌ | 币种过滤。取值 HKD / USD |
流水响应字段
| 字段 | 类型 | 描述 |
|---|---|---|
transaction_id | string | 交易唯一 ID |
transaction_date | datetime | 交易日期时间 |
amount | decimal | 交易金额 |
currency | string | 币种 |
balance_after | decimal | 交易后余额 |
payer_name | string | 付款人姓名 |
payer_account | string | 付款人账号 |
reference | string | 交易参考号 |
自动入账 vs 普通匹配
星展的匹配规则区分两种模式:
| 维度 | 自动入账 | 普通匹配 |
|---|---|---|
| 金额容差 (HKD) | -350 | -420 |
| 金额容差 (USD) | -50 | -60 |
| 日期窗口 | -3~+2 天 | -3~+2 天 |
| 子账户校验 | ✅ 必须校验历史 | ❌ 不校验 |
| 人工确认 | 不需要 | 需要 |
| 适用场景 | 小额常规入金 | 大额或首次入金 |
子账户历史校验
自动入账要求该子账户历史上至少有一笔成功入金记录。新开子账户的首笔入金不会自动入账,需要运营人工匹配确认。
读完之后
| 我想... | 去看 |
|---|---|
| 看星展在各银行中的位置 | 银行能力矩阵 |
| 了解匹配引擎的完整逻辑 | 匹配与自动入账 |
| 看另一家子账户银行(EWB) | EWB |
| 对比渣打的子账户入金 | 渣打 SCB |
| 查 TransType 和 Bank ID 对照 | 入金规则速查 |
这个页面有帮助吗?