Skip to content

民生银行 MS

本页说明

讲什么:民生银行银证转账(BST)渠道侧 Protobuf/SRPC 协议规范 + moomoo 侧适配逻辑 适合谁:PM 了解对接细节 / 开发定位代码 / 运营理解银行特性 前置阅读内银系 BST 总览银行能力矩阵预计阅读:8 分钟 负责人:出入金产品团队

核心要点:民生采用 Protobuf/SRPC 协议的 Socket 模式,与招行共用双向链路架构但序列化方式不同。


能力总览

能力支持情况协议/通道核心服务
BST 银证入金Protobuf/SRPC(SM2 国密加密)ms_stock_bank_transaction
BST 银证出金auto_bs 银证自动出金ms_stock_bank_transaction
eDDA 授权
eDDI 代扣
FPS
入金流水匹配

民生银行是 moomoo 接入的第二家 BST 银行——与招行共同构成内银系 BST 双通道,但采用完全不同的协议栈(Protobuf/SRPC vs 二进制 Socket)。


核心标识

标识说明
IMPORT_BANK_ID13CMBC,系统内银行唯一编号
TransType101 (BST), 204 (普通)101 用于银证转账,204 用于普通入金
AUTO_SETTING_ID1自动出金配置 ID
服务名ms_stock_bank_transaction核心银证服务
代码目录ms_sb_trans_python/服务代码根目录

渠道接口概览

维度说明
协议类型Protobuf 序列化 + SRPC 框架
加密方式SM2 国密算法(国家商用密码标准)
数据格式Protobuf 二进制序列化(非 JSON/XML)
通信模式RPC 请求-响应(同步调用)
编码GB18030(中文姓名等字段使用 bytes 类型)
签名算法SM2 国密签名,确保数据不可篡改

与招行的协议区别

招行使用自定义二进制 Socket 协议,民生使用 Google Protobuf + 自研 SRPC 框架。两者都走 SM2 加密,但序列化方式不同——招行是手工二进制编码,民生是 Protobuf 自动序列化。Protobuf 方案在可维护性上更优。


渠道侧接口详情 — 9 个 RPC 方法

民生银行提供 9 个 RPC 接口,通过 Request ID 标识不同的业务操作:

方法名Request ID请求 / 响应类型用途(方向)
OpenApproval0x01OpenApprovalReq / Rsp开户审批(民生 → moomoo)
SyncData0x02CrmReq / CrmRsp同步客户/交易数据(民生 → moomoo)
WithDrawApproval0x03WithDrawApprovalReq / Rsp出金审批(民生 → moomoo)
Reconciliate0x04ReconciliationReq / Rsp每日对账(民生 → moomoo)
ChangePassword0x05ChangePasswordReq / Rsp修改交易密码(民生 → moomoo)
WithDrawAck0x06WithDrawAckReq / Rsp出金确认——银行确认到账(民生 → moomoo)
LoginIn0x07LoginInReq / Rsp柜员登录系统(民生 → moomoo)
LoginOut0x08LoginOutReq / Rsp柜员登出系统(民生 → moomoo)
CreateWithdrawFutu0x09WithdrawFutuReq / Rsp创建出金——moomoo 侧主动发起(moomoo → 民生)
方法调用流程简述
  1. 开户流程:用户在银行端签约 → 银行调用 OpenApproval → moomoo 审批 → 返回结果
  2. 入金流程:用户在银行端发起 → 银行通过 SyncData 推送入金数据 → moomoo 处理到账
  3. 出金流程:用户在 moomoo 端发起 → CreateWithdrawFutu 发送出金请求 → 银行处理 → WithDrawAck 确认
  4. 对账流程:每日银行发起 Reconciliate → 双方核对交易数据 → 发现差异人工处理

核心接口字段详情

CrmReq — 数据同步请求

SyncData 方法的请求体,是民生向 moomoo 推送各类业务数据的统一入口:

字段类型描述备注
datestring数据日期格式 YYYYMMDD
typeReqType enum请求类型(10 种)决定本次推送的数据类别

ReqType 枚举 — 10 种数据类型

枚举值名称说明触发时机
1OPEN开户数据用户在银行端完成银证签约
2OPENRES开户结果moomoo 审批后返回给银行
3DEPOSIT入金数据用户发起入金转账
4WITHDRAW出金数据出金请求到达银行
5WITHDRAWRES出金结果银行处理出金后返回
6CLOSE销户数据用户解除银证关系
7OPENRC开户对账每日对账——单笔开户
8BATCHOPENRC批量开户对账每日对账——批量开户
9WITHDRAWRC出金对账每日对账——单笔出金
10BATCHWITHDRAWRC批量出金对账每日对账——批量出金

数据推送 vs 轮询

与天星(REST API 轮询)不同,民生采用推送模式——银行主动通过 SyncData 将数据推送到 moomoo 侧。moomoo 不需要定时轮询银行接口。

DepositItem — 入金数据字段

银行推送入金数据时,每笔入金以 DepositItem 表示:

字段类型描述取值范围/格式
TraDatstring交易日期YYYYMMDD
TraTimstring交易时间HHMMSS
RefNostring参考号银行侧唯一标识,对账关键
SDNostring券商编号固定值,标识 moomoo
SecAcstring证券账号moomoo 账号(与 CID 映射)
CusAcstring客户账号银行卡号
Ccystring币种HKD / USD(不支持 CNH)
Amtstring金额字符串格式,如 "50000.00"
AcCkDtstring对账日期YYYYMMDD,对账时使用

WithDrawItem — 出金数据字段

字段类型描述取值范围/格式
TraDatstring交易日期YYYYMMDD
RefNostring参考号银行侧唯一标识
SDNostring券商编号固定值
SecAcstring证券账号moomoo 账号
CusAcstring客户账号银行卡号
Ccystring币种HKD / USD
Amtstring金额字符串格式
AcCkDtstring对账日期YYYYMMDD
SucFlgstring成功标志Y = 成功 / N = 失败
TraTimestring交易时间HHMMSS

OpenApprovalReq — 开户审批请求

银行推送开户审批,moomoo 侧决定是否通过:

字段必填类型描述
AgrNostring协议号。银证签约协议唯一标识
SDNostring券商编号。固定值
SecAcstring证券账号。需在 moomoo 系统中存在
CusAcstring客户账号。银行卡号
AprStsstring审批状态。银行端预审结果
RejRsnstring拒绝原因。仅审批不通过时有值
CusEnmstring客户英文名。用于姓名校验
CusCnmbytes客户中文名。bytes 类型(GB18030 编码)

CusCnm 使用 bytes 类型

中文姓名字段 CusCnm 不是 string 而是 bytes 类型。这是因为 Protobuf 的 string 要求 UTF-8 编码,但民生银行使用 GB18030 编码传输中文——如果用 string 类型会导致解码错误。开发时需特别注意编码转换。

WithDrawApprovalReq — 出金审批请求

字段必填类型描述
OrgRefNostring原始参考号。关联原始出金请求
SDNostring券商编号。固定值
SecAcstring证券账号。moomoo 账号
CusAcstring客户账号。银行卡号
Ccystring币种。HKD / USD
Amtstring金额。字符串格式
AprStsstring审批状态。通过 / 拒绝
RejRsnstring拒绝原因。仅拒绝时填写

与招行的关键差异

民生和招行同属内银系 BST,但协议和实现有显著差异:

维度招行 CMB民生 MS
IMPORT_BANK_ID1213
AUTO_SETTING_ID21
协议自定义二进制 Socket 协议Protobuf/SRPC 框架
序列化手工二进制编码/解码Protobuf 自动序列化
加密算法SM2 国密SM2 国密
CNH 支持仅限 HK 银行卡持有者完全不支持
处理时段08:40 ~ 15:5908:40 ~ 15:59
保证金时段08:40 ~ 10:5908:40 ~ 10:59
错误码体系Socket 响应码(0/-5/-6)Protobuf 错误枚举(2001~2006)
对账方式每日文件对账SyncData(type=7~10)推送对账
服务名cmb_stock_transms_stock_bank_transaction
代码语言PythonPython
接口数量9 个 RPC 方法

一句话总结:招行是"裸"二进制协议(灵活但维护难),民生是 Protobuf 标准协议(结构清晰但依赖 proto 文件同步)。


CNH 限制

民生银行完全不支持人民币(CNH)币种。这是在代码层面硬编码的限制:

checkCurrency() → 检测到 CNH → 直接拒绝 → 返回错误码 2001 (MsBsRejRsn::LOCK_OF_CASH)
币种支持情况说明
HKD完全支持
USD完全支持
CNHcheckCurrency() 直接拒绝

CNH 入金会被误报为"资金不足"

由于 CNH 拒绝使用的错误码是 2001(LOCK_OF_CASH = 资金不足),用户可能看到"资金不足"的错误提示,但实际原因是币种不支持。运营排查时需注意区分。

对比

  • 招行:CNH 仅限 HK 银行卡持有者(有条件支持)
  • 天星:HKD / USD / CNH 全面支持
  • 民生:CNH 完全不支持

错误码体系

民生特有错误码(MsBsRejRsn 枚举)

错误码枚举名含义处理方式
2001LOCK_OF_CASH资金不足 / 币种不支持。账户余额不足,或 CNH 入金被拦截通知用户检查余额/币种
2002ACCOUNT_ABNORMAL账户状态异常。账户被冻结、已销户等联系民生银行确认账户状态
2003OTHER_REJECTION其他拒绝原因。银行侧风控拦截等人工排查,联系银行获取详情
2004NSS_ISSUENSS 问题。网络安全子系统异常技术排查网络/证书配置
2005GDCA_ISSUEGDCA 问题。广东省数字证书认证异常KYC/证书相关排查
2006INVALID_BANKCARD银行卡无效。卡号错误、已注销、未激活引导用户重新绑卡

与通用 BST 错误码的映射

民生错误码对应通用状态对用户的展示
2001FAILED(入金失败)"资金不足,请检查银行账户余额"
2002FAILED(账户异常)"银行账户状态异常,请联系银行"
2003FAILED(拒绝)"银行拒绝处理,请联系客服"
2004FAILED(系统异常)"系统异常,请稍后重试"
2005FAILED(KYC 异常)"身份验证异常,请联系客服"
2006FAILED(卡无效)"银行卡无效,请更换银行卡"

入金流程

民生 BST 入金流程

民生入金由银行端主导——用户在民生银行 App/柜台发起转账到证券账户:

入金时段限制

时段时间范围可执行操作
正常交易时段08:40 ~ 15:59入金 + 出金
保证金入金时段08:40 ~ 10:59仅保证金类入金
非交易时段16:00 ~ 次日 08:39不接受入金/出金请求

时段外入金

民生银行在非交易时段发起的入金请求会被 moomoo 侧拒绝。与天星不同(天星会暂存请求等待交易时段),民生需要用户在交易时段内重新发起。


出金流程

标准出金流程

民生出金支持两种模式:

模式触发方式接口说明
moomoo 端发起用户在 moomoo App 点击出金CreateWithdrawFutu (0x09)moomoo 主动调用银行接口
银行端发起银行推送出金请求WithDrawApproval (0x03)民生银行推送,moomoo 审批

moomoo 端出金流程

银行端出金审批流程

当用户在民生银行端发起出金时:

  1. 银行发送 WithDrawApproval(0x03)到 moomoo
  2. moomoo 执行风控检查(余额、限额、黑名单等)
  3. 审批通过:返回 AprSts = 通过 → 银行执行转账
  4. 审批拒绝:返回 AprSts = 拒绝 + RejRsn(拒绝原因)

auto_bs 自动出金

民生出金走 auto_bs 自动出金通道,AUTO_SETTING_ID = 1。自动出金需满足以下全部条件:

条件说明
账户状态正常非冻结、非销户
不在黑名单出金黑名单检查通过
单笔不超限金额在限额范围内
每日不熔断当日累计未触发熔断
交易时段内08:40 ~ 15:59
币种支持HKD 或 USD(非 CNH)

不满足任一条件则转人工审批。


对账机制

每日对账流程

民生通过 SyncData 接口的 4 种对账类型实现每日对账:

ReqType对账类型说明
7 (OPENRC)单笔开户对账逐笔核对开户记录
8 (BATCHOPENRC)批量开户对账批量核对开户记录
9 (WITHDRAWRC)单笔出金对账逐笔核对出金记录
10 (BATCHWITHDRAWRC)批量出金对账批量核对出金记录

对账差异处理

差异类型说明处理
长款(moomoo 有,银行无)moomoo 侧多了一笔交易核实是否银行漏推送,必要时冲正
短款(银行有,moomoo 无)银行侧多了一笔交易核实是否 moomoo 漏处理,必要时补录
金额不一致同一笔交易金额不同以银行侧为准,调整 moomoo 侧记录
状态不一致同一笔交易状态不同人工判断并修正

安全与加密

SM2 国密算法

民生银行使用中国国家商用密码标准 SM2 算法进行通信加密:

维度说明
算法类型SM2 椭圆曲线公钥密码
密钥长度256 位
等效安全性约等于 RSA-3072
用途请求/响应数据加密 + 数字签名
合规要求中国境内银行通信必须使用国密算法

加密流程

  1. 请求端:将 Protobuf 序列化后的二进制数据用 SM2 公钥加密
  2. 传输:加密后的数据通过 SRPC 框架传输
  3. 接收端:用 SM2 私钥解密,再用 Protobuf 反序列化
  4. 签名验证:每个请求附带 SM2 数字签名,接收端验签确保数据完整性

异常场景手册

入金异常(4 类)

#异常症状原因与处理
1入金被拒(2001)银行返回 LOCK_OF_CASHCNH 币种被拦截 / 余额不足。确认币种,若为 CNH 则告知不支持
2账户异常(2002)银行返回 ACCOUNT_ABNORMAL银行卡冻结/销户。联系民生银行确认状态
3SyncData 未到达moomoo 未收到入金推送网络中断/SRPC 通信异常。检查网络连通性,查看 SRPC 日志
4数据解密失败Protobuf 反序列化错误SM2 密钥不匹配/数据损坏。检查密钥配置,联系银行技术

出金异常(5 类)

#异常症状原因与处理
1CreateWithdrawFutu 失败出金请求被银行拒绝参数错误/银行侧风控。检查请求参数和错误码
2WithDrawAck 未到达出金后长时间无确认银行处理延迟/通信中断。人工查询银行侧状态
3冻结未释放出金失败但资金仍冻结回滚流程异常。手动释放冻结
4审批超时WithDrawApproval 无响应moomoo 审批服务异常。检查审批服务日志
5重复出金同一笔出金多次执行RefNo 去重失败。通过 OrgRefNo 排查重复

对账异常(3 类)

#异常症状原因与处理
1对账数据缺失某日对账未收到Reconciliate 调用失败。手动触发对账
2长款/短款双方记录不一致网络丢包/处理时序差异。人工核对并调整
3批量对账超时BATCHOPENRC/BATCHWITHDRAWRC 处理慢数据量过大。分批处理或扩容

柜员系统

民生银行有独立的柜员登录/登出机制,通过 LoginIn/LoginOut 接口管理:

接口Request ID用途说明
LoginIn0x07柜员登录银行柜员开始操作前登录
LoginOut0x08柜员登出银行柜员操作结束后登出
柜员系统的业务意义

民生银行的部分操作(如开户审批、出金审批)需要银行柜员参与。柜员登录后才能执行审批操作,登出后系统记录操作日志。这是传统银行体系的特有流程,天星等虚拟银行不需要此机制。


密码管理

ChangePassword(0x05)接口用于修改银证交易密码:

维度说明
触发场景用户在银行端申请修改交易密码
影响范围修改后所有银证操作需使用新密码
安全要求密码在传输中经 SM2 加密,moomoo 侧不存储明文

代码位置与服务部署

维度说明
服务名ms_stock_bank_transaction
代码目录ms_sb_trans_python/
语言Python
Proto 文件民生侧提供 .proto 定义文件
依赖SM2 国密库、Protobuf 运行时、SRPC 框架

关键代码模块

模块职责
ms_sb_trans_python/handler/9 个 RPC 方法的请求处理器
ms_sb_trans_python/crypto/SM2 加解密和签名验签
ms_sb_trans_python/proto/Protobuf 生成的消息类
ms_sb_trans_python/service/业务逻辑(入账、出金、对账)
ms_sb_trans_python/config/银行连接配置、密钥配置

需求变更指引

变更需求改动位置说明
新增支持 CNHcheckCurrency() + 银行侧协商需银行侧同步支持 CNH,修改币种校验逻辑
修改错误码映射handler/ 中的错误处理调整 MsBsRejRsn 到用户提示的映射
修改处理时段时段校验逻辑同步修改前后端时段判断
新增 RPC 方法银行提供新 proto → 生成代码 → 实现 handler需银行侧先发布 proto 文件
更换 SM2 密钥config/ 密钥配置需与银行协调密钥轮换时间窗口
修改对账规则service/reconciliation.py调整差异判断阈值或处理策略
修改自动出金条件auto_bs 配置 + AUTO_SETTING_ID参考 出金规则手册
调整限额限额配置(SQL seed)修改单笔上限/报警/熔断阈值

常见客诉 Top 3

#用户反馈原因客服话术
1"BST 出金超时"Socket 连接抖动,回调码 -5"出金正在处理中,系统已自动重试,请稍候查看结果"
2"为什么民生不支持 CNH"民生银证不支持离岸人民币"民生银行目前支持港币和美元出入金,暂不支持人民币"
3"出金被银行拒绝"回调码 -6 或余额不足"请确认账户余额充足,如仍被拒请联系客服核实原因"

监控与告警

关键监控项

#监控项触发条件处理方式
1SRPC 连接中断(严重)与民生银行的 SRPC 连接断开检查网络,自动重连
2SM2 解密失败(高)收到的数据无法解密检查密钥配置是否一致
3入金失败率突增(高)单位时间内失败数量超限排查具体错误码分布
4出金确认超时(高)CreateWithdrawFutu 后无 WithDrawAck人工查询银行侧状态
5对账差异(中)每日对账发现长款/短款运营核对处理
6柜员异常登录(中)LoginIn 频率异常或非工作时间登录安全团队排查

读完之后

我想...去看
看三家 BST 银行的整体对比内银系 BST 总览
了解招行的二进制 Socket 协议招商银行 CMB
看天星的 REST API 方案天星银行 Airstar
查 BST 错误码统一错误码中心
看出金自动审批条件出金规则手册
看所有银行的能力对比银行能力矩阵
这个页面有帮助吗?

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