银企支付-详细设计文档
目录
银企支付-详细设计文档
本文介绍企业在借款单,报销单走银企支付流程时的详细设计。本文重点介绍整个流程需要关注的细节点,在最终实现时,对于数据表具体字段,不做介绍。
1、定义说明
- 报销金额:申请报销人,填写的当次需要报销的总金额。
- 借款金额:申请借款人,填写的当次需要借款的金额。
- 核销金额:指在报销时,本身又存在借款金额未还时,报销中,自动还款的金额,称为核销金额。如:借款1000元未还,报销3000元,若本次要抵消借款的1000元,则核销金额为1000元。核销金额小于等于还款金额。
- 实际报销交易金额:指报销时,报销金额减去核销金额后的余额。如:核销1000元,报销3000元,实际报销交易金额为2000元。
2、借款单
2.1、借款单流程
- 借款单走银企支付:通过银行,公司账户把借款金额转账给申请借款人账户。
- 借款单走内部转账:内部转账,变动相关账户虚拟金额。
校验
项目 | 校验规则 | 备注 |
---|---|---|
支付方式验证 | 支付方式支持系统转账,浦发银行银企支付 | 无 |
支付方银行卡号验证 | 当支付类型为银企模式时,支付的银行卡号必须存在,接收方的银行卡号必须存在 | 无 |
单据编码验证 | 请求交易的单据编码数据合规性验证 | 如编码可信性,准确性,是否已经在处理过程中 |
币别验证 | 系统支持的交易币别类型验证 | 无 |
支付方式限定 | 不同币别仅支持系统转账 | 无 |
支付方式限定 | 银企支付仅支持币别人民币 | 无 |
汇率正确性 | 币别转账时,汇率值合规性验证 | 针对工作人员填写的汇率,做合规性验证 |
用户信息验证 | 查看系统中是否存在申请人员的信息 | 无 |
申请人账号验证 | 查看系统中申请人银行账户信息是否正确 | 无 |
风控
项目 | 规则 | 备注 |
---|---|---|
额度 | 单笔借款额度在xx万以内 | 无 |
及时还款情况 | 若存在xx笔以上借款未还款,不可在借款 | 无 |
路由
项目 | 规则 | 备注 |
---|---|---|
银企支付 | 调用银行接口,由公司银行账户,转账给借款申请人的个人银行账号。系统层面记录个人,公司虚拟账户金额变动情况。 | 无 |
系统转账 | 财务通过其他途径转账给申请人,系统层面记录个人,公司虚拟账户金额变动情况。 | 无 |
银企支付
转账金额:申请人申请的借款金额。
调用银行对外封装的接口,做转账业务。不同银行的逻辑不同,本文以浦发银行为例。详情参考银企支付设计模块。
业务处理
当银行处理借款业务成功后,或用户直接选择系统内转账时,调用业务处理模块。整个业务处理模块采用事务模式,保证账户变化,流水记录等相关数据操作必须满足一致性的需求。
项目 | 规则 | 备注 |
---|---|---|
转入流水金额 | 申请人借款成功,写入的一条借款者入账流水到流水表。 | 流水金额为借款金额 |
转出流水金额 | 支付借款金额的账户,写入一条转出流水到流水表。 | 流水金额为借款金额 |
手续费 | 目前不存在交易手续费 | 无 |
转账日志 | 记录转账相关的明细信息。 | 无 |
终态确定 | 最终完善该条借款单据的处理结果。 | 是否借款成功 |
执行流程日志
流程日志记录单据从开始执行支付业务时,在不同节点的处理过程日志。详情查看流程日志设计模块。
2.2、数据流向说明
3、报销单
3.1、报销单流程
- 报销单走银企支付:通过银行,公司账户把实际报销金额转账给申请借款人账户。
- 报销单走内部转账:内部转账,变动相关账户虚拟金额。
- 报销单可关联相关账户的借款信息,自动核销借款记录。
报销业务分为三种情况:
- 核销金额为零(不选择抵消借款,或无需要核销的借款记录)
- 核销金额小于报销金额
- 核销金额等于报销金额。
校验
项目 | 校验规则 | 备注 |
---|---|---|
支付方式验证 | 支付方式支持系统转账,浦发银行银企支付 | 无 |
单据编码验证 | 请求交易的单据编码数据合规性验证 | 如编码可信性,准确性,是否已经在处理过程中 |
币别验证 | 系统支持的交易币别类型验证 | 无 |
支付方银行卡号验证 | 当支付类型为银企模式时,支付的银行卡号必须存在,接收方的银行卡号必须存在 | 无 |
支付方式限定 | 不同币别仅支持系统转账 | 无 |
支付方式限定 | 银企支付仅支持币别人民币 | 无 |
汇率正确性 | 币别转账时,汇率值合规性验证 | 针对工作人员填写的汇率,做合规性验证 |
用户信息验证 | 查看系统中是否存在申请人员的信息 | 无 |
申请人账号验证 | 查看系统中申请人银行账户信息是否正确 | 无 |
支付方式验证 | 报销实际交易金额小于等于零时,不可选择银企支付 | 无 |
报销实际交易金额 | 报销实际交易金额必须大于等于零 | 无 |
核销金额验证 | 该笔报销单关联的所有借款单,查看借款单中待核销的金额,是否大于等于待核销的金额值 | 无 |
核销总金额验证 | 该笔报销单关联的所有借款单核销记录表明细,核销金额和必须等于核销总金额 | 无 |
风控
项目 | 规则 | 备注 |
---|---|---|
额度 | 单笔报销额度在xx万以内。 | 无 |
最大关联借款单数 | 本次报销最多关联xx笔借款单。 | 无 |
路由
项目 | 规则 | 备注 |
---|---|---|
银企支付 | 调用银行接口,由公司银行账户,转账给申请报销人的银行账号。系统层面记录个人,公司虚拟账户金额变动情况。 | 无 |
系统转账 | 财务通过其他途径转账给申请人,系统层面记录个人,公司虚拟账户金额变动情况。 | 无 |
银企支付
转账金额:为报销实际交易金额。
调用银行对外封装的接口,做转账业务。不同银行的逻辑不同,本文以浦发银行为例。详情参考银企支付设计模块。
业务处理
当银行处理借款业务成功后,或用户直接选择系统内转账时,调用业务处理模块。整个业务处理模块采用事务模式,保证账户变化,流水记录等相关数据操作必须满足一致性的需求。
报销实际交易金额大于零
项目 | 规则 | 备注 |
---|---|---|
转入流水金额 | 报销方报销成功,写入的一条个人入账流水到流水表。 | 流水金额为报销实际交易金额 |
转出核销流水金额 | 报销方核销成功,写入的一条个人核销出账流水到流水表。 | 流水金额为核销金额 |
转出流水金额 | 被报销方处理报销金额,写入一条转出流水到流水表。 | 流水金额为报销实际交易金额 |
手续费 | 目前不存在交易手续费 | 无 |
转账日志 | 记录转账相关的明细信息。 | 无 |
核销日志 | 记录核销相关的明细信息。 | 核销金额大于零才有核销日志 |
终态确定 | 最终完善该条报销单据的处理结果。 | 是否核销成功 |
实际报销交易金额等于零
实际报销交易金额等于零,可套用大于零的流程。当实际交易金额为零,不用写报销方和被报销方的转入转出流水。报销方写核销的转出流水。
核销金额等于零
核销金额等于零,可套用大于零的流程。当核销金额为零,写报销方和被报销方的转入转出流水。报销方不写核销的转出流水。核销金额为零,不用关联借款单,不存在核销日志和借款单状态变更。
执行流程日志
流程日志记录单据从开始执行支付业务时,在不同节点的处理过程日志。详情查看流程日志设计模块。
3.2、数据流向说明
4、银企互联
4.1、调用流程
本文以浦发银行做银企互联介绍,银企互联,封装银行提供的交易接口,在进行交易操作时,记录交互过程的明细信息。提交的交易请求后,银行的处理结果包括如下三类:
- 拒绝交易:银行柜员或系统,拒绝或撤销支付请求。该笔交易设置为失败。
- 交易成功:发起请求的交易操作成功。
- 交易处理过程中:发起的交易请求,银行还在流程处理中,属于中间状态。
银企互联发起交易请求步骤:组织支付网关,调用单笔交易请求接口8801,接收反馈结果。
- 若反馈结果成功或处理中,调用8804查询接口。
- 若反馈失败,则先停止业务处理。
- 由于银行一般不会马上反馈支付成功的结果,一般执行都需要一个时间段,便于银行内部中转,对于这种中转结果,等待银行处理,定时调用8804接口去请求银行,查看发起的支付请求是否处理完成了。接收8804接口反馈的结果,在处理业务。
4.2、数据流向说明
5、执行流程日志
5.1、流程日志说明
执行流程主要记录单据在支付过程中,关键节点的执行明细信息。流程日志至记录执行到当前节点时的执行结果,备注信息,请求关键参数。当前节点真正的明细信息,在相关业务表中查询,不记录在日志中。
业务处理要求统一在一个事务中,执行流程日志不放在事务中。及业务处理和日志记录时,执行流程日志记录在缓存中,最终把缓存的数据同步到数据库中。
项目 | 规则 |
---|---|
业务受理验证日志 | 当验证都通过时,记录验证结果为通过,并记录请求验证的参数。当验证结果失败时,记录验证失败原因和验证请求参数。 |
业务风控验证 | 当验证成功时,记录验证结果和请求验证的参数。验证失败时,记录验证失败原因和验证的请求参数。 |
请求原始日志 | 记录原始请求日志是否保存成功。 |
调用银行请求报文 | 记录在调用8801时的请求时间,请求参数。 |
银行反馈-接收8801反馈信息 | 记录接收反馈信息时,银行返回的信息(成功,银行处理中,失败)。 |
银行反馈-接收8804反馈信息 | 记录接收到8804接口反馈时,银行返回的信息(成功,银行处理中,失败)。 |
业务请求处理日志 | 记录银企通过,或转账时,发起的业务处理相关的日志信息,包括发起请求参数记录。 |
流水变动日志 | 记录流水变动发生的时间,及变动的请求参数,变动处理结果。 |
核销流程日志 | 记录核销发生的时间,核销请求的相关参数,核销处理结果。 |
单据完成状态 | 记录单据最终的处理结果。 |
6、监控
通过执行过程日志,查看支付流程在各个节点的明细信息,便于监控支付在各个节点的流转状态。
节点 | 说明 | 相关数据表 | 备注 |
---|---|---|---|
支付校验 | 记录支付校验结果,失败时,记录失败原因 | 流程日志表pay_life_log
|
无 |
风控校验 | 记录风控校验结果,失败时,记录失败原因 | 流程日志表pay_life_log
|
无 |
支付请求 | 记录支付原始信息,明细需异步查看支付的日志信息 | 流程日志表pay_life_log 支付请求表 bill_pay_request
|
后续支付,业务处理基于支付原始信息做处理 |
银行报文 | 记录支付请求信息,明细需异步查看支付的报文 | 流程日志表pay_life_log 银企支付入参表 bank_req_source
|
银企支付模式时,才有 |
银行支付结果 | 记录支付请求后,银行返回的处理信息,明细日志异步查询 | 流程日志表pay_life_log 银企接口反馈信息表 bank_res_parsing_source
|
银企支付模式时,才有 |
核销日志结果 | 记录报销单,核销业务处理后的日志信息,明细日志异步查询 | 流程日志表pay_life_log 核销日志表 writed_off_log 借款单数据表borrowing_bill
|
报销单核销金额大于零时,才有 |
交易流水结果 | 记录转账/银企处理后,业务处理板块流变更的日志。明细日志异步查询 | 流程日志表pay_life_log 交易流水日志表 caiwu_transfer
|
无 |
支付结果 | 记录单据发起支付后,最终的支付处理结果 | 流程日志表pay_life_log
|
无 |
7、差错处理
通过监控单据的明细信息,可定位单据在不同节点的情况。在单据支付失败时,提供差错处理功能,便于工作人员通过操作界面,手动处理单据。差错处理包括如下模式:
节点 | 前置条件 | 后置行为 | 描述 | 备注 |
---|---|---|---|---|
重新校验 | 支付校验失败 风控校验失败 |
继续走校验后的所有流程 | 若校验不通过,修复数据后,可发起重新校验的操作 | 无 |
发起银行支付 | 支付请求表bill_pay_request 记录的银行处理结果为失败时银企解析信息表 bank_res_pay 也为失败时,才可重新发起银行支付请求 |
继续走请求支付后的所有流程 | 为单据重新生成一个银行请求报文编码,更新支付请求表bill_pay_request 中的银企包(packet_id)字段 |
避免同一个单据,多次向银行发起交易请求 |
发起银行查询 | 支付请求表bill_pay_request 记录的银行处理结果为处理中 |
继续走银行反馈信息后的流程 | 调用银行8804查询接口,查询银行处理信息 | 无 |
发起业务处理 | 支付模式为转账 支付模式为银企时,银企支付处理成功后 |
继续走业务处理流程 | 初次业务处理失败时,再次调用业务处理板块重新处理 | 业务处理流程保证在一个事务下 |
更新支付模式-银企支付更新为转账模式 | 支付请求表bill_pay_request 记录的银行处理结果为失败时银企解析信息表 bank_res_pay 也为失败时,才可更新支付模式 |
继续走业务处理流程 | 更新支付请求表bill_pay_request 中的支付模式(pay_type)字段 |
避免银企处理成功又变更为转账的情况 |
8、数据库设计
数据表每个业务不同,不便于展示数据具体字段。
借款单数据表borrowing_bill
核销日志表writed_off_log
支付请求表bill_pay_request
银企支付入参表bank_req_source
银企接口反馈信息表bank_res_parsing_source
银企解析信息表bank_res_pay
银企调用异常表bank_res_error
报销单据表refund_bill
转账日志表transfer
交易流水日志表trade_log
流程日志表pay_life_log
上一篇: App内切换语言详解
下一篇: Dubbo快速入门 五