From 70b11a7d0c1b22435ce7c9d1e5abc265d394a10f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E7=A3=8A?= Date: Wed, 6 Jun 2018 07:39:46 +0000 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=20'design.md'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- design.md | 792 ------------------------------------------------------ 1 file changed, 792 deletions(-) delete mode 100644 design.md diff --git a/design.md b/design.md deleted file mode 100644 index 24ec8a7..0000000 --- a/design.md +++ /dev/null @@ -1,792 +0,0 @@ -[TOC] - -# 小额免密技术方案 - -## 改造思路 - -- ~~风控~~沿用现有支付原有的实时风控,增加资金种类维度 -- 满足小额免密条件的交易在商户扫码下单后自动完成进行支付(快捷交易除外) -- 在SESSION中增加小额免密标志以供APP判断是否需要跳密码框 -- 后台支付交易同样判别SESSION中的标志来选择是否需要进行验密流程 - -### 原交易流程 - -- 商户侧 - - ```mermaid - sequenceDiagram - participant merc - participant front - participant pay - - merc->>front:扫码下单(bsdkmca1.TSDK4090400) - front->>front:检查付款码 - front->>pay:消费下单 - pay-->>front:返回订单号 - front-->>pay:申请支付令牌 - pay-->>front:返回支付令牌 - front->>front:更新付款码 - loop 循环检查订单状态 - front-->>front:检查订单状态 - alt 订单被支付 - front-->>merc:返回订单支付状态 - else 订单未被支付 - note over merc,front:Continue - - end - end - ``` - -- 用户侧 - - ```mermaid - sequenceDiagram - participant app - participant front - participant pay - - loop 循环查询待支付订单 - app->>front:查询待支付订单(eappmca1.APP4080805) - front-->>app:返回查询结果 - - alt 有待支付订单 - app->>app:唤起密码框 - app->>app:唤起短信验证交互流程(仅快捷) - app->>front:支付确认(eappmca.EAPP4080806) - front->>pay:账户/快捷/卡包支付 - pay-->>front:返回支付结果 - front-->>app:返回支付结果 - else 没有订单 - note over app,front:Continue - end - end - ``` - - -### 改造后交易流程 - -- 商户侧 - ```mermaid - sequenceDiagram - participant merc - participant front - participant pay - - merc->>front:扫码下单(bsdkmca1.TSDK4090400) - front->>front:检查付款码 - front->>pay:消费下单 - note over merc,pay:**************************** 改造点 START ****************************** - pay->>pay:检查小额免密风控 - pay->>pay:更新小额免密标志到订单表 - note over merc,pay:**************************** 改造点 END ****************************** - pay-->>front:返回订单号 - front-->>pay:申请支付令牌 - pay-->>front:返回支付令牌 - front->>front:更新付款码 - - note over merc,pay:**************************** 改造点 START ****************************** - - front->>front:判断是否免密 - - alt 免密 - front->>pay:账户/卡包支付 - pay->>front:返回支付结果 - else 非免密 - note over front,pay:该干嘛就干嘛 - end - note over merc,pay:*************************** 改造点 END ****************************** - - loop 循环检查订单状态 - front-->>front:检查订单状态 - alt 订单被支付 - front-->>merc:返回订单支付状态 - else 订单未被支付 - note over merc,front:Continue - - end - end - ``` - -- 用户侧 - ```mermaid - sequenceDiagram - participant app - participant front - participant pay - - loop 循环查询待支付订单 - app->>front:查询待支付订单(eappmca1.APP4080805) - - note over app,pay:*************************** 改造点 START ****************************** - front-->>app:返回查询结果 & 免密标志(SESSION) - - alt 有支付订单 - app->>app:判断订单状态 - - alt 订单已支付 - app->>app:直接显示支付订单成功信息 - - else 订单未支付 - - app->>app:判断免密标志 - - alt 非免密 - app->>app:唤起密码框 - app->>app:唤起短信验证交互流程(仅快捷) - app->>front:支付确认(eappmca.EAPP4080806) - front->>pay:账户/快捷/卡包支付 - pay-->>front:返回支付结果 - front-->>app:返回支付结果 - else 免密 - app->>app:判断是否快捷 - alt 快捷 - app->>app:唤起短信验证交互流程(仅快捷) - app->>front:支付确认(eappmca.EAPP4080806) - front->>pay:快捷支付 - pay-->>front:返回支付结果 - front-->>app:返回支付结果 - else 非快捷 - app-->>app:直接显示订单支付结果 - end - end - end - - else 没有订单 - note over app,front:Continue - end - - note over app,pay:*************************** 改造点 END ****************************** - - end - ``` - - - -## 风控改造 - -- 增加一套小额免密规则(自己写JAVA代码) `肖景才` - - - [x] 从产品获取风控组件源码 - - [ ] 风控组件改造 - 1. 新建四条小额免密风控规则,但对应的java包名跟原产品日累,月累,日限额,月限额相同 - 2. 新建风控类型:小额免密 - 3. 新建业务类型规则维护:小额免密类型 + 四条风控规则 - 4. 新建资金种类:小额免密(风控累计维度是按照账户类型 + 资金种类 + 交易类型 + 业务类型 等来累计) - > 可行性待验证(现风控组件可能将资金属性写死成现金),若不可行则自行开发风控组件 `已验证可行` - 5. 新建小额免密风控参数维护界面 - -- 运营增加独立的小额免密参数维护界面(可复制账户交易参数维护维护界面) `肖景才` - - - - > 运营系统->实时风控控制->风控参数维护->账户交易参数维护 - > 在维护界面中去做以下修改 - > - 账户类型:界面隐藏,后台固定值:100-个人账户 - > - 资金种类:后台固定值:1-现金 - > - 交易类型:后台固定值:02-消费 - > - 业务类型:后台固定值:P0001-小额免密 - > - 实名标志:界面隐藏,后台固定值:02-强实名 - > - 收付标志:后台固定值:D-付款方 - > - 限制级别:界面隐藏,后台固定值:1-用户级别限制 - > - 业务受理渠道:与原界面相同 - > - 单笔最大金额:后台固定值:200 - > - 单笔最小金额:后台固定值:0 - > - 日限额:与原界面相同 - > - 月限额:与原界面相同 - > - 日累计:与原界面相同 - > - 月累计:与原界面相同 - - - - -- 支付核心增加小额免密判定接口 `肖景才` `com.murong.ecp.app.rpm.action.brpmpub8.T2015620` - - - 接口 - - - 请求 - - 名称 | 长度 | 必输 | 备注 - ------ | :----: | :----: | -------- - cre_dt | 8 | M | 创建日期 - ord_no | 20 | M | 订单号 - - - 返回 - - 名称 | 长度 | 必输 | 备注 - ------ | :----: | :----: | -------- - nnp_flg | 1 | M | 免密标志 Y:免密 N:不免密 - - - 交易流程 - ```mermaid - graph LR - - 请求((开始)) - 订单查询(订单查询) - 订单状态判断{订单状态判断} - 交易金额判断{交易金额判断} - 小额风控检查(小额风控检查
chkRtmRsk) - 风控结果判断{风控结果判断} - 设置免密标志_Y(设置免密标志
DDP_FLG:Y 免密) - 设置免密标志_N(设置免密标志
DDP_FLG:N 不免密) - 更新免密标志(更新免密标志
订单表DDP_FLG=Y) - 结束((结束)) - - 请求-->订单查询 - 订单查询-->订单状态判断 - 订单状态判断--待支付-->交易金额判断 - 交易金额判断-- <=200 -->小额风控检查 - 小额风控检查-->风控结果判断 - 风控结果判断--满足-->设置免密标志_Y - 设置免密标志_Y-->更新免密标志 - 更新免密标志-->结束 - - 设置免密标志_N-->结束 - 风控结果判断--不满足-->设置免密标志_N - 交易金额判断-- >200 -->设置免密标志_N - 订单状态判断--非待支付-->设置免密标志_N - ``` - -- 支付核心增加小额免风控累计接口 `肖景才` `com.murong.ecp.app.rpm.action.brpmpub8.T2015621` - - - 接口 - - - 请求 - - 名称 | 长度 | 必输 | 备注 - ------ | :----: | :----: | -------- - cre_dt | 8 | M | 创建日期 - ord_no | 20 | M | 订单号 - - - 返回 - - 名称 | 长度 | 必输 | 备注 - ------ | :----: | :----: | -------- - | | | - -- 小额免密金额标准 `业务` - > <=200RMB - -- 风控参数设置(可参考产品需求) `业务` - - | 日频次 | 日累计金额 | 月频次 | 月累计金额 | - | :--: | :---: | :--: | :---: | - | 10 | 2000 | 100 | 10000 | - -## 线下扫码支付改造 - -> 商户下单判断一旦满足小额免密直接支付 `郑骁` - -### 改造图示 - -- 商户扫码下单请求(改造前) - ```mermaid - graph LR - 商户SDK(商户SDK) - 扫码下单(扫码下单
TSDK4090400) - 登记远程消费订单(登记远程消费订单
brpmpub8.2015301) - - 商户SDK-->扫码下单 - 扫码下单-->登记远程消费订单 - 登记远程消费订单-->原有流程(原有流程) - 原有流程--返回商户token-->商户SDK - ``` -- 商户扫码下单请求(改造后) - > 针对账户支付、卡包支付一旦满足小额免密后条件后(快捷需要短信验证码,故不做处理),就后台自动发起支付请求完成支付 - ```mermaid - graph LR - 商户SDK(商户SDK) - 扫码下单(扫码下单
TSDK4090400) - 登记远程消费订单(登记远程消费订单
brpmpub8.2015301) - 小额免密检查服务(小额免密检查服务) - 是否满足小额免密{是否满足小额免密} - 账户支付(账户支付
bsdkmca1.SDK4090320) - 卡包支付(卡包支付
bsdkmca1.SDK4090660) - 判断支付方式{判断支付方式} - 原有流程(原有流程) - - 商户SDK-->扫码下单 - 扫码下单-->登记远程消费订单 - 登记远程消费订单-->小额免密检查服务 - 小额免密检查服务-->是否满足小额免密 - 是否满足小额免密--是-->判断支付方式 - 判断支付方式--账户支付-->账户支付 - 判断支付方式--卡包支付-->卡包支付 - 判断支付方式--快捷支付-->原有流程 - 是否满足小额免密--否-->原有流程 - 账户支付-->原有流程 - 卡包支付-->原有流程 - 原有流程--返回商户支付结果/token-->商户SDK - - style 登记远程消费订单 fill:#f9f,stroke:#333,stroke-width:1px; - style 是否满足小额免密 fill:#20E912,stroke:#333,stroke-width:1px; - style 小额免密检查服务 fill:#20E912,stroke:#333,stroke-width:1px; - style 判断支付方式 fill:#20E912,stroke:#333,stroke-width:1px; - style 账户支付 fill:#20E912,stroke:#333,stroke-width:1px; - style 卡包支付 fill:#20E912,stroke:#333,stroke-width:1px; - ``` - - - -- APP发起支付确认(改造前) - ```mermaid - graph LR - 用户APP(用户APP) - 支付确认(支付确认
eappmca.EAPP4080806) - 账户支付(账户支付
bsdkmca1.SDK4090320) - 快捷支付(快捷支付
bsdkmca1.SDK4090340) - 卡包支付(卡包支付
bsdkmca1.SDK4090660) - 支付密码校验(支付密码校验
burmpub1.0011471) - 判断支付类型{判断支付类型} - 密码验证(密码验证) - 原有流程(原有流程) - - - 用户APP-->支付确认 - 支付确认-->判断支付类型 - 判断支付类型-->账户支付 - 判断支付类型-->快捷支付 - 判断支付类型-->卡包支付 - - 账户支付-->支付密码校验 - 快捷支付-->支付密码校验 - 卡包支付-->支付密码校验 - - 支付密码校验-->密码验证 - 密码验证-->原有流程 - 原有流程--返回支付结果-->用户APP - ``` - -- APP发起支付确认(改造后) - ```mermaid - graph LR - 用户APP(用户APP) - 支付确认(支付确认
eappmca.EAPP4080806) - 账户支付(账户支付
bsdkmca1.SDK4090320) - 快捷支付(快捷支付
bsdkmca1.SDK4090340) - 卡包支付(卡包支付
bsdkmca1.SDK4090660) - 支付密码校验(支付密码校验
burmpub1.0011471) - 判断支付类型{判断支付类型} - 判断是否验密{判断是否验密} - 密码验证(密码验证) - 原有流程(原有流程) - - 用户APP-->支付确认 - 支付确认-->判断支付类型 - 判断支付类型-->账户支付 - 判断支付类型-->快捷支付 - 判断支付类型-->卡包支付 - - 账户支付-->判断是否验密 - 快捷支付-->判断是否验密 - 卡包支付-->判断是否验密 - - 判断是否验密--需要-->支付密码校验 - 判断是否验密--不需要-->原有流程 - - 支付密码校验-->密码验证 - 密码验证-->原有流程 - 原有流程--返回支付结果-->用户APP - - - style 卡包支付 fill:#f9f,stroke:#333,stroke-width:1px; - style 账户支付 fill:#f9f,stroke:#333,stroke-width:1px; - style 快捷支付 fill:#f9f,stroke:#333,stroke-width:1px; - - style 支付密码校验 fill:#20E912,stroke:#333,stroke-width:1px; - style 判断是否验密 fill:#20E912,stroke:#333,stroke-width:1px; - style 密码验证 fill:#20E912,stroke:#333,stroke-width:1px; - ``` - -- APP查询支付结果(改造前) - ```mermaid - graph LR - 用户APP(用户APP) - 查询支付结果(查询支付结果
eappmca1.APP4080805) - - 用户APP--每秒触发-->查询支付结果 - 查询支付结果--返回支付结果-->用户APP - - ``` - -- APP查询支付结果(改造后) - ```mermaid - graph LR - 用户APP(用户APP) - 查询支付结果(查询支付结果
eappmca1.APP4080805) - - 用户APP--每秒触发-->查询支付结果 - 查询支付结果--返回支付结果&是否免密-->用户APP - - style 查询支付结果 fill:#f9f,stroke:#333,stroke-width:1px; - ``` - -### 代码改造 - -- 封装小额免密专用组件 - > 本质上就是调用现有风控组件,但资金属性送小额免密类型 - -- 付款码商户下单接口改造 `com.murong.ecp.app.egw.action.bsdkmca1.TSDK4090400` - - ```java - +246: - } else { - logger.info("else begin"); - PUBATCUtil.GDASetMsgIgnore(bizCtx, "SCM60001", ""); - logger.info("else end"); - return; - } - - /** 此处增加支付相关代码 **/ - - /** 调用小额免密检查服务 **/ - - /** 若满足小额免密,并且又是账户支付或卡包支付,则调用支付接口进行支付 **/ - - logger.info("循环查询该笔订单的状态 begin"); - Utils.setData(bizCtx, "count_index", "1"); - while(true){ - if(Utils.eval(bizCtx, "intcmp($count_index,1,50)")){ - logger.info("intcmp($count_index,1,50) begin"); - PUBATCUtil.queryForObject(bizCtx, "qry_ord_inf", "ordinf"); - ``` - -- 账户支付请求交易改造 `com.murong.ecp.app.egw.action.bsdkmca1.TSDK4090320` - - ```mermaid - graph LR - TSDK4090320(bsdkmca1.TSDK4090320
账户支付请求)-->T2011210(brpmpub1.T2011210
订单支付) - ``` - - ```java - /** 从SESSION获取免密标志,若为免密则跳过如下代码 **/ - +44: - WEBATCUtil.getSession(bizCtx, "$sess_nm", sessMap); - PUBATCUtil.logETF(bizCtx); - - logger.info("组装AES 解密所需的数据 begin"); - Utils.setData(bizCtx, "inp_dat.ocx_key", "$ocx_key");// 随机因子 - Utils.setData(bizCtx, "inp_dat.pswd_o", "$paypwd");// 登录密码 - logger.info("组装AES 解密所需的数据 end"); - - logger.info("AES使用随机因子对密码进行解密 开始 ......"); - this.Pinconvert.process(bizCtx, "inp_dat", "out_dat|msg_cd|"); - logger.info("AES使用随机因子对密码进行解密 成功 结束 ......"); - Utils.setData(bizCtx, "pay_pswd", "@O.out_dat.pswd_c"); - - Utils.setData(bizCtx, "pwd_typ", "PAY"); - logger.info("call package:[MCA.DecipherPwd]"); - DecipherPwd.process(bizCtx, "pay_pswd|pwd_typ|", "pay_pswd|msg_cd"); - if (Utils.eval(bizCtx, "is_succ(@O.msg_cd)=0")) { - logger.info("step(3): if(is_succ(@O.msg_cd)=0) begin"); - PUBATCUtil.GDASetMsg(bizCtx, "@O.msg_cd", ""); - logger.info("step(3): if(is_succ(@O.msg_cd)=0) end"); - } - /** 从SESSION获取免密标志,若为免密则跳过如下代码 **/ - +102: - logger.info("调用交易验密 begin ......"); - PUBATCUtil.callThirdServiceIgnore(bizCtx, "burmpub1", "0011471"); - if (Utils.eval(bizCtx, "~retcod=0")) { - logger.info("step(45): if(~retcod=0) begin"); - if (Utils.eval(bizCtx, "is_succ($gda.msg_cd)=0")) { - logger.info("step(46): if(is_succ($gda.msg_cd)=0) begin"); - PUBATCUtil.GDASetMsgIgnore(bizCtx, "$gda.msg_cd", - "$gda.msg_dat"); - logger.info("step(46): if(is_succ($gda.msg_cd)=0) end"); - return; - } - logger.info("step(45): if(~retcod=0) end"); - } else { - logger.info("else begin"); - PUBATCUtil.GDASetMsgIgnore(bizCtx, "SCM60001", ""); - logger.info("else end"); - return; - } - logger.info("验证支付密码通过 end ......"); - ``` - -- 快捷支付交易改造 `com.murong.ecp.app.egw.action.bsdkmca1.TSDK4090340` - ```mermaid - graph LR - TSDK4090340(bsdkmca1.TSDK4090340
下单快捷支付请求1.0)-->T0501041(bpaybrm1.T0501041
快捷支付.支付原订单) - T0501041-->2023020(bpwmppd3.2023020
有账户快捷支付) - ``` - - ```java - /** 从SESSION获取免密标志,若为免密则跳过如下代码 **/ - +83: - logger.info("组装AES 解密所需的数据 begin"); - Utils.setData(bizCtx, "inp_dat.ocx_key", "$ocx_key");// 随机因子 - Utils.setData(bizCtx, "inp_dat.pswd_o", "$paypwd");// 登录密码 - logger.info("组装AES 解密所需的数据 end"); - - logger.info("AES使用随机因子对密码进行解密 开始 ......"); - this.Pinconvert.process(bizCtx, "inp_dat", "out_dat|msg_cd|"); - logger.info("AES使用随机因子对密码进行解密 成功 结束 ......"); - Utils.setData(bizCtx, "pay_pswd", "@O.out_dat.pswd_c"); - - Utils.setData(bizCtx, "gda.bus_typ", "0012"); - Utils.setData(bizCtx, "sign_key", "NO"); - Utils.setData(bizCtx, "pwd_typ", "PAY"); - logger.info("call package:[MCA.DecipherPwd]"); - DecipherPwd.process(bizCtx, "pay_pswd|pwd_typ|", "pay_pswd|msg_cd"); - if (Utils.eval(bizCtx, "is_succ(@O.msg_cd)=0")) { - logger.info("step(9): if(is_succ(@O.msg_cd)=0) begin"); - PUBATCUtil.GDASetMsg(bizCtx, "@O.msg_cd", ""); - logger.info("step(9): if(is_succ(@O.msg_cd)=0) end"); - return; - } - Utils.setData(bizCtx, "pay_pswd", "@O.pay_psw"); - - /** 从SESSION获取免密标志,若为免密则跳过如下代码 **/ - +139: - logger.info("调用交易验密 begin ......"); - PUBATCUtil.callThirdServiceIgnore(bizCtx, "burmpub1", "0011471"); - if (Utils.eval(bizCtx, "~retcod=0")) { - logger.info("step(45): if(~retcod=0) begin"); - if (Utils.eval(bizCtx, "is_succ($gda.msg_cd)=0")) { - logger.info("step(46): if(is_succ($gda.msg_cd)=0) begin"); - PUBATCUtil.GDASetMsgIgnore(bizCtx, "$gda.msg_cd","$gda.msg_dat"); - logger.info("step(46): if(is_succ($gda.msg_cd)=0) end"); - return; - } - logger.info("step(45): if(~retcod=0) end"); - } else { - logger.info("else begin"); - PUBATCUtil.GDASetMsgIgnore(bizCtx, "SCM60001", ""); - logger.info("else end"); - return; - } - logger.info("验证支付密码通过 end ......"); - ``` - -- 卡包支付交易改造 `com.murong.ecp.app.egw.action.bsdkmca1.TSDK4090660` - ```mermaid - graph LR - TSDK4090660(bsdkmca1.TSDK4090660
卡包支付接口)-->T2011106(brpmpub1.T2011106
网上订单登记-录入金额组成) - T2011106-->0000832(bcrdpub1.0000832
卡包支付) - ``` - - ```java - +56: - /** 从SESSION获取免密标志,若为免密则跳过如下代码 **/ - logger.info("组装AES 解密所需的数据 begin"); - Utils.setData(bizCtx, "inp_dat.ocx_key", "$ocx_key");// 随机因子 - Utils.setData(bizCtx, "inp_dat.pswd_o", "$paypwd");// 登录密码 - logger.info("组装AES 解密所需的数据 end"); - - logger.info("AES使用随机因子对密码进行解密 开始 ......"); - this.Pinconvert.process(bizCtx, "inp_dat", "out_dat|msg_cd|"); - logger.info("AES使用随机因子对密码进行解密 成功 结束 ......"); - Utils.setData(bizCtx, "pay_pswd", "@O.out_dat.pswd_c"); - - Utils.setData(bizCtx, "gda.bus_typ", "0012"); - Utils.setData(bizCtx, "sign_key", "NO"); - Utils.setData(bizCtx, "pwd_typ", "PAY"); - logger.info("二层解密 begin"); - logger.info("call package:[MCA.DecipherPwd]"); - DecipherPwd.process(bizCtx, "pay_pswd|pwd_typ|", "pay_pswd|msg_cd"); - if (Utils.eval(bizCtx, "is_succ(@O.msg_cd)=0")) { - logger.info("step(9): if(is_succ(@O.msg_cd)=0) begin"); - PUBATCUtil.GDASetMsg(bizCtx, "@O.msg_cd", ""); - logger.info("step(9): if(is_succ(@O.msg_cd)=0) end"); - return; - } - logger.info("二层解密 成功 end"); - /** 从SESSION获取免密标志,若为免密则跳过如下代码 **/ - +116: - logger.info("调用交易验密 begin ......"); - PUBATCUtil.callThirdServiceIgnore(bizCtx, "burmpub1", "0011471"); - if (Utils.eval(bizCtx, "~retcod=0")) { - logger.info("step(45): if(~retcod=0) begin"); - if (Utils.eval(bizCtx, "is_succ($gda.msg_cd)=0")) { - logger.info("step(46): if(is_succ($gda.msg_cd)=0) begin"); - PUBATCUtil.GDASetMsgIgnore(bizCtx, "$gda.msg_cd","$gda.msg_dat"); - logger.info("step(46): if(is_succ($gda.msg_cd)=0) end"); - return; - } - logger.info("step(45): if(~retcod=0) end"); - } else { - logger.info("else begin"); - PUBATCUtil.GDASetMsgIgnore(bizCtx, "SCM60001", ""); - logger.info("else end"); - return; - } - logger.info("验证支付密码通过 end ......"); - ``` - -- 支付成功后小额免密风控累计 - - - 账户支付 `com.murong.ecp.app.egw.action.bsdkmca1.TSDK4090320` - ```java - +435: - Utils.setData(bizCtx, "paytm", "get_date_time()"); - Utils.setData(bizCtx, "lastuptm", "get_date_time()"); - Utils.setData(bizCtx, "status", "@O.status"); - Utils.setData(bizCtx, "message_code", "@O.message_code"); - Utils.setData(bizCtx, "message_desc", "@O.message_desc"); - Utils.setData(bizCtx, "ret_sign", "@O.ret_sign"); - Utils.setData(bizCtx, "ret_cert", "@O.ret_cert"); - Utils.setData(bizCtx, "ret_data", "@O.ret_data"); - Utils.setData(bizCtx, "char_set", "@O.char_set"); - Utils.setData(bizCtx, "sign_type", "RSA"); - Utils.setData(bizCtx, "ordno", "$ord_no"); - Utils.setData(bizCtx, "ppdoutord", "$ord_no"); - Utils.setData(bizCtx, "mercordno", "$merc_ord_no"); - logger.info("拼装加密数据 暂时没有用到 end "); - Utils.setData(bizCtx, "tx_nm", "APP-现金余额支付"); - Utils.setData(bizCtx, "tx_cd", "$gda.tx_cd"); - Utils.setData(bizCtx, "ip_addr", "@MSG.SIP"); - PUBATCUtil.invokeServiceIgnore(bizCtx, "0015070", "burmpub5", - "burmpub5", "notify"); - - /** 此处调用小额免密风控累计接口 **/ - - PUBATCUtil.logETFIgnore(bizCtx); - PUBATCUtil.GDASetMsg(bizCtx, "MCA00000", ""); - ``` - - - 快捷支付 `com.murong.ecp.app.egw.action.bsdkmca1.TSDK4090340` - ```java - +485: - logger.info("调用交易 去支付 begin ......"); - PUBATCUtil.callThirdServiceIgnore(bizCtx, "bpaybrm1", "0501041"); - if (Utils.eval(bizCtx, "~retcod!=0")) { - logger.info("step(231): if(~retcod!=0) begin"); - PUBATCUtil.GDASetMsg(bizCtx, "MCA00005", "调用支付平台失败"); - logger.info("step(231): if(~retcod!=0) end"); - return; - } - if (Utils.eval(bizCtx, "is_succ($gda.msg_cd)=0")) { - logger.info("step(234): if(is_succ($gda.msg_cd)=0) begin"); - PUBATCUtil.GDASetMsg(bizCtx, "$gda.msg_cd", "$gda.msg_dat"); - logger.info("step(234): if(is_succ($gda.msg_cd)=0) end"); - return; - } - logger.info("调用交易 去支付 end ......"); - - Utils.setData(bizCtx,"paytm","get_date_time()"); - Utils.setData(bizCtx, "mercid", "$merc_id"); - Utils.setData(bizCtx, "token", "$token"); - Utils.setData(bizCtx, "ordamt", "$totamt"); - Utils.setData(bizCtx, "mercordno", "$merc_ord_no"); - Utils.setData(bizCtx, "ppdoutord", "$ppd_ord_no"); - Utils.setData(bizCtx, "qryneed", "$qryneed"); - Utils.setData(bizCtx, "tx_nm", "APP-快捷支付"); - Utils.setData(bizCtx, "tx_cd", "$gda.tx_cd"); - Utils.setData(bizCtx, "ip_addr", "@MSG.SIP"); - PUBATCUtil.invokeServiceIgnore(bizCtx, "0015070", "burmpub5", - "burmpub5", "notify"); - - /** 此处调用小额免密风控累计接口 **/ - - PUBATCUtil.GDASetMsg(bizCtx, "MCA00000", ""); - ``` - - - 卡包支付 `com.murong.ecp.app.egw.action.bsdkmca1.TSDK4090660` - - ```java - +263: - logger.info("调用交易 去支付 begin ......"); - PUBATCUtil.callThirdServiceIgnore(bizCtx, "brpmpub1", "2011106"); - if (Utils.eval(bizCtx, "~retcod!=0")) { - logger.info("step(231): if(~retcod!=0) begin"); - PUBATCUtil.GDASetMsg(bizCtx, "MCA00005", "调用支付平台失败"); - logger.info("step(231): if(~retcod!=0) end"); - return; - } - if (Utils.eval(bizCtx, "is_succ($gda.msg_cd)=0")) { - logger.info("step(234): if(is_succ($gda.msg_cd)=0) begin"); - logger.info("step(234): if(is_succ($gda.msg_cd)=0) end"); - return; - } - logger.info("调用交易 去支付 end ......"); - - Utils.setData(bizCtx, "tx_nm", "APP-卡包支付"); - Utils.setData(bizCtx, "tx_cd", "$gda.tx_cd"); - Utils.setData(bizCtx, "ip_addr", "@MSG.SIP"); - PUBATCUtil.invokeServiceIgnore(bizCtx, "0015070", "burmpub5", - "burmpub5", "notify"); - - /** 此处调用小额免密风控累计接口 **/ - - PUBATCUtil.GDASetMsgIgnore(bizCtx, "MCA00000", ""); - PUBATCUtil.logETFIgnore(bizCtx); - logger.info("=================================>>卡包支付接口 end"); - ``` - -- 扫码支付查询交易改造 - > 需要返订单【是否免密标志】 - - `com/murong/ecp/app/egw/mapper/bappmca1.TAPP4080806Mapper.xml` - ```sql - - +3: - - ``` - - `com.murong.ecp.app.egw.action.bappmca1.TAPP4080805` - ```java - +68: - PUBATCUtil.readRecordBind(bizCtx, "qryOrdInf", ""); - if (Utils.eval(bizCtx, "~retcod=0")) { - - /** 此处需要把查询出来的免密标志添加到SESSION中去 **/ - - logger.info("step(11): if(~retcod=0) begin"); - PUBATCUtil.GDASetMsg(bizCtx, "MCA00000", "交易成功"); - logger.info("step(11): if(~retcod=0) end"); - } else if (Utils.eval(bizCtx, "~retcod=2")) { - logger.info("step(11): if(~retcod=2) begin"); - PUBATCUtil.GDASetMsg(bizCtx, "MCA10017", "未找到记录"); - logger.info("step(11): if(~retcod=2) end"); - return; - } else { - ``` - -- 付款码确认支付交易改造 - - `com.murong.ecp.app.egw.action.bappmca1.TAPP4080806` - - ```java - +81: - PUBATCUtil.queryForObject(bizCtx, "qry_ord_sts"); - logger.info("ord_sts="+Utils.getData(bizCtx, "$ord_sts")); - if(Utils.eval(bizCtx, "~retcod=0")){ - - /** 此处需要判断订单是否已被支付(BD状态) **/ - - if(Utils.eval(bizCtx, "is_equal_string($ord_sts,BE,BF)")){ - logger.info("if(is_equal_string($ord_sts,BE,BF)) begin"); - PUBATCUtil.GDASetMsgIgnore(bizCtx,"RPM75111","订单已关闭,无法支付"); - logger.info("if(is_equal_string($ord_sts,BE,BF)) end"); - return; - } - if(Utils.eval(bizCtx, "is_noequal_string($ord_sts,BA,BB,BM)")){ - logger.info("if(is_noequal_string($ord_sts,BA,BB,BM)) begin"); - PUBATCUtil.GDASetMsgIgnore(bizCtx, "MCA60025", "订单状态异常"); - logger.info("if(is_noequal_string($ord_sts,BA,BB,BM)) end"); - return; - } - }else { - logger.info("step(13): else begin"); - PUBATCUtil.GDASetMsg(bizCtx, "RPM22201", "订单不存在"); - logger.info("step(13): else end"); - return; - } - ``` - -## APP改造 - -- 小额免密开关设置 `王雷、陈孝豪` - > 按产品原型开发即可 - -- 轮训交易针对小额免密的支付成功的订单返回交互界面需改造 `王雷、陈孝豪` - - 1. 查询交易改造 - > 商户扫码完成后的查询交易需要判别后台返回的支付结果,一旦支付结果为成功时,直接显示支付结果,无需再调用密码框跟支付流程 - > 若支付方式为账户支付,则需要判别小额免密标志是否免密,若免密则跳过密码输入框,直接进入短信验证的交互,最后调用支付接口完成支付 - > 详细请参照流程图