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

259 lines
10 KiB
XML

<?xml version='1.0' encoding='UTF-8'?>
<Application name="lps" code="010" trace="yes">
<!--缴本机话费-->
<Transaction code="2150110" log_switch = '1'>
<!--从手机钱包卡信息表中读取应用序列号-->
<DynSentence name="QRY_LPSTCRD_SUBNUM">
<Sentence>
SELECT SUB_AC,USR_NO,MAIN_AC FROM LPSTCRD WHERE MBL_NO=? AND CRD_STS!='2'
</Sentence>
<Fields>MBL_NO|</Fields>
</DynSentence>
<!-- 查询钱包序列号 -->
<DynSentence name='QRY_LPSTSUBAC_INFO'>
<Sentence>
SELECT SUB_AC FROM LPSTSUBAC WHERE MBL_NO=?
</Sentence>
<Fields>MBL_NO|</Fields>
</DynSentence>
<FlowCtrl>
<!-- 交易设置-->
<Set>CMD_CD=SUBSTR($PIN_DAT,1,2)</Set>
<Set>CRD_VER=SUBSTR($PIN_DAT,3,2)</Set>
<!--查询应用序列号和手机钱包号-->
<Exec func="PUB:ReadRecord" error="IGNORE">
<Arg name="SqlCmd" value="QRY_LPSTCRD_SUBNUM" />
</Exec>
<If condition="~RetCod=2">
<Exec func="PUB:ReadRecord">
<Arg name="SqlCmd" value="QRY_LPSTSUBAC_INFO" />
</Exec>
<If condition="~RetCod=2">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="URM20211" />
<Arg name="MsgDat" value="主账户未开通" />
</Exec>
<Return/>
</If>
<ElseIf condition="~RetCod!=0">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00001" />
</Exec>
<Return/>
</ElseIf>
<Set>QU_IN.MBL_NO=$MBL_NO</Set>
<!-- 查询用户主账号 -->
<Exec func="URM:QueryUser">
<Arg name="_I_GWA" value="GWA"/>
<Arg name="_I_INP_DAT" value="QU_IN"/>
<Arg name="_O_OUT_DAT" value="QU_OUT"/>
</Exec>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD" />
</Exec>
<Return/>
</If>
<Set>MAIN_AC=@O.QU_OUT.AC_NO</Set>
</If>
<ElseIf condition="~RetCod!=0">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00001" />
<Arg name="MsgDat" value="系统异常,交易失败"/>
</Exec>
<Return/>
</ElseIf>
<!--验证报文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))">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD" />
<Arg name="MsgDat" value="报文MAC错误,交易失败" />
</Exec>
<Return/>
</If>
<!--解密报文-->
<If condition="OR(IS_EQUAL_STRING(STRLEN($PIN_DAT),56),IS_EQUAL_STRING(STRLEN($PIN_DAT),54))"> <!-- 缴费请求报文 -->
<Call package="LPS_PUB" function="MessageDecrypt">
<Input>CMD_CD|CRD_VER|SUB_AC|PIN_DAT|</Input>
<Output>PIN_DAT|MSG_CD|</Output>
</Call>
</If>
<Else> <!-- 缴费指令报文 -->
<Call package="LPS_PUB" function="PasswordMessageDecrypt">
<Input>CMD_CD|SUB_AC|PIN_DAT|MAIN_AC|</Input>
<Output>PIN_DAT|MSG_CD|</Output>
</Call>
</Else>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD" />
<Arg name="MsgDat" value="报文解密失败" />
</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))">
<!--报文解析失败-->
<Exec func="PUB:GWSetMsg">
<Arg name="MsgCd" value="@O.MSG_CD" />
<Arg name="MsgDat" value="报文解析失败" />
</Exec>
<Return/>
</If>
<!--如果是00,则是缴费请求,查询付费方式;如果是01, 则是后付费用户 ,查询账单-->
<Set>PE_USR_ID=$MBL_NO</Set>
<If condition="OR(IS_EQUAL_STRING(@O.STK_AREA.SUB_CMD_CD,00),IS_EQUAL_STRING(@O.STK_AREA.SUB_CMD_CD,01))">
<Exec func="PUB:CallThirdService" error="IGNORE"> <!--付费方式查询-->
<Arg name="HTxnCd" value="5011020" />
<Arg name="ObjSvr" value="OPESPTC1"/>
<Arg name="In" value="PE_USR_ID|" />
<Arg name="Out" value="CUS_NM|BOSS_USR_TYP|OLD_WT_PE_AMT|GWA|" />
</Exec>
<If condition="~RetCod=0">
<If condition="NOT(IS_SUCC($GWA.MSG_CD))">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="$GWA.MSG_CD" />
</Exec>
<Return/>
</If>
<Set>PE_AMT=$OLD_WT_PE_AMT</Set>
</If>
<Else>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS19999" />
</Exec>
<Return/>
</Else>
</If>
<If condition="IS_EQUAL_STRING(@O.STK_AREA.SUB_CMD_CD,00)">
<!--根据查询结果 设置下行报文-->
<If condition="IS_EQUAL_STRING(@O.STK_AREA.CRD_VER,01)">
<!-- 1.1版本的卡片 -->
<Set>CMD_CD=14</Set>
</If>
<Else>
<!-- 1.0版本的卡片 -->
<Set>CMD_CD=05</Set>
</Else>
<If condition="IS_EQUAL_STRING($BOSS_USR_TYP,1)"> <!-- 预付费 -->
<Set>SUB_CMD_CD=02</Set>
</If>
<If condition="IS_EQUAL_STRING($BOSS_USR_TYP,0)"> <!-- 后付费 -->
<Set>SUB_CMD_CD=01</Set>
<Set>FEE_BILL=UCS2ENCODE(STRCAT(尊敬的客户:您的应缴话费为,$OLD_WT_PE_AMT,元))</Set>
<Set>STK_AREA.FEE_BILL=UCS2ENCODE(STRCAT(尊敬的客户:您的应缴话费为,$OLD_WT_PE_AMT,元))</Set>
<!-- Set>STK_AREA.FEE_BILL=STRCAT(“尊敬的客户:您的应缴话费为”,AMTSIMPLEFMT($OLD_WT_PE_AMT),元)</Set-->
<Set>FEE_BILL_LEN=TOUPPER(ADDCHAR(DEC2HEX(DIV(STRLEN($FEE_BILL),2)),2,0,1))</Set>
<Set>STK_AREA.FEE_BILL_LEN=TOUPPER(ADDCHAR(DEC2HEX(DIV(STRLEN($FEE_BILL),2)),2,0,1))</Set>
</If>
<Set>CRD_JRN_NO=@O.STK_AREA.CRD_JRN_NO</Set>
<!-- 组织下行报文 -->
<Call package="LPS_PUB" function="MessageBuild"/>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<If condition="IS_SUCC($GWA.MSG_CD)"> <!--报文组织失败-->
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD" />
</Exec>
</If>
<Return/>
</If>
<!--生成报文MAC-->
<Call package="LPS_PUB" function="CreateMessageMAC">
<Input>SUB_AC|@O.BK_TXN_DAT|</Input>
<Output>BK_TXN_DAT|MSG_CD|</Output>
</Call>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<If condition="IS_SUCC($GWA.MSG_CD)">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD" />
</Exec>
</If>
<Return/>
</If>
<!--下发缴费响应指令-->
<Set>SMS_CD=LPS800</Set>
<Set>BK_TXN_DAT=@O.BK_TXN_DAT</Set>
<Call package="LPS_PUB" function="SendShortMessage"/>
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00000" />
</Exec>
<Return/>
</If>
<!-- 验证支付密码 -->
<Set>INP_DAT.MBL_NO=$MBL_NO</Set>
<Set>INP_DAT.PAY_PSWD_IN=@O.STK_AREA.PAY_PSW</Set>
<Set>GWA.BUS_CNL=STK</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>
<Exec func="PUB:DumpDs"/>
<If condition="NOT(IS_SUCC(@O.MSG_CD))">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="@O.MSG_CD"/>
</Exec>
<Return/>
</If>
<!--线下缴话费-->
<Set>PE_USR_ID=$MBL_NO</Set>
<If condition="IS_EQUAL_STRING(@O.STK_AREA.SUB_CMD_CD,01)"> <!-- 后付费 -->
<Set>PE_AMT=$OLD_WT_PE_AMT</Set>
</If>
<ElseIf condition="IS_EQUAL_STRING(@O.STK_AREA.SUB_CMD_CD,02)"> <!-- 预付费 -->
<Set>PE_AMT=@O.STK_AREA.TX_AMT</Set>
</ElseIf>
<Exec func="PUB:CallThirdService" error="IGNORE">
<Arg name="HTxnCd" value="5011030" />
<Arg name="ObjSvr" value="OPESPTC1" />
<Arg name="In" value="MBL_NO|PE_USR_ID|PE_AMT|GWA|" />
<Arg name="Out" value="PE_AMT|PAY_AMT|CASH_AVL_AMT|NON_CASH_AVL_AMT|GWA|"/>
</Exec>
<If condition="~RetCod!=0">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS19999" />
</Exec>
<Return/>
</If>
<ElseIf condition="~RetCod=0">
<If condition="NOT(IS_SUCC($GWA.MSG_CD))">
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="$GWA.MSG_CD" />
</Exec>
<Return/>
</If>
<!--交易流程正常结束,置GWA区MSG_CD-->
<Exec func="PUB:GWASetMsg">
<Arg name="MsgCd" value="LPS00000" />
</Exec>
</ElseIf>
</FlowCtrl>
</Transaction>
</Application>