银企支付-详细设计文档

2019-10-17 09:09:12来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

银企支付-详细设计文档

目录

  • 银企支付-详细设计文档
    • 1、定义说明
    • 2、借款单
    • 3、报销单
    • 4、银企互联
    • 5、执行流程日志
    • 6、监控
    • 7、差错处理
    • 8、数据库设计

银企支付-详细设计文档


本文介绍企业在借款单,报销单走银企支付流程时的详细设计。本文重点介绍整个流程需要关注的细节点,在最终实现时,对于数据表具体字段,不做介绍。

1、定义说明

  • 报销金额:申请报销人,填写的当次需要报销的总金额。
  • 借款金额:申请借款人,填写的当次需要借款的金额。
  • 核销金额:指在报销时,本身又存在借款金额未还时,报销中,自动还款的金额,称为核销金额。如:借款1000元未还,报销3000元,若本次要抵消借款的1000元,则核销金额为1000元。核销金额小于等于还款金额。
  • 实际报销交易金额:指报销时,报销金额减去核销金额后的余额。如:核销1000元,报销3000元,实际报销交易金额为2000元。

2、借款单

2.1、借款单流程

  • 借款单走银企支付:通过银行,公司账户把借款金额转账给申请借款人账户。
  • 借款单走内部转账:内部转账,变动相关账户虚拟金额。
校验
项目 校验规则 备注
支付方式验证 支付方式支持系统转账,浦发银行银企支付
支付方银行卡号验证 当支付类型为银企模式时,支付的银行卡号必须存在,接收方的银行卡号必须存在
单据编码验证 请求交易的单据编码数据合规性验证 如编码可信性,准确性,是否已经在处理过程中
币别验证 系统支持的交易币别类型验证
支付方式限定 不同币别仅支持系统转账
支付方式限定 银企支付仅支持币别人民币
汇率正确性 币别转账时,汇率值合规性验证 针对工作人员填写的汇率,做合规性验证
用户信息验证 查看系统中是否存在申请人员的信息
申请人账号验证 查看系统中申请人银行账户信息是否正确
风控
项目 规则 备注
额度 单笔借款额度在xx万以内
及时还款情况 若存在xx笔以上借款未还款,不可在借款
路由
项目 规则 备注
银企支付 调用银行接口,由公司银行账户,转账给借款申请人的个人银行账号。系统层面记录个人,公司虚拟账户金额变动情况。
系统转账 财务通过其他途径转账给申请人,系统层面记录个人,公司虚拟账户金额变动情况。
银企支付

转账金额:申请人申请的借款金额。
调用银行对外封装的接口,做转账业务。不同银行的逻辑不同,本文以浦发银行为例。详情参考银企支付设计模块。

业务处理

当银行处理借款业务成功后,或用户直接选择系统内转账时,调用业务处理模块。整个业务处理模块采用事务模式,保证账户变化,流水记录等相关数据操作必须满足一致性的需求。

项目 规则 备注
转入流水金额 申请人借款成功,写入的一条借款者入账流水到流水表。 流水金额为借款金额
转出流水金额 支付借款金额的账户,写入一条转出流水到流水表。 流水金额为借款金额
手续费 目前不存在交易手续费
转账日志 记录转账相关的明细信息。
终态确定 最终完善该条借款单据的处理结果。 是否借款成功
执行流程日志

流程日志记录单据从开始执行支付业务时,在不同节点的处理过程日志。详情查看流程日志设计模块。

2.2、数据流向说明

3、报销单

3.1、报销单流程

  • 报销单走银企支付:通过银行,公司账户把实际报销金额转账给申请借款人账户。
  • 报销单走内部转账:内部转账,变动相关账户虚拟金额。
  • 报销单可关联相关账户的借款信息,自动核销借款记录。

报销业务分为三种情况:

  1. 核销金额为零(不选择抵消借款,或无需要核销的借款记录)
  2. 核销金额小于报销金额
  3. 核销金额等于报销金额。
校验
项目 校验规则 备注
支付方式验证 支付方式支持系统转账,浦发银行银企支付
单据编码验证 请求交易的单据编码数据合规性验证 如编码可信性,准确性,是否已经在处理过程中
币别验证 系统支持的交易币别类型验证
支付方银行卡号验证 当支付类型为银企模式时,支付的银行卡号必须存在,接收方的银行卡号必须存在
支付方式限定 不同币别仅支持系统转账
支付方式限定 银企支付仅支持币别人民币
汇率正确性 币别转账时,汇率值合规性验证 针对工作人员填写的汇率,做合规性验证
用户信息验证 查看系统中是否存在申请人员的信息
申请人账号验证 查看系统中申请人银行账户信息是否正确
支付方式验证 报销实际交易金额小于等于零时,不可选择银企支付
报销实际交易金额 报销实际交易金额必须大于等于零
核销金额验证 该笔报销单关联的所有借款单,查看借款单中待核销的金额,是否大于等于待核销的金额值
核销总金额验证 该笔报销单关联的所有借款单核销记录表明细,核销金额和必须等于核销总金额
风控
项目 规则 备注
额度 单笔报销额度在xx万以内。
最大关联借款单数 本次报销最多关联xx笔借款单。
路由
项目 规则 备注
银企支付 调用银行接口,由公司银行账户,转账给申请报销人的银行账号。系统层面记录个人,公司虚拟账户金额变动情况。
系统转账 财务通过其他途径转账给申请人,系统层面记录个人,公司虚拟账户金额变动情况。
银企支付

转账金额:为报销实际交易金额。
调用银行对外封装的接口,做转账业务。不同银行的逻辑不同,本文以浦发银行为例。详情参考银企支付设计模块。

业务处理

当银行处理借款业务成功后,或用户直接选择系统内转账时,调用业务处理模块。整个业务处理模块采用事务模式,保证账户变化,流水记录等相关数据操作必须满足一致性的需求。

报销实际交易金额大于零
项目 规则 备注
转入流水金额 报销方报销成功,写入的一条个人入账流水到流水表。 流水金额为报销实际交易金额
转出核销流水金额 报销方核销成功,写入的一条个人核销出账流水到流水表。 流水金额为核销金额
转出流水金额 被报销方处理报销金额,写入一条转出流水到流水表。 流水金额为报销实际交易金额
手续费 目前不存在交易手续费
转账日志 记录转账相关的明细信息。
核销日志 记录核销相关的明细信息。 核销金额大于零才有核销日志
终态确定 最终完善该条报销单据的处理结果。 是否核销成功
实际报销交易金额等于零

实际报销交易金额等于零,可套用大于零的流程。当实际交易金额为零,不用写报销方和被报销方的转入转出流水。报销方写核销的转出流水。

核销金额等于零

核销金额等于零,可套用大于零的流程。当核销金额为零,写报销方和被报销方的转入转出流水。报销方不写核销的转出流水。核销金额为零,不用关联借款单,不存在核销日志和借款单状态变更。

执行流程日志

流程日志记录单据从开始执行支付业务时,在不同节点的处理过程日志。详情查看流程日志设计模块。

3.2、数据流向说明

4、银企互联

4.1、调用流程

本文以浦发银行做银企互联介绍,银企互联,封装银行提供的交易接口,在进行交易操作时,记录交互过程的明细信息。提交的交易请求后,银行的处理结果包括如下三类:

  1. 拒绝交易:银行柜员或系统,拒绝或撤销支付请求。该笔交易设置为失败。
  2. 交易成功:发起请求的交易操作成功。
  3. 交易处理过程中:发起的交易请求,银行还在流程处理中,属于中间状态。

银企互联发起交易请求步骤:组织支付网关,调用单笔交易请求接口8801,接收反馈结果。

  1. 若反馈结果成功或处理中,调用8804查询接口。
  2. 若反馈失败,则先停止业务处理。
  3. 由于银行一般不会马上反馈支付成功的结果,一般执行都需要一个时间段,便于银行内部中转,对于这种中转结果,等待银行处理,定时调用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


原文链接:https://www.cnblogs.com/wlandwl/p/pay_design.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:大型车祸现场,电商秒杀超卖,这个锅到底有谁来背?

下一篇:Spring中@Import的各种用法以及ImportAware接口