UTPP-TAMSZ(交易接入管理系统)
2025-08-29 09:58:45 3 举报
AI智能生成
UTPP
作者其他创作
大纲/内容
支付接口返回逻辑
成功
000000+10
失败
非000000+20
非000000+空
流程未到支付核心
进行中
000000+06
出款交易同步返回
下游部分资金渠道超时
正向交易
渠道超时,UTPP重试快速恢复机制
反向(退款\撤销)交易,业务系统当成功处理
用户账超时
用户账失败(未收到请求或商户余额不足),UTPP监控后续处理
非用户账超时
渠道超时,UTPP重试快速恢复机制
反向(退款\撤销)交易,渠道和渠道帐(fundFlow=R)失败
渠道失败转人工,返回UTPP成功
UTPP重试快速恢复机制
支付核心流程异常
接口(线上)
com.pinganfu.utpptamsz.facade.BizOrderAiFacade
bizOrder()
pipeline节点
请求参数校验
数据入库
insert:T_UTPP_BUSINESS_ORDER
幂等控制失效
风控(Risk)
CP066
不关注风控返回结果,风控系统会异步化处理
分库分表逻辑
字段:sponsor后4位
FailOver(故障转移)逻辑
DB-FailOver:替换分库分表字段倒数第四位为F
业务逻辑
重复落单,返回失败,告诉上游系统成功业务单号,避免businessSysNo全表扫描
com.pinganfu.utpptamsz.facade.TransOrderAiFacade
transOrder()
pipeline节点
请求参数校验
合同查询(MCP,不区分科技和电子两个主体)
商户签约合同
SELECT * from MCPDATA.T_CONT_BUSINESS c where c.trans_type='62' and c.PRODUCT_ID='100020060000' and c.customer_id='2000010004925736'
subTransType+productCode+toCustomerId
subTransType+productCode+fromCustomerId
基础合同
SELECT * from MCPDATA.T_PRODUCT_INFO c where c.trans_type='62' and c.PRODUCT_ID='100020060000'
subTransType+productCode
付款方和收款方账户信息组装(CIP)
businessFacade.queryAccountInfo
businessFacade.queryAccountInfo
select * from cipdata.T_CUST_ACCOUNT c where c.customer_id='1000010000001674' and c.account_type='10'
select * from cipdata.T_MERCHANT_ACCOUNT c where c.customer_id='2000010004628726' and c.account_type='03'
付款方账户查询前提条件
payerAcctType!=null&customerId!=null&customerId!=999999999999????
收款方账户查询前提条件
payeeAcctType!=null&toCustomerId!=null&toCustomerId!=999999999999????
交易信息和交易扩展信息组装
交易信息
交易单号
分库分表规则选取
cache:T_UTPPZ_SHARDING_RULE
customerId或者toCustomerId
分库分表字段具体值获取
DB-FailOver校验:替换分库分表字段值倒数第四位为F
替换全局shardField的占位符
日期(8)+4位分库分表逻辑字段+流水号(16),共28位
生成交易单号
shardField和交易放入上下文
账务3.0白名单商户或流量匹配
过滤商户白名单规则
调用账务2.0或者3.0接口
设置账务主交易账号
电子
cache:T_UTPPZ_SHARDACCT_DZ
科技
cache:T_UTPPZ_SHARDACCT_KJ
银行卡信息
扩展字段信息
数据入库
insert:T_UTPPZ_TRANSACTION_U
insert:T_TRANSCORE_TRANSACTION
交易状态
落单并支付
入金
03
出金
34
落单然后支付
00
失败
delete:T_TRANSCORE_TRANSACTION_U
失败
上游重新落单
orderNo不变:补偿
orderNo变化:无需补偿(BASS系统)
insert(datanode):T_UTPP_TRANSACTION_EXT
insert:T_UTPP_BANKCARD_INFO
交易类型
电子账户充值01
提现业务05
结算提现30
通用代发60
通用代收63
冻结A0
通用代发到银行卡64
出款F3
10户提现X5
橙子银行提现C5
优化逻辑点
从uemsz链路搬回tamsz主链路,uemsz系统压力大,入库缓慢,支付时获取银行卡信息失败
加密
encInfo1(身份证证件号)
交易单大字段用datatransfer-service(一致性缓存系统)统一封装,上游决定是否降级
set接口(4s)
请求参数
domain:UTPP
type:TRANSORDER
sequenceNo:transId
dataValue:extFeilds
返回参数
uniqueCode
get接口
请求参数
domain:UTPP
type:TRANSORDER
sequenceNo:transId
返回参数
extFeilds
交易事件通知组件(transNotify)
业务逻辑 重复落单,返回失败,告诉上游系统成功交易单号,避免orderNo全表扫描
分库分表逻辑
维度:transType、productCode、acctId(登录未登录)
字段:customerId | toCustomerId的后四位
FailOver逻辑
返回逻辑
成功
000000+交易单号
失败
非000000
专用码
fromSpecCode:付款方专用码 toSpecCode:收款方专用码
渠道账和用户账都会有专用码,但专用码只对账户生效,不对内部户生效
账务凭证ioDirect=O——》specCode=fromSpecCode
账务凭证ioDirect=I——》specCode=toSpecCode
com.pinganfu.utpptamsz.facade.PayOrderAiFacade standardWithHold()
payOrder()
pipeline节点
请求参数校验
交易支付流程数据整合
交易状态
落单并支付
落单然后支付
select:T_TRANSCORE_TRANSACTION
update:T_TRANSCORE_TRANSACTION set trans_status=03 where trans_Id=? and trans_status in (00)
insert:T_TRANSCORE_PAYMENT
支付决策(支付明细入库)
支付决策维度
支付产品
商户
场景
交易类型
决策返回成功(isDecisionSuccess=true&&rspCode=000000)
决策返回失败或者Rpc异常降级
23(新快捷借记)——》01(快捷借记)
24(新快捷贷记)、33、34——》(快捷贷记)
27(新余额支付)——》12(活钱宝)
27(新余额支付)——》81(多基金)
42(好房宝)——》37(旺财)
12(活钱宝)
100020030000、100010100000场景,12(活钱宝)——》81(多基金)
其余场景,12(新余额支付)——》12(新余额支付)
其余支付方式默认
决策支付产品对基础支付产品1:N和1:1
27
00
12
81
82
83
insert(datanode):T_TRANSCORE_PAYMENT_DETAIL
数据准备
组装支付扩展字段
风控(Risk)
CP003
风控Rpc异常降级
风控业务明确拒绝,支付流程终止
结束
风控挂起
update:T_TRANSCORE_PAYMENT set t.RISK_STATUS where id=?
数据入库
支付扩展字段批量入库
insert(datanode):T_UTPP_TRANSACTION_EXT
解冻指令
requestType=5
frozenId=原冻结流水
解冻acctId
渠道指令
资金渠道
账务
未配置账务凭证
00(电子账户支付)
56(单位/企业支付账户)
27(新余额—>活期)
30(机构支付)
机构信息逻辑poCode\poChannel(T_UTPP_ORGANPAY_CHANNELINFO)
消费
非签约模式:30—payAcctId—subPayType
迪士尼
迪士尼售卡
30-PAFDIS-PAFDIS1
poCode:DISNEY1
迪士尼乐园
poChannel:PAY
30-PAFDIS-PAFDIS2
poCode:DISNEY2
迪士尼配套设施
poChannel:PAY
迪士尼体验卡
30-DISMK-DISMK
poCode:DISMK
poChannel:PAY
多基金(活期消费支付账户改造)
大华
30-PAFHQB-PAFDH1
poCode:PADH
poChannel:SHT1
南方
30-PAFHQB-PAFNF1
poCode:NFFOF
poChannel:SHT1
。。。
陆财富
陆财富代销基金申购
30-LCF-LU01376
poCode:PADH
poChannel:SHT1
陆财富代销基金申购撤销
跨境支付
跨境收款新增币种
30-OPBSUSD-OPBSUSD
poCode:OPBSUSD
poChannel:OFLC
30-OPBSEUR-OPBSEUR
poCode:OPBSEUR
poChannel:OFLC
签约模式:根据payAcctId协议号查询会员返回的签约信息bankShort
30—bankShort—subPayType
30—LJS-121A376
poCode:LUFAX
poChannel:121A376
。。。
线上版本:30—bankShort
30—LJS
poCode:LUFAX
poChannel:INSU
30—WLT
poCode:WLT-CP
poChannel:CPB
退货
UTPP不组装poCode、poChannel,账务根据原交易给资金对账
41(新代发)
渠道账
TF002|O-B001:I-C001
用户账
EX001|O-C001:I-ACCT_ID
43(个人支付账户【10户】)
渠道账
TF022|O-OTHER:I-C001
O-10:I-C001
OTHER:UTPP会根据customerId+10(accountType)查询出10户
用户账
EX001|O-C001:I-ACCT_ID
银行
支付方式列表(冲退转提现)
聚合支付
46(APP支付)
47(扫码支付)
48(公众号支付)
电子c扫b(300010080003)
网关返回码==000000
状态10
网关返回码!=000000
状态20
50(B扫C支付)
电子b扫c(300010080004)
网关返回码==000000
状态10
网关返回码==010003
返回码000000
状态06
网关返回码==其它
状态20
51(C扫B支付)
支付宝支持指定时间关单,微信不支持关单
54(小程序)
61(支付宝H5支付)
落单然后支付
select:T_UTPP_TRANSACTION_EXT
payAcctId
二级支付机构(ZFB、WX)
44(橙子银行代扣)
橙子银行【协议号调用会员查询卡信息】
B2C网银
06( 网银借记)
000000—>状态00,否则失败20
07( 网银贷记)
B2B网银
55(企业网银)
新快捷
23(新快捷借记)
24(新快捷贷记)
快捷【协议号调用会员查询卡信息】
01(快捷借记,绑卡Id)
商城组合支付压测时用bankShort(VIRTUAL)来做区分
网联-商委
各银行也开发商委接口,用户、商户、银行三方签约,替代10(借记代扣)
02(快捷贷记)
52(分期付)
58(新银联代收借记卡)
59(新银联代收贷记卡)
代收(扣)【协议号调用会员查询卡信息】
10(借记代扣)
22(贷记代扣)
落单然后支付,查询二级商户信息
select:T_UTPP_TRANSACTION_EXT
协议支付
13(借记)
16(贷记)
无协议支付
14(借记)
17(贷记)
32(MOTOPAY)
63(线上预授权贷记【银联】\线上预授权完成)
合作商
主账户虚拟大华
45(基金代发)
53(旺财宝)
11(健康卡)
渠道能力
消费
退货(线上退货、线下退货)
冲正
撤销
交易能力
线上
线上消费(62)
收银台模式(OnlinePay#transOrder+payOrder)
线上消费冲正(62)
线上退货(38)
OnlinePay#reverseOrder
线下
线下消费(46)
收银台模式(OnlinePay#transOrder+payOrder)
线下冲正(47)
OfflinePay#reverseOrder
线下撤销(48)
OfflinePay#returnOrder
线下退货(50)
OnlinePay#reverseOrder
业务逻辑
健康卡退货业务保成功,caps请求养老险后,养老险返回明确失败,明确失败的信息会推送到oms系统
卡(18)
通卡
渠道能力
消费
退货(线上消费冲正、线上退货、线下退货)
冲正
撤销
交易能力
线上
线上消费(62)
收银台模式(OnlinePay#transOrder+payOrder)
线上消费冲正(62)
线上退货(38)
OnlinePay#reverseOrder
线下
线下消费(46)
收银台模式(OnlinePay#transOrder+payOrder)
线下冲正(47)
OfflinePay#reverseOrder
线下撤销(48)
OfflinePay#returnOrder
线下退货(50)
OnlinePay#reverseOrder
预付费卡
渠道能力
消费
退货(线上消费冲正、线上退货、线下撤销、线下退货)
冲正
交易能力
线上
线上消费(62)
收银台模式(OnlinePay#transOrder+payOrder)
线上消费冲正(62)
线上退货(38)
OnlinePay#reverseOrder
线下
线下消费(46)
收银台模式(OnlinePay#transOrder+payOrder)
线下冲正(47)
OfflinePay#reverseOrder
线下撤销(48)
OfflinePay#returnOrder
线下退货(50)
OnlinePay#reverseOrder
业务逻辑
通卡
子支付方式subPayType为E0开头,单卡支付
消费
customer_id为9999999999999999
预付费卡
预付费卡的手续费:支付明细的externalFields
{"feeAmt":"1500000","cardBizLabels":["TYK00001"]}
卡系统调用acct系统记账(会计账)
SR019
(1)和(2)不符合,即subPayType为空(预付费卡,线上消费62)
消费
customer_id为壹钱包会员号
卡系统根据customer_id,查询会员的卡列表,按有效期由近及远的扣减
子支付方式为E1开头,资金渠道是定向积分渠道的定向积分消费,并且不能退货(指定支付方式和非指定支付方式都不支持)
基金(异步化)
MFCS
81(多基金)、60(旺财主账户支付)
基金类型
大华
南方
汇添富
易方达
平安盈
赎回时间
subPayType=10
T+0
subPayType=11或subPayType=null
T+1
MBP
12(活钱宝)
CMA
28(增值宝)
29(工资宝)
37(旺财)
35(通用宝)
营销
消费金(商户模式)
09(红包)
渠道帐
com.pinganfu.mkt.common.facade.consumerMoney.MktConsumerMoneyUserFacade#getUserConsumerMoneyAccount
根据交易单号+付款方+交易金额,查询07户红包的出资账号操作
07——》C001
满立减(商户模式)
15(消费直抵)
渠道
com.pinganfu.mkt.common.facade.MktDiscountFacade#getAccountAndcheckDiscountRecord()
查询07户卡券的出资账号操作
优化点:去掉T_TRANSCORE_PAYMENT_DETAIL的SUB_DETAIL表更新操作
调用mkt资金核销券
渠道帐
07——》C001
卡券(商户模式)
19(内部券)
渠道
com.pinganfu.mkt.common.facade.MktCouponUserFacade#getUserCouponAccount
通过卡券Id查询07户卡券的出资账号操作
渠道帐
07——》C001
平台券(渠道模式)
62(平台券)
mkt核销券
调用企业结算
1成功,2失败,mkt返回utpp失败,mkt会回滚1
调单
1成功,2失败
渠道帐
应收——》C001
核销券和撤销券对应两个账户,收支分离轧差
商户模式下,某个商户并发量大的时候,07户要配置子账户
积分
08(积分)
消费
AMOUNT/000000=元
FOREIGN_AMOUNT/EXCHANGE_RATE=元
下游字段
transPoint
FOREIGN_AMOUNT(积分)
detail
支付明细扩展字段
"{"outMerId":"900000014678","feeAmt":7980000,"orderNo":"20190505000000110984566","accountId":"1000010005013069","memberId":"010000099189042","feePoint":3987,"transDescription":"水电煤缴费","feeRate":"0.07"}"
商户模式(已下线)
渠道帐
cache:T_TRANSCORE_ACCOUNT_CONFIG
key:payType+subPayType,value:万里通积分消费商户账户ID
07——》C001
渠道模式
退款
退款的时候退钱不退积分,FOREIGN_AMOUNT从原交易获取,属于无用字段,退款的时候会按照金额比率退手续费
pointpay退货失败是会推送到oms转人工的
资产额度
31(额度支付)
渠道账指令
OR凭证
fundflow=F
用户账转账明细
EX凭证
账务不依赖任何系统,需要知道这笔交易的账户
用户账指令
转账指令
requestType=0
TF凭证
交易手续费指令
requestType=0
SR凭证
fundflow=F
冻结指令
requestType=4
冻结toAcctId
UTPP-TAMSZ-GW
支付指令:fundFlow=F
通用支付事件通知组件(payNotify)
业务逻辑
分库分表逻辑
字段:transId的13-16位
FailOver逻辑
无
支付单大字段业务系统和下游资金渠道商量好key
业务系统 set接口
请求参数
domain:业务系统
type:key
sequenceNo:业务系统的订单号
dataValue:extFeilds
返回参数
uniqueCode
下游资金渠道 get接口
请求参数
domain:业务系统
type:key
sequenceNo:业务系统单号
返回参数
extFeilds
transAndPay()
transOrder()+payOrder(),并优化流程
transOrder=sucess&&payOrder=fail
update:T_TRANSCORE_TRANSACTION set trans_status=00 where trans_Id=? and trans_status in (03,34)
分库分表逻辑
同transOrder()
业务逻辑
收单
收单调用超时,返回上游进行中
收单换一个orderNo再落交易单,落交易单成功
用户两笔都支付成功,接到两个成功消息,后面那笔支付会发起退货
交易金额(transAmt)+交易手续费(feeAmt)=交易总金额(transTotalAmount\transFactAmt)=支付工具支付金额总和Sum(payAmt)
reverseOrder()
pipeline节点
请求参数校验
select:T_TRANSCORE_TRANSACTION 查询原交易
原交易支付明细组装和校验
查询原交易的成功支付单和支付明细单
select:T_TRANSCORE_PAYMENT JOIN T_TRANSCORE_PAYMENT_DETAIL
指定方式退款
select:T_TRANSCORE_TRANSACTION 查询成功和进行中的退款交易
select:T_TRANSCORE_PAYMENT JOIN T_TRANSCORE_PAYMENT_DETAIL 查询成功和进行中的退款交易的支付单和支付明细单
退款交易支付明细组装
支付账户取原交易的支付明细
数据准备
原交易、退款交易、退款交易支付单、退款支付明细单、退款扩展信息
数据插入
控制并发退款: 更新原交易退款金额、退款实际金额( [where 退款实际金额 +本次退款实际金额< 消费实际金额 AND 交易状态 in (交易成功,部分退款)])
update T_TRANSCORE_TRANSACTION set REFUND_AMT =REFUND_AMT+本次退款金额,REFUND_FACT_AMT=REFUND_FACT_AMT+本次退款实际金额,TRANS_STATUS=?, UPDATE_TIME=systimestamp where trans_Id=? AND REFUND_FACT_AMT +本次退款实际金额<=TRANS_FACT_AMT and trans_status in (10,13)
原交易更新成功,后续数据插入失败,需要回滚原交易
insert:T_UTPPZ_TRANSACTION_U
insert:T_TRANSCORE_TRANSACTION 插入退款交易
insert:T_TRANSCORE_PAYMENT
insert(datanode):T_TRANSCORE_PAYMENT_DETAIL
insert(datanode):T_UTPP_TRANSACTION_EXT
事件通知节点(transNotify)
风控
CP003
用户帐支付指令
requestType=2
fundFlow=F
渠道(渠道和渠道帐失败,fundFlow=R,返回上游06+000000)
账务
000000—>10
001006—>06
其余—>20
银行(所有渠道)
退款
同步返回000000,状态06,异步返回明确结果
冲退转提现
返回码010003—》状态06
营销
09(红包)
15(消费直抵,满立减就是优惠规则,只涉及退钱,不涉及退券)
组装指令优化点
去掉com.pinganfu.mkt.common.facade.MktDiscountFacade.getAccountAndcheckDiscountRecord()查询07户卡券的出资账号操作
去掉T_TRANSCORE_PAYMENT_DETAIL的SUB_DETAIL表更新操作
refund:true(退款、部分退款)
19(内部券)
退款(38)
GW:q_mkt_discount_refund_reciever,不退券,下游保成功
撤销(39)
GW:q_mkt_discount_payResult_reciever,退券,下游保成功
62(平台券)
退款不退券(全部退款后,商城调用mkt退券)
渠道帐支付指令
退款
requestType=2
冲退转提现
requestType=0
凭证
消费交易付款方未登录
OP002(商户出金凭证)
消费交易付款方已登录
OP001(用户出金凭证)
UTPP-TAMSZ-GW
fundFlow=R
returnGoodSign=G
事件通知节点(payNotify)
业务逻辑
分库分表逻辑
字段:parentTransId的13-16位
FailOver逻辑
消费交易落FailOver库,退货交易也会落FailOver库(不涉及Failover数据回迁)
针对一笔订单多次发起退款,如果第一次退款还在处理中,业务系统会报错
渠道退款能力(非账务)保成功
pipeline节点
transOrder()流程
交易支付流程数据整合
T_TRANSCORE_PAYMENT
T_TRANSCORE_PAYMENT_DETAIL
风控(Risk)
风控Rpc异常降级
风控业务明确拒绝,支付流程终止
数据入库
T_UTPP_TRANSACTION_EXT
渠道和渠道帐指令
用户帐指令
UTPP-TAMSZ-GW
UTPP-UEMSZ
分库分表逻辑
业务逻辑
商户对公扣款业务
模式一:商户对公卡直接扣款至商户05/07户
模式二:商户对公卡先绑定在商户会员(结算卡),从商户结算卡扣款至商户05/07户
com.pinganfu.utpptamsz.facade.WithdrawOrderAiFacade
withdrawOrder()
pipeline节点
请求参数校验
交易支付流程数据整合
交易状态(34)
落单并提现
交易状态=34(无需更新)
落单然后提现
select:T_TRANSCORE_TRANSACTION
update:T_TRANSCORE_TRANSACTION set trans_status=34 where trans_Id=? and trans_status in (00)
数据插入
insert:T_TRANSCORE_PAYMENT
insert(datanode):T_TRANSCORE_PAYMENT_DETAIL
insert(datanode):T_UTPP_TRANSACTION_EXT
延时出款决策模块(ucmp)
获取银行卡信息
select * from T_UTPP_BANKCARD_INFO where trans_id=? and info_type='00'
出金决策系统
payDecisionId-决定走具体银行渠道
现金管理平台
默认策略2小时后出款
场景
卡卡转账
100010020005
活钱宝
100020030000
财富宝(CMA)
100020050000
延时出款处理模块
延时出款
insert:T_UTPP_PAYMENT_DELAY
延时出款调度
立即出款
通知出金Pub/Sub组件
业务逻辑
分库分表逻辑
字段:transId的13-16位
FailOver逻辑
无
transAndWithdraw()
transOrder()+withdrawOrder()
分库分表逻辑
同transOrder()
合并落单提现流程,并优化流程
000000同步返回06,其它返回20
com.pinganfu.utpptamsz.common.facade.TransInternalAiFacade(内部使用,不对外提供服务)
withdrawOrderPay()
pipeline节点
交易支付流程数据整合
立即出款
交易状态=34(无需更新)
延时出款调度
select:T_TRANSCORE_TRANSACTION
出款幂等性控制
update:T_TRANSCORE_TRANSACTION set trans_status=00 where trans_Id=? and trans_status in (34)
select:T_UTPP_TRANSACTION_EXT
支付决策
风控(Risk)
用户帐指令
requestType=0
解冻账务明细指令
提现账务明细指令
渠道指令
网关代扣(代发)
延时出款调度
select:T_TRANSCORE_TRANSACTION_EXT
渠道帐指令
requestType=0
UTPP-TAMSZ-GW
fundFlow=F
UTPP-UEMSZ
分库分表逻辑
字段:transId的13-16位
onlineFundInReverse()
pipeline节点
插入冲正幂等记录表
insert:T_UTPPZ_REV_IDEMPOTENT
索引
唯一索引
TRANS_ID
PAYMENT_ID
唯一索引
PAYMENT_ID
CREATE_TIME
唯一索引
ID
CREATE_TIME
获取已成功的支付指令,组装待冲正的支付基础产品
select:T_TRANSCORE_TRANSACTION
com.pinganfu.utpptamsz.facade.PayGwServiceAiFacade#queryPayOrderStatus()
组装各个资金渠道和渠道帐两个冲正指令
营销
消费直抵(15)
refund:false(冲正操作,所有的钱全部退掉)
内部券(19)
GW:q_mkt_discount_payResult_reciever,退券,下游保成功
平台券(62)
调用企业结算
核销券
1成功,2失败,mkt返回utpp成功,mkt会重新核销券
调单
渠道帐
冲退转提现
requestType=0
退款
requestType=2
各个渠道两个冲正指令单独调用GW
GW不再调用线上支付结果Pub/Sub组件(reverseSign:"Y")
fundFlow=R
reverseSign=Y
paymentId
每次调用gw生成新的paymentId
交易不关心冲正结果,哪个渠道冲正失败,GW冲正指令状态为09
给qerp发Q:q_utpp_pay_result_notify
更新冲正表记录(成功:10,失败:20)
update:T_UTPP_OL_PAY_FAIL_RECORD where PAYMENT_ID=? and STATUS= ?
分库分表逻辑
字段:transId的13-16位
onlineFundOutReverse()
pipeline节点
insert:T_UTPPZ_REV_IDEMPOTENT
查询GW支付指令
select * from T_TRANSCORE_TRANSACTION where trans_id=?
设置账务主交易账号
电子
cache:T_UTPPZ_SHARDACCT_DZ
科技
cache:T_UTPPZ_SHARDACCT_KJ
com.pinganfu.utpptamsz.facade.PayGwServiceAiFacade#queryPayOrderStatus()
select:T_UTPP_GW_PAY JOIN T_UTPP_GW_PAY_ORDER
循环支付指令
渠道失败 || 渠道帐失败——>reverseOrderType=channel || channelAccount
用户账失败
结束
渠道失败,冲正用户账
渠道账失败
给保障系统发Q:q_pmcs_error_log_notify(errorType:CAFE)
交易状态—06
结束
组装冲正指令
30、64冲A0用户帐【出金交易原指令:渠道、渠道帐】
30交易单无父交易单号,走EX002
64走撤销
relExVoucherSeq获取原A0支付单号
select * from T_TRANSCORE_PAYMENT p, T_TRANSCORE_PAYMENT_DETAIL pd
where p.PAYMENT_ID = pd.PAYMENT_ID and p.TRANS_ID = ? AND p.STATUS = ?
where p.PAYMENT_ID = pd.PAYMENT_ID and p.TRANS_ID = ? AND p.STATUS = ?
05、X5、C5、F3冲正对应用户帐【出金交易原指令:用户帐、渠道、渠道帐】
requestType:30=0,其他交易类型=2
UTPP-TAMSZ-GW
组装网关请求参数
fundFlow=R
reverseSign=Y
调用用户账失败
GW向上游返回06,冲正指令状态翻为09
insert:T_UTPP_GW_RETGOOD_RECORD
Rpc异常需要调单
调单成功,执行剩余流程
哪个渠道冲正失败,GW冲正指令状态为09
UTPP-UEMSZ
条件:异步交易通知&&(第一笔指令失败||渠道失败)
冲正结果
冲正失败
结束
冲正成功
UTPP-UEMSZ
结束
分库分表逻辑
字段:transId的13-16位
com.pinganfu.utpptamsz.common.facade.AcctAiFacade
transferAcct()
pipeline节点
请求参数校验
查询付款方和收款方的账户(cip)
数据准备
数据插入
insert:T_UTPPZ_TRANSACTION_U
insert:T_TRANSCORE_TRANSACTION
交易状态
00
insert:T_TRANSCORE_PAYMENT
insert(datanode):T_TRANSCORE_PAYMENT_DETAIL
UTPP-UEMSZ
用户帐支付指令
用户帐requestType默认为3(手工)
UTPP-TAMSZ-GW
UTPP-UEMSZ
分库分表逻辑
业务系统传参shardField
FailOver逻辑
无
业务逻辑 返回参数没有globalTime字段,业务系统日终对账文件是以utpp全局时间为准(已修复)
业务系统决定调用账务3.0或2.0
业务系统传参linkAcctId,关联内部户调账
转账不过风控节点,比如购物车合单支付,风控只校验第一笔62消费交易
revTransferAcct()
pipeline节点
请求参数校验
请求交易类型必须L2/I3
select:T_TRANSCORE_TRANSACTION 获取原交易
数据准备
select:T_TRANSCORE_PAYMENT JOIN T_TRANSCORE_PAYMENT_DETAIL 查询原交易的成功支付单和支付明细单
数据插入(原交易更新、新交易插入、新支付单插入、新支付明细单插入)
关联外部凭证流水号为空
update:T_TRANSCORE_TRANSACTION
原交易状态
当前退款金额 < 原交易金额-已退款金额
13(部分退款)
当前退款金额 = 原交易金额-已退款金额
21(部分退款)
当前退款金额 > 原交易金额-已退款金额
报异常
控制并发退款: 更新原交易退款金额、退款实际金额( [where 退款实际金额 +本次退款实际金额< 消费实际金额 AND 交易状态 in (交易成功,部分退款)])
update T_TRANSCORE_TRANSACTION set REFUND_AMT =REFUND_AMT+本次退款金额,REFUND_FACT_AMT=REFUND_FACT_AMT+本次退款实际金额,TRANS_STATUS=?, UPDATE_TIME=systimestamp where trans_Id=? AND REFUND_FACT_AMT +本次退款实际金额<=TRANS_FACT_AMT and trans_status in (10,13)
insert:T_UTPPZ_TRANSACTION_U
insert:T_TRANSCORE_TRANSACTION
insert:T_TRANSCORE_PAYMENT
insert:T_TRANSCORE_PAYMENT_DETAIL
UTPP-UEMSZ
用户帐支付指令
用户帐requestType=2(撤销)
UTPP-TAMSZ-GW
UTPP-UEMSZ
分库分表逻辑
FailOver逻辑
无
frozenAcct()
pipeline节点
请求参数校验
查询冻结账户(cip)
数据准备
数据插入
insert:T_UTPPZ_TRANSACTION_U
insert:T_TRANSCORE_TRANSACTION
交易状态
00
insert:T_TRANSCORE_PAYMENT
insert(datanode):T_TRANSCORE_PAYMENT_DETAIL
UTPP-UEMSZ
风控(Risk)
冻结用户帐支付指令
用户帐requestType默认为4(冻结)
UTPP-TAMSZ-GW
UTPP-UEMSZ
分库分表逻辑
同transOrder()
FailOver逻辑
同transOrder()
业务逻辑
账务冻结指令的FrozenId用冻结的交易单号
unfrozenAcct()
pipeline节点
请求参数校验
frozenId不能为空
查询解冻账户(cip)
数据准备
数据插入
insert:T_UTPPZ_TRANSACTION_U
insert:T_TRANSCORE_TRANSACTION
交易状态
00
insert:T_TRANSCORE_PAYMENT
insert(datanode):T_TRANSCORE_PAYMENT_DETAIL
UTPP-UEMSZ
风控(Risk)
解冻用户帐支付指令
用户帐requestType默认为5(解冻)
UTPP-TAMSZ-GW
UTPP-UEMSZ
分库分表逻辑
同transOrder()
FailOver逻辑
同transOrder()
业务逻辑
账务解冻指令的FrozenId用冻结的交易单号
接口(线下银行卡)
com.pinganfu.utpptamsz.facade.OfflinePayAiFacade
渠道能力
支付方式
线下借记(04)
线下贷记(05)
bank_pos
调用超时、返回码为空、000000、010003——》返回06,其余——》失败
transAndPay()
pipeline节点
transOrder()
请求参数校验
数据准备
组装支付和支付明细列表
数据插入(支付单插入、支付明细单插入)
insert:T_TRANSCORE_PAYMENT
insert(datanode):T_TRANSCORE_PAYMENT_DETAIL
风控(Risk)
CP003
资金指令(filter:交易类型)
指令共性
渠道
fundflow=F
渠道帐
fundflow=R
用户帐
fundflow=R
用户帐、渠道账requestType=0
预授权(51)
渠道指令
线下消费(46)、预授权完成(55)
渠道指令
线下消费(46)需要用场景码进行交易区分,理财POS类交易,网关会做交易商户替换(商户池)
渠道帐指令
用户帐
UTPP-TAMSZ-GW
GateWayOffLineTransService.bankPosTrans()
UTPP-UEMSZ
业务逻辑
分库分表逻辑
同transOrder()
预授权完成和预授权无关联
返回逻辑
流程未到支付核心
非000000——>空
流程到支付核心
gwStatus=06(支付核心流程正常或者异常):000000——>06
gwStatus=10:000000——>10
gwStatus=20:非000000——>空
reverseOrder()
pipeline节点
请求参数校验
非空校验、交易类型、金额
查询原交易
上游消费交易超时
根据原来的orderNo+customerId参数查询交易
select(datanode):T_TRANSCORE_TRANSACTION where ORDER_NO=orderNo AND CUSTOMER_ID =customerId
(1)的查询结果为空,插入线下冲正交易(TransStatus=RR)
insert:T_UTPPZ_TRANSACTION_U
insert:T_TRANSCORE_TRANSACTION
上游消费交易未拿到交易终态
根据transId查询
select:T_TRANSCORE_TRANSACTION where TRANS_ID =?
(2)的查询交易单
为空(原交易不存在)
interruptFlag=true,uemsNotifyFlag=false
返回冲正成功:status=10,respCode=000000,transId=null
结束
不为空(原交易存在)
交易状态 in [冲正(26),线下冲正特殊状态(RR) ]
interruptFlag=true,uemsNotifyFlag=false
返回冲正成功:status=10,respCode=000000,transId=原交易单号
结束
查询GW指令
select:T_TRANSCORE_PAYMENT JOIN T_TRANSCORE_PAYMENT_DETAIL where TRANS_ID=?
根据消费交易TransId和PaymentId查询所有的GW指令
select * from T_UTPP_GW_PAY p left join T_UTPP_GW_PAY_ORDER o
on p.pay_id=o.pay_id where p.trans_id=? and p.payment_id=?
on p.pay_id=o.pay_id where p.trans_id=? and p.payment_id=?
所有支付指令是否都已冲正(status=11)
都冲正
interruptFlag=true
返回冲正成功:status=10,respCode=000000,transId=原交易单号
未都冲正
返回冲正进行中:status=06,respCode=000000,transId=原交易单号
需要冲正【非冲正成功(11)】的指令
指令共性
fundflow=R
用户帐、渠道账
requestType=1,冲正
线下消费冲正(47)、预授权完成冲正(56)
用户账
渠道(bank_pos)
渠道帐
预授权冲正(52)
渠道(bank_pos)
UTPP-TAMSZ-GW
GateWayOffLineTransService.bankPosTrans()
单笔指令调用,不关注返回结果
posReverseSign=Y
reverseSign=Y
transType=47|52|56
UTPP-UEMSZ
分库分表逻辑
字段:transId的13-16位
需求点
returnOrder()
pipeline节点
pipeline节点
请求参数校验
select:T_TRANSCORE_TRANSACTION 查询原交易
原交易支付明细组装和校验
查询原交易的成功支付单和支付明细单
select:T_TRANSCORE_PAYMENT JOIN T_TRANSCORE_PAYMENT_DETAIL
撤销交易支付明细组装
数据插入
线下退货(50)
控制并发退款: 更新原交易退款金额、退款实际金额( [where 退款实际金额 +本次退款实际金额< 消费实际金额 AND 交易状态 in (交易成功,部分退款)])
update T_TRANSCORE_TRANSACTION set REFUND_AMT =REFUND_AMT+本次退款金额,REFUND_FACT_AMT=REFUND_FACT_AMT+本次退款实际金额,TRANS_STATUS=?, UPDATE_TIME=systimestamp where trans_Id=? AND REFUND_FACT_AMT +本次退款实际金额<=TRANS_FACT_AMT and trans_status in (10,13)
线下消费撤销(48)、线下退货(50)、预授权撤销(53)、预授权完成撤销(58)
update:T_TRANSCORE_TRANSACTION set trans_status=27(控制并发退款 [where 交易状态 in (10,13)])
insert:T_UTPPZ_TRANSACTION_U
insert:T_TRANSCORE_TRANSACTION 插入撤销交易
insert:T_TRANSCORE_PAYMENT
insert(datanode):T_TRANSCORE_PAYMENT_DETAIL
UTPP-UEMSZ
风控(Risk)
资金指令
指令共性
用户帐、渠道账requestType=2
线下消费撤销(48)、线下退货(50)、预授权完成撤销(58)
用户账
fundflow=F
渠道
fundflow=R
渠道账
fundflow=R
预授权撤销(53)
渠道
fundflow=F
UTPP-TAMSZ-GW
GateWayOffLineTransService.bankPosTrans()
returnGoodSign=G
UTPP-UEMSZ
分库分表逻辑
字段:parentTransId的13-16位
需求点
撤销交易必须全额撤销
线下pos退货交易,网关不保成功
接口(通卡、健康卡)
消费和退货、撤销走线上逻辑,冲正走线下逻辑
交易管控
com.pinganfu.utpptamsz.common.facade.TransControlFacade
updatePayOrderStatus
pipeline
请求参数校验
状态不能更新为00
更新支付指令
update T_UTPP_GW_PAY_ORDER t set t.STATUS = #{newStatus},RETURN_CODE = ?, UPDATE_TIME = NOW(6)
where PAY_ORDER_ID = ? and t.STATUS = #{oldStatus} and t.STATUS in ('00', '06')
where PAY_ORDER_ID = ? and t.STATUS = #{oldStatus} and t.STATUS in ('00', '06')
业务逻辑
insertGwOvertimeRecord
pipeline
请求参数校验
payOrderIdList最大500条
数据准备并入库
去除超时调单表中存在的PAY_ORDER_ID
select PAY_ORDER_ID from T_UTPP_GW_OVERTIME_RECORD where PAY_ORDER_ID in (?)
去除支付指令中状态为06的PAY_ORDER_ID
select PAY_ORDER_ID from T_UTPP_GW_PAY_ORDER where PAY_ORDER_ID in (?) and status='06'
批量插入调单表
insert into T_UTPP_GW_OVERTIME_RECORD
业务逻辑
场景
下游资金渠道异步消息丢失
UTPP更新支付指令异常(UTPP的DB异常)
通过调单继续执行后续支付流程,保证业务连续性
queryTransOrder
请求参数
交易单号
来源系统单号
付款方会员号
父交易单号
交易类型
场景码
业务单号
来源系统
pipeline
请求参数校验
业务单号不能为空
来源系统不能为空
请求参数交易单号不为空
请求交易类型为退款,根据parentTransId
select:T_TRANSCORE_TRANSACTION 查询原交易
设置request参数customerId(原交易toCustomerId),交易退款接口上游不传首付款会员
校验orderNo、customerId不为空
查询交易信息
根据交易单号
select:T_TRANSCORE_TRANSACTION 查询原交易
根据orderNo+customerId
交易信息是否为空
空
insert into T_UTPPZ_TRANSACTION_U
insert into T_TRANSCORE_TRANSACTION
数据库非空
TRANS_ID
UTPP自己生成
TRANS_TYPE
BUSI_CHANNEL
M
TRANS_TIME
sysdate
TRANS_STATUS
88
CUSTOMER_ID
DC_FLAG
D
TRANS_AMT
CREATE_TIME
sysdate
UPDATE_TIME
sysdate
PRODUCT_CODE
非空
根据交易类型+场景码获取消息列表
交易状态为成功或失败,异步消息补Q
返回参数
交易状态
返回码
描述
交易流水
业务逻辑
业务场景
落单+支付
落单失败
落单成功
支付失败
再次支付,支付成功
再次支付,支付失败
支付成功
落单并支付
落单失败
落单成功
支付失败
再次支付,支付成功
再次支付,支付失败
支付成功
UTPP提供给上游业务系统调单方法
异步消息补Q
一笔交易,多次支付,同一个消息通知上游多次
通知支付单号或者状态补发
基于现状目前原则就是,收单调用UTPP新调单接口后,utpp返回告诉收单该交易是否订阅Q,是否触发终态Q重新发送,终态Q需保证业务单系统拿到终态后能将处理中的交易正常异步处理下去(同一笔交易不能同时发送多条不一样内容的终态Q);未订阅任何状态Q的场景,同步需返回明确终态的交易结果
交易终态才会通知上游(收单只关注交易状态)
只有失败是终态,成功还是能退货
业务系统需求
1. UTPP支持收单流水号的幂等调单,并且返回“无此交易”时需要幂等返回,保证调单比同步交易快时,同步和调单结果一致,另外新接口需明确无此交易具体返回错误码及状态。
2. UTPP支持transId和收单流水号orderNo的调单,需要触发终态交易的通知向收单发送异步Q,通知内容需要和交易结果通知保持一致。
针对有异步通知订阅的场景,同步需返回标示是否触发异步Q通知成功;
针对没有订阅异步通知的场景,需同步明确返回交易结果,此时返回数据格式尽量包括原来旧调单接口的字段信息。
针对有异步通知订阅的场景,同步需返回标示是否触发异步Q通知成功;
针对没有订阅异步通知的场景,需同步明确返回交易结果,此时返回数据格式尽量包括原来旧调单接口的字段信息。
3. UTPP新调单接口交易结果返回需要给出明确的失败及明确成功的定义,错误码及状态.
收银台模式下,失败的通知,其实给到收单的是“支付通知”,而非“交易通知”,而API模式下,通知给收单的是“交易通知”
reverseSuccessOrder()
收单自己的订单超时关单后,收到Utpp的成功交易通知,调用该方法对成功交易发起退款
pipeline节点
查询原交易单
交易状态10
交易状态非10
返回失败
组织退款参数
调用退款接口com.pinganfu.utpptamsz.facade.TransAiFacade#reverseOrder()
调用ReverseOrderPipelineFactory
UTPP-UEMSZ
q_cstc_mtxn_commit(TxnType==XX)
2.0:t_transcore_baps_payfail
3.5:交易描述
原交易单状态改为30
调度(集群中某一单机执行,支持分库分表,不需要依赖IP)
特性
上个调度任务未执行完成,下次调度会暂停执行
默认的配置是是通过选主节点,给机器分配分片,获取到分片的就可以执行作业,如果作业配置的是1个分片情况下只有一个机器会执行这个作业
刷新缓存
0 0/5 * * * ?
T_UTPPX_COMMON_CONFIG
T_UTPPX_ACCT_VOUCHER
T_UTPPX_ORGANPAY_CHANNEL
超时调单
10 0/2 * * * ?
SELECT * FROM T_UTPP_GW_OVERTIME_RECORD
WHERE STATUS = '00' and DISPATCH_TIME<=NOW(6) and CREATE_TIME>=DATE_SUB(NOW(6), INTERVAL 1 DAY) order by DISPATCH_NUMBER limit 200
WHERE STATUS = '00' and DISPATCH_TIME<=NOW(6) and CREATE_TIME>=DATE_SUB(NOW(6), INTERVAL 1 DAY) order by DISPATCH_NUMBER limit 200
线上入金冲正
20 0/2 * * * ?
select * from T_UTPP_OL_REVERSE_RECORD where STATUS ='00' and CREATE_TIME >= DATE_SUB(NOW(6), INTERVAL 7 DAY) order by CREATE_TIME limit 200
延时出款
30 0/2 * * * ?
select * from T_UTPP_PAYMENT_DELAY where PROCESS_TIME between DATE_SUB(NOW(6), INTERVAL 14 DAY) and DATE_SUB(NOW(6), INTERVAL 1 MINUTE) and CREATE_TIME between DATE_SUB(NOW(6), INTERVAL 14 DAY) and DATE_SUB(NOW(6), INTERVAL 1 MINUTE)and STATUS = 00 limit 200
组件
接口拦截器组件(Facade、MQ、调度)
分库分表规则计算
failover数据库查询
Failover时效性:运维人工修改配置中心ops配置项(ZK节点的KEY:FAILOVER_STATUS,VALUE:tcore17opr:N, tcore18opr:F)实现切换
FailOver库和00-99库同时down掉——》UTPP只探测00-99库的可用性
日期(8)+4位分库分表逻辑字段+流水号(16),共28位
4位分库分表逻辑字段:0|F(Failover)+0(扩展)+两位分库分表
接口业务流程
FailOver逻辑
捕获octopus的数据库不可用Exception
非000000错误码处理器
给保障系统发Q:q_pmcs_error_log_notify(errorType:CE)
脱敏日志打印
数据库异常,流程可恢复,给保障系统发Q:
Pub/Sub组件
线上出金Pub/Sub组件(withdraw_order_pay_notify)
线上支付结果通知Pub/Sub组件(online_pay_result_notify)
交易成功
异步
UTPP-UEMSZ
结束
同步(交易主流程已经调用uemsz)
结束
交易失败
资金渠道异步才给保障系统发Q:q_pmcs_error_log_notify(errorType:CE)
冲正模块
参数校验
入金模块
多笔(非第一笔)指令失败&&交易类型!=46(线下支付)
insert:T_UTPP_OL_PAY_FAIL_RECORD
交易类型==62 && 场景码 in (300010080003,300010080004) 取消冲正
处理方案
渠道账失败
资金对账长款
渠道长款交易请运营对账组同事差错调账处理。调账方案:200元以下,差错直接调至商户05户,不扣除手续费;200元以上,待商服核实交易情况后再进行对应处理
用户账失败
账务挂销表
内部户挂账请开发提供调账模板(直接从内部户调至商户05户),资金运营协助调账处理。调账方案:200元以下直接调至商户05户,不扣除手续费;200元以上,待商服核实交易情况后再进行对应处理
同步
结束(同步流程已调用uemsz)
异步
UTPP-UEMSZ
结束
线上入金冲正调度模块
获取T_UTPP_OL_PAY_FAIL_RECORD的1000条记录
com.pinganfu.utpptamsz.common.facade.TransInternalAiFacade#onlineFundInReverse()
出金模块
实时调用com.pinganfu.utpptamsz.common.facade.TransInternalAiFacade#onlineFundOutReverse()
线下支付结果通知Pub/Sub组件(offline_pay_result_notify)
异步
交易失败
资金渠道异步才给保障系统发Q:q_pmcs_error_log_notify(errorType:CE)
交易成功或失败
UTPP-UEMSZ
结束
调度(支持单表,不需要依赖IP)
事件通知组件
交易事件通知组件(transNotify)
branch
finally节点:返回码000000——》调用utpp-uemsz
line
transPaymentInsertDb=true——》调用utpp-uemsz
失败降级
q_utppuemsz_trans_notify
Cat埋点
通用支付事件通知组件(payNotify)
finally节点:同步失败,补偿发Q(q_utppuemsz_pay_notify)
流程到Gw,调用uemsz
交易和支付(明细)入库成功,流程未到Gw,调用uemsz
落单并支付,交易成功并且支付未成功,需要回滚交易单状态
update:T_TRANSCORE_TRANSACTION set trans_status=00 where trans_Id=? and trans_status in (03,34)
反向交易,原交易更新状态和金额成功,后续数据插入失败,需要回滚原交易
监控
CAT埋点(分钟级监控)
主链路的UTPP-UEMSZ节点
埋点维度
全栈
场景码
埋点
Transaction【Transaction主要用于监控一段代码的运行情况:运行次数、QPS、错误次数、失败率、响应时间统计(平均响应时间、Tp9XXX分位值)】
交易通知
落单成功率
落单成功\失败数
支付通知
支付成功率
支付成功\失败数
特殊场景
退款交易:非用户账失败,返回上游06,需要改造增加2个支付埋点和给PMCS保障推送消息
Event(总次数)
退款\撤销交易用户账异步失败
分支
交易—>支付
交易成功,支付成功
4个埋点
交易成功,支付失败
4个埋点
交易失败,支付未执行
2个埋点
交易并支付
交易成功,支付成功
4个埋点
交易成功,支付未执行
BranchPipeline
4个埋点
LinePipeline
2个交易埋点,需要改造增加2个支付埋点
交易成功,支付失败
BranchPipeline
4个埋点
LinePipeline
4个埋点
交易失败,支付未执行
BranchPipeline
2个埋点
LinePipeline
0个埋点,需要改造增加2个支付埋点
遗留问题
UPDATE语句控制幂等,高并发的时候会失效,目前账务保底
组件
接口拦截器组件(Facade、MQ、调度)
分库分表规则计算
failover数据库查询
Failover时效性:运维人工修改配置中心ops配置项(ZK节点的KEY:FAILOVER_STATUS,VALUE:tcore17opr:N, tcore18opr:F)实现切换
FailOver库和00-99库同时down掉——》UTPP只探测00-99库的可用性
日期(8)+4位分库分表逻辑字段+流水号(16),共28位
4位分库分表逻辑字段:0|F(Failover)+0(扩展)+两位分库分表
接口业务流程
FailOver逻辑
捕获octopus的数据库不可用Exception
非000000错误码处理器
给保障系统发Q:q_pmcs_error_log_notify(errorType:CE)
脱敏日志打印
数据库异常,流程可恢复,给保障系统发Q:
请求外部系统拦截器组件(计算并汇总一笔交易的内部和外部的耗时)
方法名称+请求参数
方法名称+耗时+返回参数
Pub/Sub组件
线上出金Pub/Sub组件(withdraw_order_pay_notify)
线上支付结果通知Pub/Sub组件(online_pay_result_notify)
交易成功
异步
UTPP-UEMSZ
结束
同步(交易主流程已经调用uemsz)
结束
交易失败
资金渠道异步才给保障系统发Q:q_pmcs_error_log_notify(errorType:CE)
冲正模块
参数校验
入金模块
多笔(非第一笔)指令失败&&交易类型!=46(线下支付)
线上入金失败立刻冲正(T_UTPP_OL_IMMEDIATE_REVERSE)
com.pinganfu.utpptamsz.common.facade.TransInternalAiFacade#onlineFundInReverse()
具体场景
寿险批量发红包
insert:T_UTPP_OL_PAY_FAIL_RECORD
交易类型==62 && 场景码 in (300010080003,300010080004) 取消冲正
处理方案
渠道账失败
资金对账长款
渠道长款交易请运营对账组同事差错调账处理。调账方案:200元以下,差错直接调至商户05户,不扣除手续费;200元以上,待商服核实交易情况后再进行对应处理
用户账失败
账务挂销表
内部户挂账请开发提供调账模板(直接从内部户调至商户05户),资金运营协助调账处理。调账方案:200元以下直接调至商户05户,不扣除手续费;200元以上,待商服核实交易情况后再进行对应处理
同步
结束(同步流程已调用uemsz)
异步
UTPP-UEMSZ
结束
线上入金冲正调度模块
获取T_UTPP_OL_PAY_FAIL_RECORD的1000条记录
com.pinganfu.utpptamsz.common.facade.TransInternalAiFacade#onlineFundInReverse()
出金模块
实时调用com.pinganfu.utpptamsz.common.facade.TransInternalAiFacade#onlineFundOutReverse()
线下支付结果通知Pub/Sub组件(offline_pay_result_notify)
异步
交易失败
资金渠道异步才给保障系统发Q:q_pmcs_error_log_notify(errorType:CE)
交易成功或失败
UTPP-UEMSZ
结束
调度(支持单表,不需要依赖IP)
事件通知组件
交易事件通知组件(transNotify)
branch
finally节点:返回码000000——》调用utpp-uemsz
line
transPaymentInsertDb=true——》调用utpp-uemsz
失败降级
q_utppuemsz_trans_notify
Cat埋点
通用支付事件通知组件(payNotify)
finally节点:同步失败,补偿发Q(q_utppuemsz_pay_notify)
流程到Gw,调用uemsz
交易和支付(明细)入库成功,流程未到Gw,调用uemsz
落单并支付,交易成功并且支付未成功,需要回滚交易单状态
update:T_TRANSCORE_TRANSACTION set trans_status=00 where trans_Id=? and trans_status in (03,34)
反向交易,原交易更新状态和金额成功,后续数据插入失败,需要回滚原交易
通用支付事件通知组件(payNotify)
finally节点
同步调用uemsz失败,补偿发Q(q_utppuemsz_pay_notify)
任何异常降级,不影响同步返回结果
流程到Gw,调用uemsz
交易和支付(明细)入库成功,流程未到Gw,调用uemsz
落单并支付,交易成功并且支付未成功,需要回滚交易单状态
update:T_TRANSCORE_TRANSACTION set trans_status=00 where trans_Id=? and trans_status in (03,34)
线上、线下退货及撤销交易,原交易更新状态和金额成功,后续数据插入失败,需要回滚原交易
update:T_TRANSCORE_TRANSACTION set trans_status=00 where trans_Id=? and trans_status in (03,34)
0 条评论
下一页