Skip to content

天星银行 Airstar Pull 模式 ​

本页说明

讲什么:天星银行 BST 渠道侧 REST API 规范 + moomoo 侧适配逻辑 适合谁:PM 了解对接细节 / 开发定位代码 / 运营理解银行特性 前置阅读:内银系 BST 总览、银行能力矩阵预计阅读:10 分钟 负责人:出入金产品团队

核心要点:天星是唯一使用 REST API(非 Socket)的 BST 银行,轮询模式决定了响应时间为分钟级而非秒级,但对接复杂度低于招行/民生。


能力总览 ​

能力支持情况协议/通道核心服务
BST 银证入金✅REST API(RSA-OAEP 加密)airstar_service (Go)
BST 银证出金✅auto_bs 银证自动出金airstar_service (Go)
Mandate 授权✅REST APIairstar_service (Go)
线上开户✅三合一流程(开户+授权+首笔入金)airstar_service (Go)
eDDA 授权❌——
eDDI 代扣❌——
FPS❌——

天星银行是 moomoo 接入的唯一虚拟银行 BST 通道——与招行/民生的传统二进制专线不同,天星采用现代 REST API 架构,支持 moomoo 端主动发起所有操作,且是唯一全面支持 CNH 的 BST 银行。


核心标识 ​

标识值说明
IMPORT_BANK_ID55系统内银行唯一编号
TransType304 (ASB_BST)天星银证转账专用类型
AUTO_SETTING_ID3自动出金配置 ID
服务名airstar_service核心银证服务
Proto 文件airstar_service/proto/airstar_service.proto接口定义
代码语言Go与招行/民生的 Python 不同

渠道接口概览 ​

维度说明
协议类型HTTP REST API
加密方式RSA-OAEP(SHA1, 200字节分块, Base64 编码)
数据格式JSON(加密后: {"messageBody": "base64..."} )
通信模式HTTP 请求-响应 + 轮询(polling)
编码UTF-8
认证方式RSA 密钥对(非证书)

为什么天星用 REST 而非 Socket?

天星是香港持牌虚拟银行(2019 年获牌),技术架构全面云原生。传统银行(招行/民生)因历史原因使用 Socket 专线通信,天星则直接提供标准 REST API——对开发更友好,但需要 moomoo 侧自行实现轮询机制来获取异步结果。


渠道侧接口详情 — 11 个银行侧 REST API + 14 个内部 RPC 方法 ​

天星提供 11 个银行侧 REST API + 14 个内部 RPC 方法,覆盖授权、入金、出金全生命周期:

授权类接口(4 个) ​

API 名称Endpoint方向用途
CreateAuth/authorization/applymoomoo → 银行创建 eDDA 授权(Mandate)
QueryAuth/authorization/statusmoomoo → 银行查询授权状态
CancelAuth/authorization/cancelmoomoo → 银行取消授权
NotifyAuthResult/authorization/resultmoomoo → 银行通知授权审批结果

入金类接口(2 个) ​

API 名称Endpoint方向用途
CreateTransfer(direction=deposit)/transfer/initmoomoo → 银行发起入金请求
QueryTransfer(direction=deposit)/transfer/statusmoomoo → 银行查询入金状态(轮询用)

统一 Transfer 接口

天星 API 使用统一的 Transfer 接口,通过 transfer_direction 字段区分入金(deposit)和出金(withdraw),而非独立的入金/出金端点。

出金/退款类接口(2 个) ​

API 名称Endpoint方向用途
CreateWithdrawRefund/transfer/withdraw/reversalmoomoo → 银行创建出金退款
QueryRefund/transfer/withdraw/reversal/statusmoomoo → 银行查询退款状态

账户类接口(2 个) ​

API 名称Endpoint方向用途
QuerySecAccount/account/infomoomoo → 银行查询证券账户信息(余额等)
NotifyDepositApproval/transfer/approvalmoomoo → 银行通知入金审批结果
所有接口均由 moomoo 主动调用

与民生银行(银行主动推送数据给 moomoo)不同,天星的银行侧接口全部由 moomoo 端主动发起调用。这意味着 moomoo 侧拥有完全的流程控制权,但也需要承担轮询、超时处理等额外逻辑。


核心接口字段详情 ​

CreateAuthReq — 创建授权请求 ​

用户在 moomoo App 端发起 Mandate 授权时的请求参数:

字段类型必填描述
request_idstring(16-50)✅唯一请求 ID。幂等性保证,不可重复
ciduint64✅客户 ID。moomoo UID
bank_card_numberstring(12)✅银行卡号。天星银行卡固定 12 位
id_card_typestring✅证件类型。取值 "HKID" 或 "CNID"
id_card_numberstring(1-35)✅证件号码。身份证/回乡证号
en_namestring(1-127)✅英文姓名。与银行预留姓名一致
phone_numberstring✅手机号。格式 "+86-1XXX" 或 "+852-XXX"

银行卡号固定 12 位

天星银行卡号统一为 12 位数字。与传统银行的 16~19 位卡号不同,开发时需注意长度校验规则。

CreateAuthRsp — 授权响应 ​

字段类型描述
codeuint32200 = 成功,其他 = 失败
totaluint32关联的 UID 总数
securities_client_nosarray[uint64]UID 列表

注意响应方向

注意:此处 CreateAuthRsp 为银行发起授权时 moomoo 侧的响应字段,非 moomoo 发起授权后的返回。moomoo 主动创建授权的响应为空(无额外字段)。

CreateDepositReq — 发起入金请求 ​

字段类型必填描述
request_idstring(16-50)✅请求 ID。幂等性保证
ciduint64✅客户 ID。moomoo UID
market_iduint32✅市场 ID。取值 1=HK, 2=US
account_iduint32✅账户 ID。证券账户 ID
currencystring✅币种。取值 HKD / USD / CNH
amountstring✅金额。字符串格式,如 "50000.00"
bank_card_numberstring(12)✅银行卡号。12 位天星卡号
en_namestring(1-127)✅英文姓名。与 Mandate 授权时一致

QueryDepositRsp — 入金查询响应 ​

轮询入金状态时返回的完整信息:

字段类型描述
deposit_iduint64入金任务 ID(系统内唯一)
request_idstring请求 ID(与 CreateDepositReq 对应)
ciduint64客户 ID
currencystring币种
amountstring金额
bank_card_numberstring银行卡号
en_namestring客户姓名
ref_idstringmoomoo 侧参考号
bank_ref_idstring银行侧参考号(对账关键)
statusstring入金状态(见下表)
fail_codestring失败代码(仅失败时有值)
fail_reasonstring失败原因描述
sourcestring来源:1=moomoo 端,2=银行端

入金状态值 ​

状态含义说明是否终态
new新建刚发起入金请求❌
pending处理中银行正在处理❌
success成功入金完成,资金已到账✅
failed失败银行拒绝(余额不足/限额等)✅
refunded已退款天星独有——入金成功后银行退回✅

QuerySecuritiesAccountRsp — 证券账户查询响应 ​

查询用户在天星授权下的完整证券账户信息:

字段类型描述
codeuint32200 = 成功
statusstring授权状态(Mandate 状态)
depositobject入金限制信息
withdrawobject出金限制信息
securities_accountsarray证券账户列表
bankcard_infoobject银行卡信息

SecuritiesAccount — 证券账户详情 ​

字段类型描述
market_iduint32市场 ID(1=HK, 2=US)
account_numberstring证券账号(16 位)
capital_infosarray[CapitalInfo]各币种资金信息
account_name_enstring英文账户名
account_name_cnstring中文账户名(简体)
account_name_hkstring繁体账户名

CapitalInfo — 资金信息 ​

字段类型描述单位
currencystring币种HKD/USD/CNH
cash_withdrawal_amountuint64可提取现金分(需除以 100)
max_withdrawal_amountuint64最大可提取金额分(需除以 100)

金额单位为"分"

CapitalInfo 中的金额字段单位是分(cents),不是元。例如 cash_withdrawal_amount = 5000000 表示 50,000.00 元。开发和运营在使用时需注意单位转换,避免金额错误。


与招行/民生的关键差异 ​

维度招行/民生天星
协议SM2 加密 Socket / ProtobufREST API + RSA-OAEP
通信模式Socket 双向链路(银行推送)HTTP 请求-响应 + 轮询
CNH 支持受限 / 完全不支持全面支持 HKD + USD + CNH
处理时段08:40 ~ 15:5908:30 ~ 15:59(提前 10 分钟)
入金结果获取Socket 实时推送最多 60 次轮询
出金结果获取Socket 实时推送最多 10 次轮询 + 2h 兜底同步
退款机制无有 REFUNDED 状态(需冲正)
授权模型银证签约(2 状态)Mandate 授权(6 状态)
线上开户不支持支持三合一流程
发起方仅 moomoo / 仅银行(视接口)moomoo + 银行双向
代码语言PythonGo
接口数量9 个 RPC11 个银行侧 REST API + 14 个内部 RPC 方法
数据格式二进制 / ProtobufJSON

一句话总结:招行/民生是银行主导的专线通信(推送模式),天星是 moomoo 主导的 API 调用(轮询模式)。


RSA-OAEP 加密方案 ​

加密参数 ​

参数值说明
算法RSA-OAEP非对称加密 + OAEP 填充
哈希函数SHA1OAEP 填充使用 SHA1
分块大小200 字节/块明文超过 200 字节需分块加密
编码方式Base64加密后 Base64 编码

加密流程 ​

请求/响应格式 ​

加密后的请求体:

json
{
  "messageBody": "dGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIGVuY3J5cHRlZCBtZXNzYWdl..."
}

解密流程(收到响应后):

  1. 从 messageBody 取出 Base64 字符串
  2. Base64 解码得到密文
  3. 按块 RSA-OAEP 解密
  4. 拼接明文 → 解析 JSON
与民生 SM2 的安全性对比
维度民生 SM2天星 RSA-OAEP
算法类型国密椭圆曲线RSA 非对称
密钥长度256 位2048+ 位
合规要求中国境内银行必须国际通用
分块处理不需要200 字节/块
性能更快较慢(大密钥)
天星作为香港虚拟银行,不受中国国密算法合规要求约束,因此使用国际通用的 RSA 方案。

轮询策略 ​

天星不支持 Socket 推送,所有异步操作结果都通过**轮询(polling)**获取。这是天星接入中最需要关注的技术细节。

入金轮询 ​

Job 名称职责轮询上限后续动作
AsbBstCreateJob发送入金请求到天星—创建成功后进入轮询
AsbBstCreateResultJob轮询入金结果最多 60 次成功→入账 / 失败→通知 / 超时→人工
AsbBstDepositJob确认成功后执行入账—创建入金流水、更新余额

出金轮询 ​

Job 名称职责轮询上限后续动作
AsbBstTransfer出金指令 + 结果轮询最多 10 次成功/失败→处理 / 超时→兜底
SyncAsbBstWithdraw超时后的兜底同步2 小时窗口窗口内有结果→处理 / 超时→人工

轮询超时 ≠ 交易失败

轮询超时只意味着 moomoo 侧未在预期时间内获得银行侧结果。交易可能仍在银行侧处理中。运营遇到此类情况需主动联系天星确认交易状态,切勿直接判定为失败。


限额体系 ​

三层限额配置 ​

天星采用与招行/民生相同的三层限额体系,但具体数值不同:

币种单笔上限(max)累计报警(alarm)每日熔断(stop)
HKD3,000,00040,000,00015,000,000
USD500,00010,000,0003,000,000
CNH0(无限制)0(不报警)0(不熔断)

CNH 无限额

天星的 CNH 限额全部设为 0,表示不设限制。这与 CNH 作为天星独家优势的产品定位一致——鼓励人民币出入金。但实际操作中仍受银行侧自有限额约束。

熔断机制 ​

熔断触发条件:当日累计金额 - 出金金额 < stop_amount

熔断阶段系统动作
触发自动关闭当日该币种的自动出金
告警飞书消息通知运营团队
恢复运营确认风险可控后手动恢复,或次日自动重置

线上开户最低入金 ​

币种最低入金说明
HKD10,000确保新客有足够交易资金
USD1,500—
CNH10,000—

普通入金无最低金额要求,此限额仅针对线上开户三合一流程的首笔入金。


REFUNDED 退款状态(天星独有) ​

REFUNDED 是天星区别于所有其他 BST 银行的独特状态——入金成功到账后银行又发起退款。

REFUNDED vs FAILED 对比 ​

维度FAILED(失败)REFUNDED(退款)
含义银行拒绝入金请求入金已成功到账后银行退回
资金从未到达证券账户已到账后被退回
余额影响无(从未增加)已增加后需扣回
冲正操作不需要必须执行(自动冲正)
用户体验入金失败提示入金成功后又收到退款通知
普遍性所有银行都有仅天星

冲正流程 ​

REFUNDED 触发场景 ​

场景说明
银行反欺诈入金后银行风控系统检测到异常交易
合规要求监管部门要求退回特定交易
用户投诉用户在银行端投诉未授权交易
系统错误银行侧重复入账后修正

冲正时余额不足

如果用户在入金成功后已将资金用于交易(买入股票等),冲正时可能出现余额不足无法全额扣回的情况。此时需要运营人工介入处理——这是 REFUNDED 状态最复杂的异常场景。


安全检查(天星独有) ​

天星银行在授权和入金流程中加入了风险等级评估,这是传统 BST 银行没有的机制:

风险等级处理 ​

风险等级等级值系统动作说明
Level 0-2APPROVE正常通过低风险交易,自动放行
Level 3MANUAL转人工审核中风险,需运营人工审核后决定
Level 4REJECT直接拒绝高风险,自动拒绝交易
VERIFY—需要额外验证要求用户完成额外身份验证

风险等级来源 ​

风险等级由天星银行侧返回,moomoo 侧据此决定处理方式。银行侧的风控模型考虑以下因素:

  • 交易金额是否异常
  • 交易频率是否异常
  • 客户历史行为
  • 设备/IP 风险
  • 反洗钱(AML)规则

与 moomoo 侧风控的协作 ​

双重风控意味着:一笔交易可能通过了 moomoo 侧的风控(不在黑名单、不超限额),但被天星侧的风控拦截(Level 3/4)。运营在排查入金/出金失败时需同时检查两侧的风控日志。


入金流程 ​

两种入金来源 ​

来源source 值说明
moomoo 端发起1用户在 moomoo App 点击入金
银行端发起2用户在天星银行 App 发起转账到证券账户

银行端发起(source=2)是天星独有——招行/民生的 BST 入金只能从 moomoo 端发起。

完整入金流程 ​

入金时段 ​

时段时间范围说明
正常交易时段08:30 ~ 15:59比招行/民生提前 10 分钟开始
非交易时段16:00 ~ 次日 08:29不接受新请求

出金流程 ​

完整出金流程 ​

auto_bs 自动出金条件 ​

天星出金走 auto_bs 自动出金通道,AUTO_SETTING_ID = 3:

条件说明
Mandate 状态 = OPEN授权关系有效
账户状态正常非冻结、非销户
不在出金黑名单黑名单检查通过
单笔不超限HKD ≤ 300万 / USD ≤ 50万
每日不熔断当日累计未触发 stop 阈值
交易时段内08:30 ~ 15:59
风险等级 ≤ Level 2天星侧风控通过

不满足任一条件则转人工审批。注意第 7 条(风险等级)是天星独有的自动出金前置条件。


线上开户(天星独有) ​

天星支持三合一线上开户——新客户在 moomoo App 内一站式完成:

三合一 vs 传统流程 ​

步骤传统流程(招行/民生)三合一(天星)
开户moomoo App 完成moomoo App 完成
签约去银行柜台/网银签约moomoo App 内完成 Mandate
入金返回 moomoo App 入金紧接着完成首笔入金
总耗时1~3 天(含银行签约)数分钟

首笔入金限额 ​

币种最低入金普通入金最低倍数
HKD10,000无要求—
USD1,500无要求—
CNH10,000无要求—

首笔入金设置较高最低限额的目的是确保新客户有足够资金进行交易,避免"注册但不交易"的无效用户。


异常场景手册 ​

授权异常(5 类) ​

#异常症状原因处理
1授权停在 PROCESSINGMandate 长时间无状态变更银行处理延迟查询 QueryAuth 确认状态
2授权 FAILCreateAuth 返回失败姓名/证件不匹配核实用户信息,引导重试
3授权 CANCEL用户在银行端取消用户主动操作确认用户意图
4部分市场映射失败3 市场中部分绑定异常市场配置问题手动补充绑定关系
5CancelAuth 失败取消授权请求被拒绝Mandate 非 OPEN 状态检查当前状态后重试

入金异常(7 类) ​

#异常症状原因处理
1入金创建失败CreateDeposit 返回错误参数异常/Mandate 非 OPEN检查参数和 Mandate 状态
2轮询 60 次超时status 始终为 pending银行处理异常人工联系天星确认
3入金失败status=failed银行拒绝查看 fail_code/fail_reason
4入金退款status=refunded银行发起退款执行冲正,通知用户
5冲正余额不足REFUNDED 后扣回失败用户已消费入金资金运营人工介入处理
6银行端入金未同步source=2 但 moomoo 未收到API 调用丢失手动查询天星 API 补录
7重复入金同一笔创建多条记录request_id 去重失败通过 request_id/bank_ref_id 排查

出金异常(5 类) ​

#异常症状原因处理
1出金指令失败AsbBstTransfer 报错参数异常/银行拒绝检查错误码,释放冻结
210 次轮询超时AsbBstTransfer 用尽银行处理慢进入 SyncAsbBstWithdraw
32h 兜底超时SyncAsbBstWithdraw 窗口结束银行处理异常人工联系天星确认
4冻结未释放出金失败但资金仍冻结释放流程异常手动释放冻结资金
5银行端出金未同步用户从天星 App 发起出金回调丢失手动查询 API 执行扣款

常见客诉 Top 3 ​

#用户反馈原因客服话术
1"余额不足无法入金"140630005 银行余额不够"请确认天星银行账户余额充足后重试"
2"授权一直处理中"Mandate 停在 PendingAuthorise"银行正在审核您的授权申请,通常 1-2 个工作日内完成"
3"入金成功后资金被退回"REFUNDED 状态"银行因合规原因退回了本次入金,请联系客服了解详情"

监控与告警 ​

天星 13 项关键告警 ​

#告警项触发条件严重度处理方式
1授权创建超时Mandate 在 PROCESSING 超过阈值高检查天星 API 连通性
2授权失败率突增单位时间内 FAIL 数量超限高排查银行侧异常
3入金创建失败AsbBstCreateJob 连续失败高检查请求参数和 API 状态
4入金轮询超时60 次轮询用尽高人工联系天星确认
5入金退款(REFUNDED)收到 REFUNDED 状态严重立即冲正,通知用户和运营
6出金轮询超时10 次轮询用尽高进入 SyncAsbBstWithdraw
7出金兜底超时2h 窗口结束仍 pending严重人工确认银行侧状态
8冻结未释放出金失败但冻结未回滚严重手动释放冻结
9每日熔断触发当日累计达到 stop 阈值中运营确认后决定是否恢复
10累计报警触发累计达到 alarm 阈值中运营关注,评估风险
11重复交易检测request_id 重复高检查去重逻辑
12API 连通性异常天星 API 响应超时或错误率升高严重联系天星银行技术支持
13银行端发起量异常source=2 交易量突增中排查是否为正常业务波动

代码位置与服务部署 ​

维度说明
服务名airstar_service
代码语言Go
Proto 文件airstar_service/proto/airstar_service.proto
依赖RSA 加密库、HTTP 客户端、JSON 序列化

关键代码模块 ​

模块职责
airstar_service/api/11 个银行侧 REST API 的请求/响应处理
airstar_service/crypto/RSA-OAEP 加解密(200 字节分块)
airstar_service/job/轮询 Job(CreateResult/Transfer/Sync)
airstar_service/mandate/Mandate 授权状态机
airstar_service/deposit/入金逻辑(含 REFUNDED 冲正)
airstar_service/withdraw/出金逻辑(含熔断检查)
airstar_service/proto/Protobuf 接口定义
airstar_service/config/银行连接配置、RSA 密钥、限额参数

需求变更指引 ​

变更需求改动位置说明
修改限额SQL seed + configHKD/USD/CNH 三层限额
修改轮询次数job/ 中的轮询逻辑调整 60 次/10 次上限
修改处理时段时段校验逻辑当前 08:30 开始
新增支持币种CreateDepositReq + 限额配置需天星侧同步支持
修改 RSA 密钥config/ + crypto/需与天星协调密钥轮换
调整风险等级策略安全检查处理逻辑Level 3 改为自动拒绝等
修改冲正逻辑deposit/ REFUNDED 处理调整冲正失败的兜底策略
修改自动出金条件auto_bs 配置 + AUTO_SETTING_ID=3参考 出金规则手册
新增 API 接口天星提供新 API 文档 → 实现对应 handler需天星侧先发布接口
调整告警阈值监控配置根据业务量调整灵敏度

读完之后 ​

我想...去看
看三家 BST 银行的整体对比内银系 BST 总览
了解民生的 Protobuf/SRPC 方案民生银行 MS
看出金自动审批条件和三层限额出金规则手册
查天星错误码(140630xxx / 140670xxx)统一错误码中心
看 BST 任务的运行频率和告警定时任务与监控
看所有银行的能力对比银行能力矩阵
了解 SBA 资金编排的冻结-释放机制SBA 服务架构
这个页面有帮助吗?

内部业务文档 · 仅限 moomoo 团队使用