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

180 lines
6.7 KiB
XML

<?xml version='1.0' encoding='UTF-8'?>
<Application name="lps" trace="yes">
<!--空中充值同步-->
<Transaction code="2140030" log_switch="1">
<!-- 查询卡片信息 -->
<DynSentence name="QRY_LPSTCRD_INFO">
<Sentence>
SELECT CRD_STS,SUB_AC,CRD_STSW,MAIN_AC FROM LPSTCRD WHERE MBL_NO=? AND CRD_STS='1'
</Sentence>
<Fields>MBL_NO|</Fields>
</DynSentence>
<FlowCtrl>
<Set>CMD_CD=SUBSTR($PIN_DAT,1,2)</Set>
<!-- 获取卡片端流水号 -->
<Set>PIN_LEN=STRLEN($PIN_DAT)</Set>
<Set>JRN_NO_START=SUB($PIN_LEN,24)</Set>
<Set>CRD_JRN_NO=SUBSTR($PIN_DAT,$JRN_NO_START,8)</Set> <!-- 获取1.0卡片流水号 -->
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00000"/>
</Exec>
<!--卡片状态查询-->
<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">
<If condition="IS_EQUAL_STRING(SUBSTR($CRD_STSW,4,1),1)">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS20092"/>
<Arg name="MsgDat" value="卡片被锁定无法进行充值同步"/>
</Exec>
<Set>RSL_CD=01</Set>
<Goto>END</Goto>
</If>
<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="IS_NOEQUAL_STRING(SUBSTR(@O.MSG_CD,4,5),00000)">
<Set>~MSG_DAT=验证报文MAC失败</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Return/>
</If>
<!--解密充值同步报文-->
<If condition="IS_EQUAL_STRING($CMD_CD,13)"> <!--1.1卡片解密报文-->
<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>
<Set>CRD_JRN_NO=@O.STK_AREA.CRD_JRN_NO</Set> <!-- 获取1.1卡片流水号 -->
</If>
<!-- 调用用户-用户状态检查 -->
<!--用户-用户状态查询-->
<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))">
<Set>~MSG_DAT=用户状态异常</Set>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Set>RSL_CD=01</Set>
<Goto>END</Goto>
</If>
<If condition="IS_EQUAL_STRING($CMD_CD,13)">
<Set>TXN_DAT=@O.PIN_DAT</Set> <!--1.1解密后的报文-->
</If>
<Else>
<Set>TXN_DAT=$PIN_DAT</Set> <!--1.0原始报文-->
</Else>
<!--调用未确认信息同步组件-->
<Set>INP_DAT.CMD_CD=$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>
<Set>RSL_CD=01</Set>
<Goto>END</Goto>
</If>
<Else>
<Set>~MSG_DAT=未确认信息处理完毕</Set>
<Set>RSL_CD=00</Set>
</Else>
<Label>END</Label>
<If condition="$CMD_CD=03"> <!-- 1.0版本 -->
<Set>CMD_CD=02</Set> <!-- 充值同步下行命令类型 -->
</If>
<Else> <!-- 1.1版本 -->
<Set>CMD_CD=12</Set> <!-- 充值同步下行命令类型 -->
</Else>
<!-- 组织报文 -->
<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>
<!-- 生成报文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"/>
</FlowCtrl>
</Transaction>
</Application>