Files
2021-01-12 22:04:24 +08:00

595 lines
25 KiB
XML

<?xml version='1.0' encoding='UTF-8'?>
<Application name="lps" trace="yes">
<!--空中充值请求-->
<Transaction code="2140010" log_switch="1">
<!-- 查询卡片信息 -->
<DynSentence name="QRY_LPSTCRD_INFO">
<Sentence>
SELECT UPPER(CRD_EMK_SEQ) PRE_EMK_SEQ,UPPER(CRD_TX_SEQ) PRE_TX_SEQ,CRD_STS,SUB_AC,USR_NO,CRD_STSW,CRD_VER,MAIN_AC
FROM LPSTCRD
WHERE MBL_NO=? AND CRD_STS!='2'
</Sentence>
<Fields>MBL_NO|</Fields>
</DynSentence>
<!-- 查询卡片信息(锁表) -->
<DynSentence name="QRY_LPSTCRD_FOR_UPDATE">
<Sentence>
SELECT UPPER(CRD_EMK_SEQ) PRE_EMK_SEQ,UPPER(CRD_TX_SEQ) PRE_TX_SEQ,CRD_STS,SUB_AC,USR_NO,CRD_STSW,CRD_VER,MAIN_AC
FROM LPSTCRD
WHERE MBL_NO=? AND CRD_STS!='2' FOR UPDATE
</Sentence>
<Fields>MBL_NO|</Fields>
</DynSentence>
<!-- 更新卡片信息表交易序号 -->
<DynSentence name="UPD_LPSTCRD_SEQ">
<Sentence>
UPDATE LPSTCRD SET CRD_EMK_SEQ=? ,CRD_TX_SEQ=?,TM_SMP=? WHERE MBL_NO=? AND SUB_AC=?
</Sentence>
<Fields>CRD_EMK_SEQ|@O.STK_AREA.CRD_TX_SEQ|SYS_TM_SMP|MBL_NO|SUB_AC|</Fields>
</DynSentence>
<!--查询卡片圈存交易结果-->
<DynSentence name="QRY_LPSTEMK_EMKSTS">
<Sentence>
SELECT EMK_STS FROM LPSTEMK WHERE SUB_AC=? AND CRD_TX_SEQ=? AND EMK_TYP='S'
</Sentence>
<Fields>SUB_AC|@O.STK_AREA.CRD_TX_SEQ|</Fields>
</DynSentence>
<!-- 更新圈存交易状态 -->
<DynSentence name="UPD_LPSTEMK_EMKSTS">
<Sentence>
UPDATE LPSTEMK SET EMK_STS='0',TM_SMP=? WHERE ORD_NO=?
</Sentence>
<Fields>SYS_TM_SMP|ORD_NO|</Fields>
</DynSentence>
<!--查询错误信息-->
<DynSentence name="QRY_PUBTMSG_INFO">
<Sentence>
SELECT MSG_INF FROM PUBTMSG WHERE MSG_CD =?
</Sentence>
<Fields>GWA.MSG_CD|</Fields>
</DynSentence>
<FlowCtrl>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00000"/>
</Exec>
<Set>CMD_CD=SUBSTR($PIN_DAT,1,2)</Set>
<!--查询卡片应用序列号及相关信息-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRY_LPSTCRD_INFO"/>
</Exec>
<If condition="~RetCod=2">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS20055"/>
<Arg name="MsgDat" value="用户尚未开通手机钱包"/>
</Exec>
<Return/>
</If>
<ElseIf condition="~RetCod=0">
<Set>~MSG_DAT=查询应用序列号信息成功</Set>
</ElseIf>
<Else>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00001"/>
<Arg name="MsgDat" value="数据库操作出错"/>
</Exec>
<Return/>
</Else>
<!-- 验证报文MAC -->
<Call package="LPS_PUB" function="CheckMessageMAC">
<Input>SUB_AC|PIN_DAT|</Input>
<Output>MSG_CD|</Output>
</Call>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Set>~MSG_DAT=验证报文MAC失败</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Return/>
</If>
<!-- 带密码解密报文 -->
<Call package="LPS_PUB" function="PasswordMessageDecrypt">
<Input>CMD_CD|SUB_AC|PIN_DAT|MAIN_AC|</Input>
<Output>PIN_DAT|MSG_CD|</Output>
</Call>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Set>~MSG_DAT=解密失败</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Return/>
</If>
<Set>TXN_DAT=@O.PIN_DAT</Set>
<!-- 报文解析 -->
<Call package="LPS_PUB" function="MessageParse">
<Input>CMD_CD|TXN_DAT|</Input>
<Output>MSG_CD|STK_AREA|</Output>
</Call>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Set>~MSG_DAT=报文解析失败</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Return/>
</If>
<!-- 验证交易报文MAC -->
<Set>RDM_NO1=@O.STK_AREA.RDM_NO1</Set>
<Set>CRD_BAL=TOUPPER(ADDCHAR(DEC2HEX(@O.STK_AREA.CRD_BAL),8,0,1))</Set>
<Set>TX_AMT=TOUPPER(ADDCHAR(DEC2HEX(@O.STK_AREA.TX_AMT),8,0,1))</Set>
<Set>CRD_EMK_SEQ=@O.STK_AREA.CRD_EMK_SEQ</Set>
<Set>MAC1=@O.STK_AREA.MAC1</Set>
<Call package="LPS_PUB" function="CheckTransactionMAC">
<Input>SUB_AC|RDM_NO1|CRD_BAL|TX_AMT|CRD_EMK_SEQ|MAC1|</Input>
<Output>MSG_CD|</Output>
</Call>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Set>~MSG_DAT=验证交易报文MAC失败</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Return/>
</If>
<!-- 平台交易流水大于等于卡片交易流水 -->
<If condition="NOT(ISNULL($PRE_TX_SEQ))"> <!-- 非开户后首次进行空中充值 -->
<If condition="INTCMP(HEX2DEC($PRE_TX_SEQ),5,HEX2DEC(@O.STK_AREA.CRD_TX_SEQ))">
<Set>RSL_CD=01</Set>
<Set>UPD_FLG=0</Set> <!-- 不更新卡片信息表 -->
<Goto>END</Goto>
</If>
</If>
<!-- 调用未确认信息同步接口 -->
<Set>INP_DAT.CMD_CD=@O.STK_AREA.CMD_CD</Set>
<Set>INP_DAT.TXN_DAT=$TXN_DAT</Set>
<Set>INP_DAT.SUB_AC=$SUB_AC</Set>
<Call package="LPS_PUB" function="UnverifiedMessageInStep">
<Input>INP_DAT|GWA|</Input>
<Output>MSG_CD|</Output>
</Call>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Set>~MSG_DAT=未确认信息同步失败</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Return/>
</If>
<Else>
<Set>~MSG_DAT=未确认信息处理完毕</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00000"/>
</Exec>
</Else>
<!-- 处理未确认信息后再次查询相关卡片信息 -->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRY_LPSTCRD_FOR_UPDATE"/>
</Exec>
<!--用户-用户状态查询-->
<Set>INP_DAT.MBLNO_OR_LOGID=$MBL_NO</Set>
<Set>INP_DAT.TX_CD=$GWA.TX_CD</Set>
<Call package="URM_PUB" function="CHK_USER_STS">
<Input>INP_DAT|</Input>
<Output>OUT_DAT|MSG_CD|</Output>
</Call>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Set>RSL_CD=01</Set>
<Goto>END</Goto>
</If>
<!-- 保留OUT_DAT参数,累计检查需要 -->
<Set>CI_NO=@O.OUT_DAT.CI_NO</Set>
<Set>U_NO=@O.OUT_DAT.USR_NO</Set>
<!-- 记录用户归属省份 -->
<Set>USR_PROV=@O.OUT_DAT.USR_PROV</Set>
<Set>USR_CITY=@O.OUT_DAT.USR_CITY</Set>
<Set>CCY_CD=CNY</Set>
<!--实时风控检查开始-->
<!-- 检查单笔交易风控规则 -->
<Set>RISK_DAT.MBL_NO=$MBL_NO</Set>
<Set>RISK_DAT.RISK_SWITCH=C</Set>
<Set>RISK_DAT.TX_AMT=AMTSIMPLEFMT(@O.STK_AREA.TX_AMT)</Set>
<Set>TMP_TX_AMT=ADD(@O.STK_AREA.CRD_BAL,@O.STK_AREA.TX_AMT)</Set>
<Set>RISK_DAT.TX_AMT_TOT=AMTSIMPLEFMT($TMP_TX_AMT)</Set>
<Call package="LPS_PUB" function="LpsRiskControl">
<Input>RISK_DAT|GWA|</Input>
<Output>MSG_CD|</Output>
</Call>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Set>RSL_CD=01</Set>
<Goto>END</Goto>
</If>
<!--实时风控检查结束-->
<!-- 非STK1.1空中充值触发发起的交易需要验证支付密码 -->
<If condition="OR(IS_NOEQUAL_STRING(@O.STK_AREA.CMD_CD,11),IS_NOEQUAL_STRING(@O.STK_AREA.SUB_CMD_CD,01))">
<!-- 验证支付密码 -->
<Set>INP_DAT.MBL_NO=$MBL_NO</Set>
<Set>INP_DAT.PAY_PSWD_IN=@O.STK_AREA.PAY_PSW</Set>
<Call package="URM_PUB" function="CHK_PAY_PSWD">
<Input>GWA|INP_DAT|</Input>
<Output>OUT_DAT|MSG_CD|</Output>
</Call>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Set>RSL_CD=01</Set>
<Goto>END</Goto>
</If>
</If>
<!--卡片上送的交易流水号大于平台的交易流水号-->
<If condition="INTCMP(STRCMP(@O.STK_AREA.CRD_TX_SEQ,$PRE_TX_SEQ),6,0)">
<!-- 若钱包状态为暂定、锁定、坏卡补卡、换卡、销户、补卡时不进行充值交易 -->
<If condition="OR(IS_NOEQUAL_STRING($CRD_STS,0,1),IS_NOEQUAL_STRING(SUBSTR($CRD_STSW,1,4),0000))">
<Exec func="PUB:GWAAddMsg">
<Arg name="MsgCd" value="LPS20086"/>
<Arg name="MsgDat" value="卡片状态异常无法进行充值交易"/>
</Exec>
<Set>EMK_SWITCH=0</Set> <!--设置圈存开关 0:关闭 1:开启-->
<!-- 登记圈存记录信息表为失败 -->
<Set>ORD_NO=$GWA.JRN_NO</Set>
<Set>ORD_DT=$GWA.TX_DT</Set>
<Set>TX_DT=$GWA.TX_DT</Set>
<Set>TX_TM=$GWA.TX_TM</Set>
<Set>AC_DT=$GWA.AC_DT</Set>
<Set>EMK_STS=4</Set> <!-- 充值失败 -->
<Set>LAST_EMK_CMD=1</Set>
<Set>CRD_TX_SEQ=@O.STK_AREA.CRD_TX_SEQ</Set> <!--记录卡片交易流水号-->
<Set>CRD_PPD_RSL=0000</Set> <!-- 卡充值结果初始化为0000 -->
<Set>EMK_TYP=S</Set>
<Set>BUS_CNL=STK</Set>
<Set>RDM_NO=@O.STK_AREA.RDM_NO1</Set> <!-- 卡片生成的伪随机数 -->
<Set>TX_AMT=AMTSIMPLEFMT(@O.STK_AREA.TX_AMT)</Set> <!-- 卡片圈存金额 -->
<Set>CRD_BAL=AMTSIMPLEFMT(@O.STK_AREA.CRD_BAL)</Set> <!-- 卡片上送钱包余额 -->
<Set>POST_AC_DT=$GWA.AC_DT</Set> <!-- 充值记账会计日期 -->
<Exec func="PUB:InsertRecord" error="IGNORE">
<Arg name="TblNam" value="LPSTEMK"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:GWAAddMsg">
<Arg name="MsgCd" value="LPS20087"/>
<Arg name="MsgDat" value="登记圈存信息表失败"/>
</Exec>
<Set>RSL_CD=01</Set>
</If>
<Else>
<Set>RSL_CD=01</Set>
<Exec func="PUB:CommitWork"/> <!-- 对此条圈存记录commit -->
</Else>
</If>
<Else>
<Set>~MSG_DAT=卡片状态满足合法可以进行充值交易</Set>
<Set>EMK_SWITCH=1</Set>
</Else>
</If>
<Else> <!-- 卡片上送的交易流水号小于等于平台的交易流水号 -->
<!--查询平台记录的此笔充值交易的状态-->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_LPSTEMK_EMKSTS"/>
</Exec>
<If condition="~RetCod=2">
<Exec func="PUB:GWAAddMsg">
<Arg name="MsgCd" value="LPS20088"/>
<Arg name="MsgDat" value="该笔圈存交易平台无记录"/>
</Exec>
<Set>RSL_CD=01</Set>
<!-- 登记圈存记录信息表为信息丢失 -->
<Set>ORD_NO=$GWA.JRN_NO</Set>
<Set>ORD_DT=$GWA.TX_DT</Set>
<Set>AC_DT=$GWA.AC_DT</Set>
<Set>BUS_CNL=STK</Set>
<Set>TX_DT=$GWA.TX_DT</Set>
<Set>TX_TM=$GWA.TX_TM</Set>
<Set>EMK_STS=3</Set> <!-- 充值信息丢失 -->
<Set>CRD_TX_SEQ=@O.STK_AREA.CRD_TX_SEQ</Set> <!--记录卡片交易流水号-->
<Set>LAST_EMK_CMD=1</Set>
<Set>CRD_PPD_RSL=0000</Set> <!-- 卡充值结果初始化为0000 -->
<Set>EMK_TYP=S</Set>
<Set>RDM_NO=@O.STK_AREA.RDM_NO1</Set> <!--卡片生成的伪随机数-->
<Set>TX_AMT=AMTSIMPLEFMT(@O.STK_AREA.TX_AMT)</Set> <!--卡片圈存金额-->
<Set>CRD_BAL=AMTSIMPLEFMT(@O.STK_AREA.CRD_BAL)</Set> <!-- 卡片上送钱包余额 -->
<Set>POST_AC_DT=$GWA.AC_DT</Set> <!-- 充值记账会计日期 -->
<Exec func="PUB:InsertRecord" error="IGNORE">
<Arg name="TblNam" value="LPSTEMK"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:GWAAddMsg">
<Arg name="MsgCd" value="LPS20087"/>
<Arg name="MsgDat" value="登记圈存记录信息表失败"/>
</Exec>
</If>
<Else>
<Exec func="PUB:CommitWork"/> <!-- 对此条圈存记录commit -->
</Else>
<Goto>END</Goto>
</If>
<ElseIf condition="~RetCod=0">
<Set>~MSG_DAT=查询原充值交易状态成功</Set>
<If condition="IS_EQUAL_STRING($EMK_STS,0,2)">
<Set>RSL_CD=00</Set>
<Goto>END</Goto>
</If>
<Else>
<Set>RSL_CD=01</Set>
<Goto>END</Goto>
</Else>
</ElseIf>
<Else>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00001"/>
<Arg name="MsgDat" value="数据库操作出错"/>
</Exec>
<Return/>
</Else>
</Else>
<If condition="IS_EQUAL_STRING($EMK_SWITCH,1)">
<!--登记圈存信息表-->
<Set>GWA.JRN_NO=</Set>
<Exec func="PUB:GetJournalNo"/>
<Set>ORD_NO=$GWA.JRN_NO</Set>
<Set>ORD_DT=$GWA.TX_DT</Set>
<Set>AC_DT=$GWA.AC_DT</Set>
<Set>BUS_CNL=STK</Set>
<Set>TX_DT=$GWA.TX_DT</Set>
<Set>TX_TM=$GWA.TX_TM</Set>
<Set>EMK_STS=4</Set> <!-- 登记初始状态为充值失败 -->
<Set>LAST_EMK_CMD=1</Set>
<Set>CRD_TX_SEQ=@O.STK_AREA.CRD_TX_SEQ</Set> <!--记录卡片交易流水号-->
<Set>CRD_PPD_RSL=0000</Set> <!-- 卡充值结果初始化为0000 -->
<Set>EMK_TYP=S</Set>
<Set>RDM_NO=@O.STK_AREA.RDM_NO1</Set> <!--卡片生成的伪随机数-->
<Set>TX_AMT=AMTSIMPLEFMT(@O.STK_AREA.TX_AMT)</Set> <!--卡片圈存金额-->
<Set>CRD_BAL=AMTSIMPLEFMT(@O.STK_AREA.CRD_BAL)</Set> <!-- 卡片上送钱包余额 -->
<Set>POST_AC_DT=$GWA.AC_DT</Set> <!-- 充值记账会计日期 -->
<Exec func="PUB:InsertRecord" error="IGNORE">
<Arg name="TblNam" value="LPSTEMK"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS20087"/>
<Arg name="MsgDat" value="登记圈存记录信息表失败"/>
</Exec>
<Set>RSL_CD=01</Set>
<Goto>END</Goto>
</If>
<Exec func="PUB:CommitWork"/>
<!-- 账务处理-圈存交易-->
<!-- 调用账户-主账户支出 -->
<Set>M_MAW.AC_NO=$MAIN_AC</Set>
<Set>M_MAW.CAP_TYP=1</Set>
<Set>M_MAW.AMT=AMTSIMPLEFMT(@O.STK_AREA.TX_AMT)</Set>
<Set>M_MAW.TX_OPP_NO=$SUB_AC</Set>
<Set>M_MAW.ORD_TYP=07</Set>
<Set>M_MAW.TX_OPP_TYP=0</Set>
<Set>M_MAW.TX_DT=$GWA.TX_DT</Set>
<Set>M_MAW.TX_TM=$GWA.TX_TM</Set>
<Set>M_MAW.ORD_NO=$GWA.JRN_NO</Set>
<Set>M_MAW.TX_CD=2140010</Set>
<Set>M_MAW.MAX_CHK_FLG=N</Set>
<Set>M_MAW.MIN_CHK_FLG=N</Set>
<Set>M_MAW.TX_TYP=06</Set> <!-- 圈存 -->
<Set>M_MAW.BUS_TYP=0700</Set>
<Exec func="ACM:MainAccountWithdraw">
<Arg name="_I_GWA" value="GWA"/>
<Arg name="_I_INP_DAT" value="M_MAW"/>
<Arg name="_O_OUT_DAT" value="M_MAW_OUT"/>
</Exec>
<If condition="NOT(IS_SUCC(@O.MSG_CD))"> <!-- 主账户支取失败 -->
<Set>~MSG_DAT=主账户支取失败</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Set>RSL_CD=01</Set>
<Exec func="PUB:RollbackWork"/>
<Goto>END</Goto>
</If>
<!-- 调用账户-子账户存入 -->
<Set>S_PAD.USR_NO=$USR_NO</Set>
<Set>S_PAD.APP_SEQ_NO=$SUB_AC</Set>
<Set>S_PAD.AC_TYP=101</Set>
<Set>S_PAD.CAP_TYP=1</Set>
<Set>S_PAD.AMT=AMTSIMPLEFMT(@O.STK_AREA.TX_AMT)</Set>
<Set>S_PAD.TX_AMT=AMTSIMPLEFMT(@O.STK_AREA.TX_AMT)</Set>
<Set>S_PAD.C_TX_DT=$GWA.TX_DT</Set>
<Set>S_PAD.TX_TM=$GWA.TX_TM</Set>
<Set>S_PAD.TX_CD=2140010</Set>
<Set>S_PAD.ORD_TYP=07</Set>
<Set>S_PAD.TX_TYP=06</Set> <!-- 圈存 -->
<Set>S_PAD.BUS_TYP=0700</Set>
<Set>S_PAD.ORD_NO=$GWA.JRN_NO</Set>
<Exec func="ACM:PurseAccountDeposit">
<Arg name="_I_GWA" value="GWA"/>
<Arg name="_I_INP_DAT" value="S_PAD"/>
<Arg name="_O_OUT_DAT" value="S_PAD_OUT"/>
</Exec>
<Exec func="PUB:DumpDs"/>
<If condition="NOT(IS_SUCC(@O.MSG_CD))"> <!-- 主账户支取失败 -->
<Set>RSL_CD=01</Set>
<Set>~MSG_DAT=圈存失败</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Exec func="PUB:RollbackWork"/>
<Goto>END</Goto>
</If>
<Set>RSL_CD=00</Set> <!-- 设置圈存状态为成功 -->
<!-- 账务处理结束-圈存交易 -->
<!-- 更新圈存交易表圈存状态 -->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_LPSTEMK_EMKSTS"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS20089"/>
<Arg name="MsgDat" value="更新圈存记录状态失败"/>
</Exec>
<Return/>
</If>
</If>
<Label>END</Label> <!-- 卡片组包下行流程 -->
<If condition="IS_NOEQUAL_STRING($UPD_FLG,0)">
<!--更新卡片信息表交易序号-->
<Exec func="PUB:ExecSql" error="IGNORE">
<Arg name="SqlCmd" value="UPD_LPSTCRD_SEQ"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:GWAAddMsg">
<Arg name="MsgCd" value="LPS20090"/>
<Arg name="MsgDat" value="更新卡片信息表交易序号失败"/>
</Exec>
</If>
<Exec func="PUB:CommitWork"/>
</If>
<Set>RDM_NO1=@O.STK_AREA.RDM_NO1</Set> <!-- 上行请求时卡片上送的伪随机数 -->
<Set>TX_AMT=ADDCHAR(TOUPPER(DEC2HEX(@O.STK_AREA.TX_AMT)),8,0,1)</Set> <!-- 组织交易报文的交易金额 -->
<Set>TX_TYP=02</Set>
<!-- 生成交易MAC2 -->
<Call package="LPS_PUB" function="CreateTransactionMAC">
<Input>SUB_AC|RDM_NO1|CRD_EMK_SEQ|TX_AMT|TX_TYP|GWA|</Input>
<Output>OUT_DAT|MSG_CD|</Output>
</Call>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Set>~MSG_DAT=生产交易MAC失败</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Return/>
</If>
<!-- 组织交易报文 -->
<Set>TXN_DT=@O.OUT_DAT.C_TX_DT</Set>
<Set>TXN_TM=@O.OUT_DAT.C_TX_TM</Set>
<Set>MAC2=@O.OUT_DAT.MAC2</Set>
<Set>CRD_JRN_NO=@O.STK_AREA.CRD_JRN_NO</Set>
<Set>CRD_TX_SEQ=@O.STK_AREA.CRD_TX_SEQ</Set>
<Set>CMD_CD=@O.STK_AREA.CMD_CD</Set> <!--还原交易代码-->
<If condition="IS_EQUAL_STRING($RSL_CD,01)">
<!-- 查询错误信息 -->
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_PUBTMSG_INFO"/>
</Exec>
<If condition="~RetCod!=0">
<Set>MSG_INF=充值失败</Set>
</If>
<Set>RSL_MSG=ADDCHAR(STRCAT(80,UCS2ENCODE($MSG_INF)),78,0020,0)</Set>
<!--Set>RSL_MSG=805BC6780195198BEF002000200020002000200020002000200020002000200020002000200020</Set-->
<Set>TXN_DT=00000000</Set>
<Set>TXN_TM=000000</Set>
<Set>MAC2=00000000</Set>
</If>
<Else>
<Set>RSL_MSG=STRCAT(805145503C6210529FFF0C672C6B215145503C,UCS2ENCODE(AMTSIMPLEFMT(@O.STK_AREA.TX_AMT)))</Set>
<If condition="INTCMP(STRLEN($RSL_MSG),1,78)">
<Set>ADD_LEN_CNT=DIV(SUB(78,STRLEN($RSL_MSG)),4)</Set>
<Set>~ADD_CNT=0</Set>
<While condition="INTCMP(~ADD_CNT,1,$ADD_LEN_CNT)">
<Set>~ADD_CNT=ADD(~ADD_CNT,1)</Set>
<Set>RSL_MSG=STRCAT($RSL_MSG,0020)</Set>
</While>
</If>
</Else>
<Set>RSL_MSG_LEN=27</Set>
<Call package="LPS_PUB" function="MessageBuild">
<Output>BK_TXN_DAT|MSG_CD|</Output>
</Call>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Set>~MSG_CD=组织交易报文失败</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Return/>
</If>
<!-- 加密交易报文 -->
<Set>BK_TXN_DAT=@O.BK_TXN_DAT</Set>
<Call package="LPS_PUB" function="MessageEncrypt">
<Input>SUB_AC|BK_TXN_DAT|</Input>
<Output>BK_TXN_DAT|MSG_CD|</Output>
</Call>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Set>~MSG_CD=加密交易报文失败</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Return/>
</If>
<!-- 生成报文MAC -->
<Set>BK_TXN_DAT=@O.BK_TXN_DAT</Set>
<Call package="LPS_PUB" function="CreateMessageMAC">
<Input>SUB_AC|BK_TXN_DAT|</Input>
<Output>BK_TXN_DAT|MSG_CD|</Output>
</Call>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Set>~MSG_CD=生成报文MAC失败</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Return/>
</If>
<!--下发钱包充值指令-->
<Set>SMS_CD=LPS800</Set>
<Set>BK_TXN_DAT=@O.BK_TXN_DAT</Set>
<Call package="LPS_PUB" function="SendShortMessage"/>
<!-- 累计检查参数 -->
<If condition="IS_EQUAL_STRING($RSL_CD,00)">
<Set>INP_CRR.PAY_CI_NO=$CI_NO</Set>
<Set>INP_CRR.PAY_USR_NO=$U_NO</Set>
<Set>INP_CRR.PAY_AC_TYP=100</Set>
<Set>INP_CRR.STL_CI_NO=$CI_NO</Set>
<Set>INP_CRR.STL_USR_NO=$U_NO</Set>
<Set>INP_CRR.STL_AC_TYP=101</Set>
<Set>INP_CRR.AMT_FLG=1</Set>
<Set>INP_CRR.BUS_CNL=$GWA.BUS_CNL</Set>
<Set>INP_CRR.RSV_FLG=N</Set>
<Set>INP_CRR.TOT_FLG=1</Set>
<Set>INP_CRR.TX_AMT1=$RISK_DAT.TX_AMT</Set>
<Set>INP_CRR.JRN_NO=$GWA.JRN_NO</Set>
<Set>INP_CRR.TX_DT=$GWA.TX_DT</Set>
<Set>INP_CRR.TX_TYP=06</Set>
</If>
</FlowCtrl>
</Transaction>
</Application>