【银企平台】联动支付流程原创
金蝶云社区-汪伟康
汪伟康
4人赞赏了该文章 1420次浏览 未经作者许可,禁止转载编辑于2022年04月04日 14:26:14

银企平台联动支付业务实现流程:

image.png



涉及代码实现流程:

1、收到业务系统联动支付请求

com.kingdee.bos.ebgateway.framework.method.LinkPayMethod.executeClientRequest(EBRequest, EBResponse, IRequestContext, MBTSInvokeLogger)


2、银企平台判断对应银行插件是否支持联动支付

if(stepOnePaymentInfo == null){//银行不支持联动支付的, 分步骤实现


3、查询该银行联动支付和同步付款状态真同步的定时任务,如果没有则自动添加5分钟一次

com.kingdee.bos.ebgateway.framework.method.LinkPayMethod.checkScheduleRule(List<ScheduleRuleKey>, String, String, StringBuffer)


4、是否支持联动支付

4.1、不支持,封装下拨支付数据:

stepOnePaymentInfo = InfoConvertUtils.convert4TransDown(linkPaymentInfo, body.getParentAcnt(), body.getChildAcnt1(), logger);

4.2、支持,封装联动支付数据:

nativeLinkPay = InfoConvertUtils.convert4NativeLinkPay(info, logger);


5、

打包付款数据(不支持联动支付则是4.1的下拨支付数据,支持则是4.2的联动支付数据

PaymentUtils.pack2SubmitPay(paymentInfos);

并提交到付款请求银行

LinkPayUtils.wakeUpAllThePay(bankVersionId);


6、提交付款请求前判断是否存在未提交银行的付款,如果没有就唤醒同步付款状态线程,去同步付款状态(真同步

com.kingdee.bos.ebgateway.bankservice.common.PayProcess.execute(String, IBankService, Map<String, Object>)

if (paymentInfo2SubmitMap.isEmpty()) { if (batchPay.get() > 0) { logger.info("激活同步任务"); TaskManager.startOrWakeUp(bankVersionId, QueryPayProcess.class, impl, null); } batchPay.set(0); return false; }


7、与银行交互完成之后进入联动支付下一步,更新付款状态(仅将T_EBG_PAYMENTINFO中的数据同步到T_EBG_LINKPAYMENTINFO)(假同步

LinkPayStepHelper.doNextStep(infos2Send, true);

com.kingdee.bos.ebgateway.utils.LinkPayStepHelper.LinkPayRequestClient.run()

updateLinkPayState(linkPaymentInfos, currPayment, bankMessageLogger);


10、判断该银行是否支持联动支付

10.1支持,则无需执行下一步

if(LinkPayUtils.LINKPAY_TYPE_NATIVE.equals(reservedFiled8)) {//其自身支持联动支付,无需进行下一步 bankMessageLogger.info("银行支持联动支付,无需执行下一步。流水号:" + currPayment.getBatchSeqId()); continue; }


10.2不支持,执行下一步,打包子账号付款给收款帐号的数据,并提交银行

PaymentUtils.pack2SubmitPay(paymentInfos);

LinkPayUtils.wakeUpAllThePay(bankVersionId);


11、手动同步联动支付单状态(仅将T_EBG_PAYMENTINFO中的数据同步到T_EBG_LINKPAYMENTINFO)假同步

com.kingdee.bos.ebgateway.framework.method.QueryLinkPayMethod.executeClientRequest(EBRequest, EBResponse, IRequestContext, MBTSInvokeLogger)




赞 4