229 lines
8.1 KiB
XML
229 lines
8.1 KiB
XML
<?xml version='1.0' encoding='UTF-8'?>
|
|
<Application name="lps" code="010" trace="yes">
|
|
|
|
<!--网络侧直接圈存-->
|
|
<Transaction code="2142020" log_switch='1'>
|
|
<!--查询钱包序列号、卡版本 和主账户号-->
|
|
<DynSentence name='QRY_LPSTCRD_SUBAC'>
|
|
<Sentence>
|
|
SELECT SUB_AC,MAIN_AC,CRD_VER,CRD_STS FROM LPSTCRD WHERE MBL_NO=? AND CRD_STS!='2'
|
|
</Sentence>
|
|
<Fields>MBL_NO|</Fields>
|
|
</DynSentence>
|
|
|
|
<!--查询最后一笔充值转发时间是否大于30分钟-->
|
|
<DynSentence name='QRY_LPSTSFIF_LAST'>
|
|
<Sentence>
|
|
SELECT REG_DT, REG_TM
|
|
FROM LPSTSFIF
|
|
WHERE MBL_NO=? AND CMD_CD='16'
|
|
AND (to_date(?,'yyyymmddhh24miss')-to_date(REG_DT||REG_TM,'yyyymmddhh24miss'))*24*60 < '30'
|
|
</Sentence>
|
|
<Fields>MBL_NO|NOW_DTM|</Fields>
|
|
</DynSentence>
|
|
|
|
<FlowCtrl>
|
|
<Set>NOW_DTM=GETDATETIME()</Set> <!-- 获取当前时间 -->
|
|
|
|
<!-- 判断本次充值是否离上笔充值交易的时间间隔大于30分钟 -->
|
|
|
|
<Exec func="PUB:ReadRecord" error="IGNORE">
|
|
<Arg name="SqlCmd" value="QRY_LPSTSFIF_LAST"/>
|
|
</Exec>
|
|
<If condition="~RetCod=-1">
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="LPS00001"/>
|
|
<Arg name="MsgDat" value="系统异常,交易失败"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
<ElseIf condition="~RetCod=0">
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="LPS78012"/>
|
|
<Arg name="MsgDat" value="离上笔充值的存储转发尚未超过30分钟"/>
|
|
</Exec>
|
|
<Return/>
|
|
</ElseIf>
|
|
|
|
<Exec func="PUB:ReadRecord" error="IGNORE">
|
|
<Arg name="SqlCmd" value="QRY_LPSTCRD_SUBAC"/>
|
|
</Exec>
|
|
<If condition="~RetCod=-1">
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="LPS00001"/>
|
|
<Arg name="MsgDat" value="系统异常,交易失败"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
<ElseIf condition="~RetCod=2">
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="LPS20055"/>
|
|
<Arg name="MsgDat" value="未开通手机钱包"/>
|
|
</Exec>
|
|
<Return/>
|
|
</ElseIf>
|
|
<!--判断手机钱包状态是否为暂停-->
|
|
<If condition="IS_EQUAL_STRING($CRD_STS,3)">
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="LPS20104" />
|
|
<Arg name="MsgDat" value="手机钱包为暂停状态,无法进行圈存" />
|
|
</Exec>
|
|
<Return/>
|
|
</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))">
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="@O.MSG_CD"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
|
|
<!--校验支付密码-->
|
|
<Set>INP_DAT.MBL_NO=$MBL_NO</Set>
|
|
<Set>INP_DAT.PAY_PSWD_IN=$PAY_PSWD</Set>
|
|
<!--
|
|
<Set>GWA.BUS_CNL=PORTA</Set>
|
|
<Set>GWA.SYS_CNL=SMS</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>
|
|
<Return/>
|
|
</If>
|
|
|
|
<!--查询账户可用余额-->
|
|
<Set>IN_Q_MACNT.AC_NO=$MAIN_AC</Set>
|
|
<Set>IN_Q_MACNT.CAP_TYP=1</Set>
|
|
<Set>IN_Q_MACNT.AC_TYP=100</Set>
|
|
<Exec func="ACM_MNG:QueryMainAccountBalance">
|
|
<Arg name="_I_GWA" value="GWA"/>
|
|
<Arg name="_I_INP_DAT" value="IN_Q_MACNT"/>
|
|
<Arg name="_O_OUT_DAT_1" value="OUT_Q_MACNT_1"/>
|
|
<Arg name="_O_OUT_DAT_2" value="OUT_Q_MACNT_2"/>
|
|
</Exec>
|
|
|
|
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="@O.MSG_CD" />
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
|
|
<!--获取用户余额-->
|
|
<Set>DRW_AC_BAL=@O.OUT_Q_MACNT_1.CUR_AC_BAL</Set> <!--现金账户-->
|
|
<If condition ="ISNULL($DRW_AC_BAL)">
|
|
<Set>DRW_AC_BAL=0</Set>
|
|
</If>
|
|
<If condition="DOUBLECMP($TXN_AMT,6,$DRW_AC_BAL)">
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="LPS40003"/>
|
|
<Arg name="MsgDat" value="余额不足,交易失败"/>
|
|
</Exec>
|
|
<Return/>
|
|
</If>
|
|
|
|
<!-- 转化成分为单位 -->
|
|
<Set>TXN_AMT=FMUL(100,$TXN_AMT,0)</Set>
|
|
|
|
<!-- 风控单笔限额检查 -->
|
|
<Set>~TMP_TX_CD=$GWA.TX_CD</Set>
|
|
<Set>GWA.TX_CD=2142020</Set> <!-- 重置GWA区中的交易码 -->
|
|
<Set>RISK_DAT.MBL_NO=$MBL_NO</Set>
|
|
<Set>RISK_DAT.RISK_SWITCH=C</Set>
|
|
<Set>RISK_DAT.TX_AMT=AMTSIMPLEFMT($TXN_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>
|
|
<Return/>
|
|
</If>
|
|
|
|
|
|
<!--设置下行报文-->
|
|
<Set>CMD_CD=16</Set>
|
|
<Set>CRD_JRN_NO=00000000</Set>
|
|
<!--生成下行报文-->
|
|
<Call package="LPS_PUB" function="MessageBuild">
|
|
<Output>BK_TXN_DAT|MSG_CD|</Output>
|
|
</Call>
|
|
<If condition="SUBSTR(@O.MSG_CD,4,5) != 00000">
|
|
<If condition="SUBSTR($GWA.MSG_CD,4,5) = 00000"> <!--报文组织失败-->
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="@O.MSG_CD"/>
|
|
</Exec>
|
|
</If>
|
|
<Return/>
|
|
</If>
|
|
|
|
<!-- 查应用序列号 -->
|
|
<Exec func="PUB:ReadRecord" error="IGNORE">
|
|
<Arg name="SqlCmd" value="QRY_LPSTCRD_SUBAC" />
|
|
</Exec>
|
|
<If condition="~RetCod!=0">
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="LPS00001"/>
|
|
<Arg name="MsgDat" value="数据库查询失败"/>
|
|
</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="SUBSTR(@O.MSG_CD,4,5) != 00000">
|
|
<If condition="SUBSTR($GWA.MSG_CD,4,5) = 00000">
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="@O.MSG_CD" />
|
|
</Exec>
|
|
</If>
|
|
<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="SUBSTR(@O.MSG_CD,4,5) != 00000">
|
|
<If condition="SUBSTR($GWA.MSG_CD,4,5) = 00000">
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="@O.MSG_CD"/>
|
|
</Exec>
|
|
</If>
|
|
<Return/>
|
|
</If>
|
|
|
|
<Set>BK_TXN_DAT=@O.BK_TXN_DAT</Set>
|
|
<!--下发充值指令-->
|
|
<Set>SMS_CD=LPS800</Set>
|
|
<Call package="LPS_PUB" function="SendShortMessage"/>
|
|
|
|
<Exec func="PUB:GWASetMsg">
|
|
<Arg name="MsgCd" value="LPS00000" />
|
|
</Exec>
|
|
</FlowCtrl>
|
|
</Transaction>
|
|
|
|
</Application>
|