账户建模要素
考虑要素
在支付系统中,账户的建模,主要是从如下几个方面来考虑:
- 交易的需求: 比如检查账户是否被锁定、余额是否足够、是否有效等。
- 记账的需求: 按照公司会计需求记录账户上的所有行为,包括支出、充值、转账等。
- 对账的需求: 包括和支付渠道、商户、个人的对账需求,核对交易和账户余额是否正确。
- 风控的需求: 如反洗钱、反欺诈等,都需要依赖于账户体系来提供核心数据。
- 信用的需求: 对用户、资产、商户等主体进行信用评估时,也需要依赖账户体系来提供的核心数据。
这五个需求,按照其设计的优先级,也是从交易(支付)、记账、对账、风控来进行。
支付系统根据其发展所处的阶段,逐步将新增需求纳入设计中。说了这么多,目的是为了对账户建模。
账户模型是和公司业务密切相关的,公司不同规模,发展的不同阶段需要不同的模型。从交易模型中可以衍生出针对各个角色的账户流水,即明细模型,用于支持对账。根据业务需要,可以设置多种账户,如支付账户、预付卡账户、代扣账户、零钱账户、结算账户等。
账户设置
模型图如下
账户类型
从类别上来说,这里的账户,一般指总账账户。一般来说电商系统中涉及的账户类型有:
- 虚拟币账户:用户和使用虚拟币的商户都需要建立虚拟币账户;
- 代扣账户: 用来支持订阅类型的定期代扣;
- 零钱账户:电商的内部账号,用户、商户、清算单位需要建立零钱账户。
- 第三方支付账户:用户在第三方支付机构建立的账户。
- 银行卡账户:用户的银行卡信息,每个卡对应一个账户。
- 结算账户:用来支持和第三方支付公司、银行进行结算用,第三方支付需要为每个商户号建立结算账户;银行需要为借记卡、贷记卡分别建立结算账户,一般在银行卡直连时使用。
- 代扣代缴账户:用来支持代扣税款业务。
账户属性
对这些账户,需要设置如下属性,基本属性,包括:
- 账户号(或账户 ID) 一般是系统自动生成。特别注意的是,要事先约定好账户 ID 的规则,比如头三位用来表示账户类型,后几位用来表示账户编号等,务必保证根据账号号能够快速确定账户类型,并且保证账户号是不重复的。
- 账户名称 一般是由用户自己设置的,显示用。
- 货币类型 注意虽然一张银行卡可以支持多个币种,实际在内部,还是针对每个币种建立独立的子账户。涉及到多币种的账户,也可以采用类似的建模方案。
- 会计科目代码 一般是一级会计科目的代码。
账户控制
- 是否允许充值;
- 是否允许提现;
- 是否允许透支;
- 是否允许支付;
- 是否允许转账进入;
- 是否允许转账转出;
- 是否有安全保障;
- 是否激活;
- 是否冻结。
资金相关
- 当前账户余额,等于可用余额+冻结余额;
- 当前账户可用余额;
- 当前账户冻结的余额,冻结余额指在账户上暂不能使用的额度。在支付的时候,往往是先冻结,商品出库后,再实际执行扣款。
银行卡、第三方支付信息
- 第三方实体的 ID;
- 第三方账号,如银行卡号或者在第三方支付的open_id等;
- 第三方的app_id;
- 账号的失效日期,该账号什么时候失效。
注意:有些第三方信息是不能保存的,如用户的账号密码、信用卡的 CV 号等。为了避免账户信息被爬库或者数据库信息意外泄露,一般还需要对敏感字段,如密码等,进行加密保存,甚至保存到另外的表中。更进一步,为了避免账户信息被意外修改,还可以增加一个校验字段,在写入数据时设置该字段,在读取数据时做校验,一旦发现数据有问题,则关闭该账号。
账户建模设计
账户的基本信息
- 账户号
- 账户类型
- 余额
- 币种
- 账户状态
- 开户时间
账户的基本功能
- 基础功能 开户、销户;冻结、解冻;
- 业务功能 充值、提现;入账、转账、对账;冲正、扣款;
- 业务需求 账户查询、流水查询
- 系统功能 核算、校验、快照备份
账户用例(仅记录商户侧)
开户
商户A是一家电商平台,接入支付系统快捷支付;对于手续费征收,采取收支两线,并预存手续费10000元,交易手续费费率为1%;同时因为该商户资质较好,交易时采取D0(T+0)实时结算。
商户开户,根据商户交易特点,需开通以下账户:
- 待结算户:用户在商户交易完成后,资金进入该账户。
- 基本户:商户的余额户,可体现,交易结算后,资金进入该账户。
- 手续费户:专门用来存放手续费的账户。
开户后各账户余额如下:
阶段 | 时间点 | 待结算账户 | 基本户 | 手续费户 |
---|---|---|---|---|
开户 | – | 0 | 0 | 10000 |
收单交易
某用户上午9点在A电商平台上使用快捷支付购买1000元的手机,交易完成后,A商户待结算户增加1000元。手续费按照1%标准征收,由商户支出,故该笔交易手续费为:1000*1%=10元,计入手续费户,手续费剩9990元。支付公司设置D0结算时间节点为每天下午4点。下午4点后,待结算户资金结转至基本户。
账户变动如下:
阶段 | 时间点 | 待结算账户 | 基本户 | 手续费户 |
---|---|---|---|---|
开户 | – | 0 | 0 | 10000 |
收单 | 9:00 | 1000 | 0 | 9990 |
结算 | 16:00 | 0 | 1000 | 9990 |
提现
A商户在下午4:30时,发起提现600元,商户提现手续费按笔征收,每笔2元。商户提现600后,基本户剩400元,同时每笔需付出手续费2元,手续费户剩余9988元。
账户变动如下:
阶段 | 时间点 | 待结算账户 | 基本户 | 手续费户 |
---|---|---|---|---|
开户 | – | 0 | 0 | 10000 |
收单 | 9:00 | 1000 | 0 | 9990 |
结算 | 16:00 | 0 | 1000 | 9990 |
提现 | 16:30 | 0 | 400 | 9988 |