一、收银咨询

1.1 集团侧收银咨询

1.1.1 咨询主流程

@startuml

actor 用户
participant buy2
participant cashierplatform
participant pg
participant tair
participant ump
participant ipay


用户 -> buy2:下单-订单渲染

buy2 -> cashierplatform:咨询可用支付方式\nCashierPlatformFacade#consult

group 咨询前流程

alt 首次咨询
cashierplatform --> pg:异步传递风控设备信息
pg --> ipay:传递风控设备信息
end

alt 非首次咨询
cashierplatform -> tair:获取收银单缓存
end

end

group 咨询\nPgIntegrationImpl#payOptionConsult

cashierplatform -> cashierplatform:构建基础请求\nPgIntegrationImpl#buildBaseGwPmntConsultRequest
cashierplatform -> cashierplatform:基于业务填充参数\nTmallOverseasCashierExtensionImpl#fillPgconsultRequest

group 通用咨询流程\nPgIntegrationImpl#getGwPmntConsultResponse
cashierplatform -> pg:pg收银咨询\nGwConsultFacade#payConsult
pg -> ipay:ipay可用支付方式咨询
end

cashierplatform -> cashierplatform:咨询结果处理\nPgIntegrationImpl#dealPgConsultResponse


end


group 咨询后通用流程
cashierplatform -> cashierplatform:添加支付平台自定义配置渠道
cashierplatform -> cashierplatform:费率设置
cashierplatform -> cashierplatform:订单金额设置
cashierplatform -> cashierplatform:收银决策(渠道过滤等)
cashierplatform -> ump:支付优惠查询
cashierplatform -> cashierplatform:渠道优惠计算
cashierplatform -> cashierplatform:手续费及实付金额设置
cashierplatform -> cashierplatform:余额渠道金额检查过滤
cashierplatform -> cashierplatform:渠道推荐
cashierplatform -> cashierplatform:渠道排序
cashierplatform -> tair:收银单缓存
end

cashierplatform -> buy2:返回咨询结果


buy2 -> 用户 : 前置收银台渲染
@enduml

1.1.2 日常态收银咨询

主要存在几条链路,B15、香港钱包、澳门钱包以及马来钱包(Z28)。

1.1.2.1 B15链路咨询

@startuml

participant cashierplatform
participant tair
participant pg
participant ipay

group 通用咨询流程\nPgIntegrationImpl#getGwPmntConsultResponse

alt <color:red>(首次咨询||MYPA降级)||(pg缓存数据为空)

group <color:red>pg咨询流程\nPgIntegrationImpl#pgConsult

cashierplatform -> tair:预加载,获取<color:red>用户维度<color:black>pg咨询缓存数据(汇率、支付方式等)

alt <color:red>用户维度<color:black>pg咨询缓存为空
cashierplatform -> pg:pg咨询\nGwConsultFacadeClient#payConsult
pg -> ipay:ipay可用支付方式咨询\n

alt <color:red>需要缓存<color:red>用户维度<color:black>pg咨询数据
cashierplatform -> tair:缓存<color:red>用户维度<color:black>pg咨询数据
end

end

alt <color:red>HK咨询&&Q用户&&非香港手机号
cashierplatform -> pg:pg收银二次咨询\nGwConsultFacadeClient#payConsult\n<color:green>(咨询B15时设置收银支付币种为USD)
pg -> ipay:ipay可用支付方式咨询
end

alt <color:red>MO咨询&&(Q用户||未设置支付密码)
cashierplatform -> pg:pg收银二次咨询\nGwConsultFacadeClient#payConsult\n<color:green>(咨询B15时设置收银支付币种为MOP)
pg -> ipay:ipay可用支付方式咨询
end

cashierplatform -> tair:缓存此次<color:red>收银单维度<color:black>pg咨询结果
end

end

alt <color:red>非首次咨询,使用pg咨询数据缓存
cashierplatform -> tair:预加载,获取<color:red>收银单维度<color:black>pg咨询缓存数据(汇率、支付方式等)

end

end

group 咨询后通用流程
cashierplatform -> cashierplatform:省略,可见咨询主流程
end

@enduml

1、HK和MO咨询的用户有可能会进行二次咨询,原因是当时HK咨询时,会将站点参数代入pg咨询请求中,然后向ipay的HK钱包咨询;但是如果是HK钱包的Q用户&&非香港手机号,此时是没有办法从HK钱包链路获取到数据,只能将站点移除,用USD币种去请求B15链路;至于HK钱包和MO钱包对于不能走钱包链路的逻辑判定不同,是因为各自钱包链路的独特性导致

2、缓存的过期时间在此diamond中:com.taobao.payment.cashierplatform:cashierplatform.properties

3、在这里,有两个缓存 用户维度pg咨询缓存:首次咨询,会使用用户维度缓存 收银单维度pg咨询缓存:同一个下单页,非首次咨询即异步渲染时使用此缓存

1.1.2.2 香港钱包链路咨询

@startuml

participant cashierplatform
participant ump
participant tair

group 咨询\nPgIntegrationImpl#payOptionConsult

cashierplatform -> cashierplatform:构建基础请求\nPgIntegrationImpl#buildBaseGwPmntConsultRequest\n<color:green>设置扩展参数site=HK
cashierplatform -> cashierplatform:基于业务填充参数\nTmallOverseasCashierExtensionImpl#fillPgconsultRequest

group 通用咨询流程\nPgIntegrationImpl#getGwPmntConsultResponse
cashierplatform -> cashierplatform:省略,可见B15链路流程
end

group 咨询结果处理\nPgIntegrationImpl#dealPgConsultResponse
alt 香港B/C状态时(pmntOptions为空的)
cashierplatform -> cashierplatform: 移除支付宝主站渠道
end

cashierplatform -> cashierplatform: HK链路打标

cashierplatform -> cashierplatform: 从外汇平台读取 HKD2USD 汇率\nExchangeQueryService#queryExchangeRate

end
end


cashierplatform -> cashierplatform:添加支付平台自定义配置渠道
cashierplatform -> cashierplatform:费率设置

group cashierplatform -> cashierplatform:订单金额设置
alt 没有汇率信息&&B/C状态\n<color:green>目前天猫海外香港链路专属
cashierplatform -> cashierplatform: 设置默认汇率
end
end

cashierplatform -> cashierplatform:收银决策(渠道过滤等)
cashierplatform -> ump:支付优惠查询
cashierplatform -> cashierplatform:渠道优惠计算
cashierplatform -> cashierplatform:手续费及实付金额设置
cashierplatform -> cashierplatform:余额渠道金额检查过滤
cashierplatform -> cashierplatform:渠道推荐
cashierplatform -> cashierplatform:渠道排序
cashierplatform -> tair:收银单缓存

@enduml

1.1.2.3 澳门钱包链路咨询

@startuml

participant cashierplatform


group 咨询\nPgIntegrationImpl#payOptionConsult

cashierplatform -> cashierplatform:构建基础请求\nPgIntegrationImpl#buildBaseGwPmntConsultRequest\n<color:green>MO设置扩展参数site=MO
cashierplatform -> cashierplatform:基于业务填充参数\nTmallOverseasCashierExtensionImpl#fillPgconsultRequest

group 通用咨询流程\nPgIntegrationImpl#getGwPmntConsultResponse
cashierplatform -> cashierplatform:省略,可见B15链路流程
end

group 咨询结果处理\nPgIntegrationImpl#dealPgConsultResponse
cashierplatform -> cashierplatform: MO链路打标

cashierplatform -> cashierplatform: 对DEBITCARD特殊处理\nPgIntegrationImpl#moDebitCardPayOption
end
end



group 咨询后通用流程
cashierplatform -> cashierplatform:省略,可见咨询主流程
end

@enduml

PgIntegrationImpl#moDebitCardPayOption这部分逻辑对多张借记卡的信息做了合并,因为payOption模型维度只能有一个借记卡

1.1.2.4 马来PA钱包(Z28)链路咨询

@startuml

participant buy2
participant cashierplatform
participant finance_member
participant pg
participant ipay

group 收银咨询

buy2 -> cashierplatform:收银咨询\nCashierPlatformFacade#consult\n<color:green>马来PA 携带uic开通标
cashierplatform --> pg:异步传递风控设备信息
pg --> ipay:传递风控设备信息

group 咨询\nPgIntegrationImpl#payOptionConsult

cashierplatform -> cashierplatform:构建基础请求\nPgIntegrationImpl#buildBaseGwPmntConsultRequest

group 基于业务填充参数\nTmallOverseasCashierExtensionImpl#fillPgconsultRequest
cashierplatform -> cashierplatform:<color:green>马来PA(Z28)链路额外携带风控tokenId

cashierplatform -> finance_member:<color:green>如果存在PA标,Z28站点用户id查询\nTmallOverseasCashierExtensionImpl#getIpaySiteCustomerId
end

group 通用咨询流程\nPgIntegrationImpl#getGwPmntConsultResponse
cashierplatform -> pg:pg收银咨询\nGwConsultFacadeClient#payConsult\n<color:green>咨询扩展参数携带2162用户id
pg -> ipay:ipay可用支付方式咨询\n<color:green>识别PA标,直连Z28 SG站点进行咨询
end

group 咨询结果处理\nPgIntegrationImpl#dealPgConsultResponse
cashierplatform -> cashierplatform: 省略,通用逻辑
end
end

group 咨询后通用流程
cashierplatform -> cashierplatform:省略,可见咨询主流程
end

@enduml

1.1.3 大促态(静态化缓存开启后)收银咨询

@startuml

participant cashierplatform
participant tair
participant finance_member

group 静态化逻辑判断\nPgIntegrationImpl#getGwPmntConsultResponseFromCache
alt 天猫海外前置缓存开关开启 && 不穿透缓存
cashierplatform -> tair:获取非用户信息信息缓存\n币种,渠道,汇率等
cashierplatform -> finance_member:获取用户资产缓存\nUserAssetQueryFacadeClient#queryUserAsset
end

alt HK咨询&&Q用户&&非香港手机号\n<color:red>为什么要有这样的流程?
cashierplatform -> cashierplatform:设置收银支付币种为USD
cashierplatform -> tair:获取非用户信息信息缓存\n币种,渠道,汇率等
cashierplatform -> finance_member:获取用户资产缓存\nUserAssetQueryFacadeClient#queryUserAsset
end
end

cashierplatform -> cashierplatform:标记此次收银单是静态化缓存数据

group 咨询后通用流程
cashierplatform -> cashierplatform:省略,可见咨询主流程
end

@enduml

TmallOverseasCashierExtensionImpl#beforeConsult 异步传递风控设备信息的作用:支付时风控校验判断需要,会参考设备指纹信息给出风控的方式

1.2 ipay 侧收银咨询

集团会通过支付咨询接口向ipay咨询可用的支付工具、费率、汇率等信息,然后会根据这些信息以及下单信息,集团侧自行计算需要支付的金额和币种;

image

● 【步骤4】根据商户UID(支付宝UID)注册Q会员,如果已经创建不需要重新注册 ● 【步骤8】返回CNY/外币、USD/外币汇率,用于天猫侧金额转换。 ○ 对客报价都是CNY,CNY/外币用于计算用户实付外币金额的。 ○ USD/外币的话是用来做天猫侧营销资金池的一个扣减操作需要 ○ 主站会获取CNY/USD 汇率,在协议支付下单阶段,主站会把CNY转化为USD调用ipay的收单下单

二、支付

2.1 集团侧支付

2.1.1 首次支付

@startuml

actor 端 as front
participant buy2
participant tp3
participant cashier
participant pp
participant ump
participant fp
participant pg
participant alipay
participant ipay


front -> buy2:提交订单并支付

group 交易创单
buy2 -> tp3:创建订单
activate tp3
tp3 -> pp:创建外部支付单\nPaymentPlatformFacade#checkout
activate pp
pp -> pp:创建收单和payTerm
pp -> pg:创建支付宝主站交易单\nGwPmntFacade#create
pg -> alipay:创建交易单
pg --> pp
pp --> tp3
deactivate pp
tp3 --> buy2
deactivate tp3
end
group 产品包扩展点定制-发起支付
buy2 -> cashier:发起支付\nCashierPlatformFacade#pay
cashier -> pp:发起支付\nPaymentPlatformFacade#pay
pp -> pp:创建支付单(支付计划和指令)
pp --> cashier
cashier --> buy2
end
buy2 --> front

group 异步-支付驱动
pp -> ump:检查并冻结优惠
activate pp
pp -> fp:冻结优惠资金

pp -> pg:发起主站协议支付
activate pg

pg -> alipay:协议支付
activate alipay
alipay -> ipay:创建ipay收单
ipay --> alipay
alipay --> pg
deactivate alipay
pg --> pp:返回ipay单号
deactivate pg
pp -> pg:请求ipay支付\nGwPmntFacade#pay
activate pg
pg -> ipay:ipay支付
ipay --> pg
pg --> pp
deactivate pg
deactivate pp

end

group 支付回调-异步
ipay -> alipay:支付回调
alipay -> tp3:支付回调
tp3 -> pg:消息路由
pg -> pp:
pp -> pp:推进支付单、收单成功

pp -> tp3:推进交易单
end

loop 支付结果轮询
front -> cashier:查询支付结果\nmtop QueryPayResultUnitService#queryBizResult
cashier -> pp:查询支付结果\nPaymentQueryFacade#queryPayResult
pp -> pp:查支付单

alt 支付未决
pp -> pg:支付结果查询\nPgPmntFacade#query
end
pp -> cashier:返回支付结果或风控
cashier -> front:返回结果

alt 出风控
front -> front:跳转外部2D3D或者拉起sdk风控或着跳转风控挑战
note right
风控挑战是海外前端开发的页面 比如卡有效期卡明文挑战
sdk风控是香港钱包特有的  比如输入长短密码
3D是外部机构 2D是ipay h5风控页面
end note
front -> front:用户提交风控,从风控页跳转到海外轮询页
front -> pg:http调用pg支付推进\n<color:red>海外用户会解析到pg的美国机房</color>
pg -> ipay:支付推进
end

end

@enduml

2.1.2 二次支付

@startuml

actor 端 as front
participant tm
participant cashier
participant pp
participant pg
participant ipay
participant ump
participant fp

group dopay 获取收银台url
front -> tm:二次支付 dopay
tm -> cashier:收银咨询,获取收银台url\nCashierPlatformFacade#consultWithTerm
cashier -> pp:查询收单信息
cashier -> cashier:构造收银单
cashier -> pg:收银咨询
pg -> ipay:收银咨询
ipay --> pg
pg --> cashier
cashier -> cashier:写入tair
cashier --> tm:返回收银台url\n拼装了收银单号
tm --> front
end

alt 优惠解冻
front -> cashier:解冻优惠\nSecondPayUnitService#unfreezePromotion
cashier -> pp:取消支付\ncancelPay
pp -> pp:关闭支付单
pp -> ump:解冻优惠
pp -> fp: 解冻优惠资金
pp --> cashier
cashier --> front:解冻结果
end

front -> cashier:二次收银台渲染\nSimpleCashierRenderUnitService#renderSimpleCashier

front -> cashier:二次支付提交\nSimpleCashierSubmitUnitService#secondPay
cashier -> pp:支付 pay
pp -> pp:创建支付单
pp --> cashier
cashier --> front
group 异步支付驱动
alt 存在支付中的单据
pp --> pp:异步关单以及ipay单据
end
pp -> pp:创建支付单
pp -> ump:冻结支付优惠
pp -> fp:冻结优惠预算
pp -> pg :协议支付
pg -> alipay:协议支付
alipay -> ipay:创单
alipay -->pg
pg --> pp
pp -> ipay:提交支付
end

front --> front:轮询风控流程 参考支付流程


@enduml

2.2 ipay侧支付

非预售场景下 协议支付 + 提交支付 流程:

image

【步骤31】 ipayment支付为异步处理,受理了返回成功。且走的为老模型。新加的币种会考虑走新模型

三、绑卡流程

3.1 集团侧绑卡

3.1.1 信用卡绑卡

@startuml

actor 端 as front
participant buy2
participant cashier
participant mcms
participant pg
participant ipay

alt  新增卡
front -> cashier:AddCardRenderUnitService#renderAddCard\n获取页面渲染数据 比如支持的卡品牌、手机号\n账单地址、请求ipay卡中心的接口地址
cashier -> mcms:获取需要填写账号地址的国家
cashier -> mcms:获取绑定手机号的卡品牌(hk定制) BOCI
cashier --> front
front -> front: 填入卡信息
alt 用户点击绑卡
front -> pg:调用ipay cachecard接口
pg -> ipay:cachecard
pg --> front:返回卡临时token、发卡国、卡品牌等信息
front -> cashier: 提交新增卡\nAddCardSubmitUnitService#submitAddCard
cashier -> cashier:重新构造收银单,新增卡
cashier --> front
end
end

front -> cashier:触发收银台渲染\nSelectPaymentRenderUnitService#consultSelectPayment
front -> front:用户选择支付方式
front -> cashier:提交支付方式\nSelectPaymentSubmitUnitService#submitSelectPayment
cashier --> front:返回用户选择的支付方式和cardToken
front -> buy2:页面异步渲染adjust\n(携带了当前选择的支付方式和cardTken)
buy2 -> cashier:收银咨询with cashierOrderNo
cashier -> cashier:收银咨询流程 参考咨询时序图
buy2 --> front:支付方式组件渲染新的支付方式 icon 卡号

@enduml

3.1.2 澳门钱包-借记卡绑卡

@startuml
actor user
participant   fe
participant buy2
participant cashierplatform
participant pg
participant ipay_wireless
participant ipay

user -> fe:打开收银台页面
fe -> cashierplatform:渲染收银台
cashierplatform -> cashierplatform:mo钱包链路下发\n借记卡绑卡组件
cashierplatform --> fe

user -> fe:用户点击借记卡绑卡
fe -> cashierplatform:支付方式选中提交
cashierplatform -> pg:获取加签跳转ipay url
pg --> cashierplatform
cashierplatform --> fe
fe -> ipay_wireless:前端跳转到ipay无线
ipay_wireless -> ipay_wireless:验签登录
user -> ipay_wireless:用户绑卡操作
ipay_wireless -> fe:跳转回到收银台 <color:red>url携带强刷参数
fe -> cashierplatform:重新渲染 强刷
cashierplatform -> cashierplatform:<color:red>强刷穿透静态化缓存\n<color:red>pg咨询缓存
cashierplatform -> pg:重新咨询
pg -> ipay:收银咨询
ipay --> pg
pg --> cashierplatform
cashierplatform --> fe:渲染出借记卡

user -> fe:选中借记卡
fe -> cashierplatform:支付方式提交
cashierplatform -> cashierplatform:提交逻辑处理
cashierplatform --> fe
fe -> buy2:关闭收银页面\n触发交易异步渲染
buy2 -> cashierplatform:收银咨询\n获取选中的支付方式
cashierplatform --> buy2
buy2 --> fe:下单页渲染出\n支付方式组件和选中的卡资产


@enduml

四、逆向

4.1 集团侧逆向

非预售场景下,集团侧逆向退款流程:

@startuml
actor 客服或技术小二
actor 商家
participant drp
participant rp
participant pp
participant tp3
participant alipay
participant ipay

group 正常链路
商家 -> rp:同意退款
rp -> rp:主订单锁
rp -> pp:获取退款指令
rp -> tp3:退款打款
tp3 -> alipay:退款打款
alipay --> ipay:异步退款
rp -> rp:发送退款成功消息
rp -> rp:解锁
rp -> 商家:退款成功
pp --> pp:消费rp退款消息落库
end

group 异常链路
alt
客服或技术小二 -> drp:强制打款给买家\ntrip_disburse_to_buyer
drp -> tp3:TcRevisalUnitService\ndoTradeRevisal
tp3 -> alipay:退款
end
alt
客服或技术小二 -> rp2: 订正工具
rp2 -> tp3
tp3 -> alipay:退款
end
end

@enduml

4.2 ipay侧逆向

非预售场景下,ipay b15 侧逆向退款流程:

image

五、预售

天猫预售是天猫前置收银台的一种特殊的业务逻辑,用户可以通过预售、尾款的形式购买商品。对ipay侧来说是两次支付,通过扩展字段进行弱关联。在天猫预售里 涉及金额掰正的特殊逻辑以及退款金额由ipay计算 改造。

5.1 集团侧预售链路

5.1.1 收银咨询

@startuml

actor 用户
participant buy2
participant uic
participant cashier
participant pp
participant finance_member
participant pg
participant ump
participant alipay
participant ipay


用户 -> buy2:下单-订单渲染

group 海外支付产品生效逻辑
buy2 ->  buy2:设备支持判断、商品标屏蔽、业务身份识别
buy2 -> buy2:<color:red>预售订单识别处理、置灰不支持的子订单等
buy2 -> uic:用户支付方式设置
buy2 -> pg:支付宝上一次支付成功方式
pg -> alipay: 用户支付行为查询
buy2 ->  pp:用户的上一次前置支付
buy2 -> buy2: 其他决策灰度逻辑
end

group 收银咨询

buy2 -> cashier:收银咨询\nCashierPlatformFacade#consult\n<color:red>传递预售商品金额、预售阶段信息\n<color:red>尾款阶段传递预售订单号
cashier --> pg:异步传递风控设备信息
pg --> ipay:传递风控设备信息
cashier -> pg:pg收银咨询\nGwConsultFacade#payConsult
pg -> ipay:ipay可用支付方式咨询

cashier -> cashier:添加自定义支付方式\n<color:red>尾款阶段置灰支付宝大陆
cashier -> cashier:收银决策
cashier -> ump:支付优惠查询
cashier -> cashier:渠道优惠计算
cashier -> cashier:手续费计算
cashier -> cashier:渠道排序推荐\n<color:red>定金阶段不推荐上次支付成功的支付方式\n<color:red>定制预售限额拦截逻辑
cashier -> cashier:收银单缓存\n<color:red>预售商品金额、预售阶段写入收银单
cashier -> buy2:返回咨询结果

end

buy2 -> 用户 : 渲染结果
@enduml

5.1.2 支付

@startuml
actor terminal
participant buy2
participant tp3
participant cashierplatform
participant pp
participant ump
participant fp
participant pg
participant alipay
participant ipay

terminal -> buy2:创单并支付
activate buy2
buy2 -> tp3:创单
activate tp3
tp3 -> pp:支付收单

activate pp
pp -> pp:内部收单\n<color:red>支持多阶段收单
pp -> pg:batchCreate
activate pg
pg -> alipay:batchCreate\n<color:red>预售走create
pg --> pp

deactivate pg
pp --> tp3
deactivate pp

tp3 --> buy2
deactivate tp3
deactivate buy2

loop <color:red>多个尾款改价则调用多次

alt <color:red>尾款阶段改价
tp3 -> pp:尾款单改价
note left
<color:red>本次新增链路
end note
pp -> pp:修改收单金额&尾款payterm金额与优惠
pp -> pp:如果存在payorder,修改 payorder
pp -> pg:支付宝改价\n<color:red>0元改价走close\n<color:red>0元改到非0走add
pg -> alipay:modify
alipay --> pg
pg  --> pp
pp -->  tp3
end
end
alt  <color:red>调用支付宝改价未决异步通知
activate tp3
alipay -> tp3:通知改价结果
note left
本次新增链路
由于tp3暂时无法消费pp异步改价通知
只能改成tp3转发消息后并自己处理通知
end note
tp3 ->  pg:转发
pg -> pg:转消息通知
pg -> pp:消费消息并通知pp
pp -> pp:处理 通知改价结果
tp3 -> tp3:转自发自接消息
tp3 ->  tp3:消费并处理改价结果
deactivate tp3
end

buy2 -> cashierplatform:提交支付
activate buy2
activate cashierplatform
cashierplatform -> cashierplatform:<color:red>读收银单缓存
cashierplatform -> pp:提交支付
activate pp
pp -> pp:创建支付单
pp --> cashierplatform
deactivate pp
cashierplatform --> buy2
deactivate cashierplatform
buy2 --> terminal
deactivate buy2
pp -> ump:冻结优惠
note left of pp :异步驱动
activate pp
pp -> fp:冻结营销预算
pp -> pg:协议支付
activate pg
pg -> alipay:协议支付\n<color:red>不传0元尾款单\n<color:red>支持多阶段
alipay -> ipay:收单
alipay --> pg
pg --> pp:返回ipay单号
deactivate pg
pp -> pg:提交支付
activate pg
pg -> ipay:提交支付\n<color:red>透传预售订单标
deactivate pg
deactivate pp

alt 异步成功通知
alipay -> tp3
tp3 -> pg:转发
pg -> pg:转自发自接消息
pg -> pp:消费并通知
pp -> pp:推进单据\n<color:red>合并支付0元单据一起推进
pp -> tp3:支付成功通知
tp3 -> tp3:单据推进\n<color:red>兼容0元尾款推进
end

@enduml

5.2 ipay侧预售链路

5.2.1 支付

预售为天猫海外的一种特殊的业务链路。相比于普通支付场景,主链路流程没有改动,部分细节有改动。

image

【步骤2】下单的变更点: request.body.riskInfo.tradeExtendData[i]每笔订单原始信息增加预售相关内容

  1. 订单类型(Key: orderBizType): ○ value是ENUM,表示普通订单还是多阶段订单 ○ 如普通担保交易订单:S_STANDARD,多阶段支付的订单:S_PHASE_STANDARD
  2. 订单的支付阶段(Key: payStage): ○ value是Integer,(0,1,2,3…)表示第一笔支付还是后续的第N笔支付 【步骤10】支付变更点 request.body.extendInfo增加支付要素
  3. 增加一个object: paymentFactor ○ 本次paymentFactor内只有一个key: isPresell,value(boolean): true或false

5.2.2 逆向退款

预售场景退款时,不需要集团侧传输具体的外币退款明细,由ipay侧进行计算。

image

退款金额示例: image

六、其他链路

6.1 支付通知

6.1.1 集团侧支付通知

@startuml
participant tp3
participant pp
participant pg
participant ump
participant fp
participant alipay
participant ipay
group 支付成功通知
ipay -> alipay:支付回调
alipay -> tp3:支付回调
tp3 -> pg:消息路由
pg -> pp:
pp -> pp:推进支付单、收单成功

pp -> tp3:推进交易单
end

group 支付失败通知
ipay -> pg:支付失败通知
pg -> pp
pp -> ump:解冻优惠
pp -> fp:解冻优惠预算
pp -> pp:更新支付单状态
end

group 风控通知
ipay -> pg:风控通知
pg -> pg:存储
end
@enduml

6.2 风控

6.2.1 集团侧风控

@startuml
actor 端 as front
participant heshen
participant out_page
participant cashier
participant pp
participant pg
participant alipay
participant ipay
loop 支付结果轮询
front -> cashier:查询支付结果\nmtop QueryPayResultUnitService#queryBizResult
cashier -> pp:查询支付结果\nPaymentQueryFacade#queryPayResult
pp -> pp:查支付单

alt 支付未决
pp -> pg:支付结果查询\nPgPmntFacade#query
end
pp -> cashier:返回支付结果或风控
cashier -> front:返回结果


alt sdk核身
front -> heshen:调用端上的核身sdk拉起风控
front -> heshen:用户输入核身信息\n短密、长密等
note right
sdk风控是香港钱包特有的  比如输入长短密码
end note
heshen -> front:关闭核身回到前端页面
front -> pg:支付推进
pg -> ipay:支付推进
end
alt h5或者3d风控
front ->  cashier:cardValidate获取url
front -> out_page:跳转外部页面并post参数
note right
3D是外部机构 h5风控页面
end note
front -> out_page:用户输入信息
out_page -> front:跳回前端页面
end
alt  riskChallenge
front ->  cashier:cardValidate渲染风控页面\n卡有效期、卡号挑战
front -> front:用户输入信息
front -> pg:风控信息验证
pg ->  ipay:riskVerify
end
@enduml

6.2.2 ipay侧风控

image

6.3 集团侧马来钱包开通通知

@startuml
participant 手淘
participant ipay小程序
participant farseer
participant uic
participant cashier
participant finance_member
participant pg
participant finnet_rt
participant ipay

== 开通流程 ==

手淘 -> ipay小程序
ipay小程序 -> cashier:mtop请求授信登录ipay加签
cashier -> uic:根据havanaid查询alipayuid
cashier -> pg:调用pg加签 秘钥存储在pg
cashier --> ipay小程序:返回加签串 包含alipayuid
ipay小程序 -> ipay:验签登录
ipay --> ipay小程序:重定向到绑定页面
ipay小程序 -> ipay小程序:用户操作绑定

ipay -> finnet_rt:开通成功通知
finnet_rt -> farseer:同步通知
note left of farseer
任何一步失败返回ipay失败
依赖ipay最大7次重试
兜底策略 T+1 对账
end note
activate farseer
farseer -> uic:根据ipayuid查询havanaid
farseer -> uic:开通用户打标
farseer -> finance_member:新增2162绑定关系
deactivate farseer


== 用户换绑支付宝账号 ==
uic --> farseer:uic变更消息


farseer -> uic:去标
note left of farseer
失败依赖notify重试
兜底策略 T+1 对账
end note
activate farseer
farseer -> finance_member:删除2162绑定关系
deactivate farseer

@enduml