本文介绍了多个与银企付款系统相关的参数配置及其影响。包括“付款不重发”在异常时的处理逻辑及当前无效状态;“付款同步次数最大值”达到后如何手动更新状态;“支付明细业务校验”防止重复编号的付款;“银企平台id标识启动项”防止重复付款的机制;“批量付款中,如果单笔付款校验失败,是否整批都打回”及“是否启用防止业务重复付款”的设置对付款流程的具体影响。
1.参数"付款不重发"
默认为是
设置为否后:银企发送付款请求到银行服务器过程中如果出现异常,不重发:将状态修改为失败;重发:将状态修改为发送失败,需要重发。 (查看代码确认目前对于失败需要重发状态的付款数据没有任何动作,即该配置无效,后续补丁将会把该配置项删掉)
2.参数"付款同步次数最大值"
默认200次,每笔付款同步次数达到该值,则后面同步则不会去银行查询,直接取数据库中的状态数据。这个时候需要在银企平台-付款记录-勾选获取银行付款状态-查询-同步状态,来强制从银行查且更新最新状态。
付款状态同步详解可见:https://vip.kingdee.com/article/211810403310067968
3.参数"支付明细业务校验"
默认校验业务付款请求中的detailBizNo是否已经在银企数据库中存在,重复则报错:已存在编号[ XXXXXXX(detailBizNo)]状态不是付款失败的付款记录
4.参数"银企平台id标识启动项"
开启时,收到付款请求(PayMethod.executeClientRequest()),会拿到本机ip+银企服务端口号作为ebgId存到付款表的ebg_Mark_Id中,然后再准备提交银行(PayProcess.execute())前会获取本机id+银企服务端口号作为ebgId再查询一下表中是否存在,存在就提交到银行,不存在就去同步。
则开启该参数时:
1)、在银企服务器1和数据库1上收到一笔付款请求,获取当前银企服务器ip拼接服务端口作为ebgId存入该笔付款数据中,状态为7(待提交银行),此时数据库2与数据库1数据一致
2)、在银企服务器1和数据库1 将该笔付款请求提交到银行了,付款状态更新了
3)、此时更换银企服务器2和数据库2,此时ip变了,ebgId就变了,此时同步付款动作会唤醒同步付款线程和付款线程,付款线程(PayProcess.execute())就会根据ebgId查询状态为7的付款,查不到,则不会提交该笔付款。从而避免该场景的重复付款
5.参数"批量付款中,如果单笔付款校验失败,是否整批都打回"
设置为是的影响:
1)、当"是否启用防止业务重复付款"参数开启的时候:银企数据库中已经存在付款账号,付款币别,付款金额,收款账号,付款摘要,付款日期相同的付款,则程序中断
2)、银企数据库中已经存在pay_id相同的一笔付款(已经发起过付款),程序会将当前这笔付款状态修改为失败。并发短信提醒
3)、在银企收到业务这笔付款请求之后中间的校验处理过程只要出现异常就 直接程序中断 (过程中银企平台除了校验是否存在相同流水号的付款数据,其他信息基本不做校验,剩下就是银企平台内部数据处理逻辑,不用关心)
6.参数“是否启用防止业务重复付款”
就是按照描述一样(在付款时,在同一天的已经付款记录中,存在付款账号,付款币别,付款金额,收款账号,付款摘要都相同,但是批次号不同的付款记录,系统判定为付款重复,程序中断,报错给业务系统,不会提交到银行)
推荐阅读