1、入金产品模块详细设计
入金产品接收商户交易请求,作为原始数据处理的第一层,把交易信息完整地记录下来,一是便于排查问题,二是保留数据的原始性,尤其是提供给商户的查询服务时,提供原始信息才能实现交易的实时核对。
商户模式单笔代收类图如图1所示。以Mer2011Request为载体传入,包括交易流水号、代收金额、机构ID、发卡行ID、账户类型、账户名称、账户号码、身份证号、卡类型、分支行名称、省份、城市、结算标识。
图1 商户模式单笔代收类图
MerSingleGatheringServiceImpl是交易的入口,负责校验Mer2011Request传入的参数是否符合报文规范。MerSingleGatheringBO负责处理具体业务,能够调度Query和DAO等对象,进行数据库的增、删、改、查操作,并组装Mer2011Response对象返回到Service层。SingleGathering作为与数据库表对应的实体对象。
同样地,市场模式单笔代收类图的结构与商户模式单笔代收类图的结构相似,只是Service、BO、Query、DAO等对象的前缀“Mer”改为“Mkt”,同时,Request请求中多包含一个OrderNo订单号信息。
既然有单笔的代收,就会有多笔的代收,称为“批量代收”,商户模式批量代收类图如图2所示。以Mer1610Request为载体传入,内容分为批次信息和明细信息,批次信息包括机构ID、批次号、总金额、总笔数;明细信息Mer1610RequestItem包括明细流水号、明细金额、发卡行ID、账户类型、账户名称、账户号码、身份证号、卡类型、分支行名称、省份、城市、结算标识。
图2 商户模式批量代收类图
MerBatchGatheringServiceImpl是交易的入口,负责校验Mer1610Request传入的参数是否符合报文规范。MerBatchGatheringBO负责处理具体业务,能够调度Query、DAO、Trans等对象,进行数据库的增、删、改、查和事务型操作,并组装Mer1610Response对象返回到Service层。GatheringBatch和GatheringBatchItem分别作为与数据库表对应的批次和明细实体对象。
同样地,市场模式批量代收类图的结构与商户模式批量代收类图的结构相似,只是Service、BO、Query、DAO等对象的前缀“Mer”改为“Mkt”,同时,Request请求中多包含一个OrderNo订单号信息。
2、交易中心模块详细设计
外部产品把“产品”相关属性剥离之后,在交易中心就是“纯粹”的代收业务,只包含代收需要的账户名称、账户号码、发卡行、卡类型等基本信息。
交易中心通过提供通用的代收处理,支撑外部产品根据各种业务场景包装出不同形态的产品,实现快速扩展,否则商户模式代收和市场模式代收要重复实现相同的流程。通用处理包括:卡Bin校验、协议查询、会员查询、路由查询、风控校验、计费、请求支付工具执行支付操作等。
图3 交易中心代收类图
交易中心代收类图如图3所示,外部产品的商户模式单笔代收、商户模式批量代收、市场模式单笔代收、市场模式批量代收共4类交易,都调用TcenGatheringServiceImpl的tx1041方法,批量交易是以明细的粒度逐笔请求到交易中心,市场模式则剥离掉订单属性请求到交易中心。请求报文以Tcen1041Request为载体,响应报文以Tcen1041Response为载体。
TcenGatheringServiceImpl进行报文合法校验后,交由TcenGatheringBO负责业务逻辑处理,它可调度Query、Trans等对象进行数据库操作。
JyGatheringOrderMain作为与数据库表对应的实体对象。
数据库中目标数据格式如表1所示。
表1 交易中心代收订单主表
3、支付工具模块详细设计
交易中心是对外部产品的业务抽象,而支付工具则是对交易中心的资金流向类别抽象。在支付系统中,资金流向分为两大类,入金和出金,支付工具控制着资金流向的处理,如果是资金流入,就会把流入的资金记到对应的账户上,如果是资金流出,就会从对应的账户上扣减金额。
如果不设计支付工具,则交易中心在处理代收和快捷支付时,都需要开发请求账务的逻辑,而这部分逻辑千篇一律,就会重复造轮。
图4 支付工具入金类图
类图如图4所示,交易中心调用PaytPaymentServiceImpl的tx1021方法,作为支付工具入口,参数以Payt1021Request对象为载体,传入businessType类型,告诉支付工具具体是哪类入金业务,本文传入“代收”,并以Payt1021Response对象封装处理结果返回给交易中心。
PaytPaymentServiceImpl调用PaymentFundInBO对象,该对象负责支付工具入金的核心逻辑处理,调用FundInOrderTrans插入主单、摘要信息,摘要信息记录请求银行网关和账务记账的信息,由于这是两步操作,在此会生成两条记录。