zoukankan      html  css  js  c++  java
  • PE发送报文

    步骤:

    1. 在 action 中使用发送报文,要指定报文在 router 端的交易名称

    2. 如果使用 supe.execute(context) 来发送,不需要第一步

    3. 配置从网银到 router 的 xml 报文

    4. 根据网银交易名匹配到 router 端交易名(这里对应的是第 2 步,如果用第一步的方式,可以跳过)

    5. 在 router 端配置交易,记住命名空间,交易名等要一致

    6. 配置报文编码,转换为主机的编码(交易名对应的数字)

    7. 配置 router 到主机的报文

    8. 配置主机返回 router 的报文

    9. 配置 router 返回网银的报文


    发送报文配置 xml ,以查询卡信息为例 (CifActsQryByLHW) :

    1. 在 Action 中调用这句,就是用一个 map 来装载返回的报文内容

    toHostMap.put(Constants. HOST_TRANSACTION_CODE , "pquery.CifActsQryByLHW" );

    双引号中的是在 router 端调用的交易名称,前半部为命名空间(同时也是 报文的名称)

    // 还要使用这个来发送

    Map resultMap=(Map) this .issueHostTrs(context,map);

    使用这种方式发送报文,由于指定了 router 端的交易名称,所以不需要在 resolver.xml 中配置


    也可以使用 super.execute(context) 来发送报文,这样上面两步都不用了,不过一样要引入父类 parent="BaseQueryAction" ,使用这种方式发送报文,报文交易名必须在 common 包下的 resolver.xml 中配置(否则不知道该调用 router 端的那个交易)


    2. 配置从网银到路由的报文 fsegquery.CifActsQryByLHW.xml ,放在当前交易包下 ,

    config.outbound.csxml.packets

    < segment >

    < xmlTag >< String name = "CardNo" ></ String ></ xmlTag >

    < xmlTag >< String name = "PageNo" defaultValue = "0001" ></ String >

    </ xmlTag >

    </ segment >

    格式就是 fseg+ 报文名称 .xml


    3. 在 resolver.xml 中配置报文名称所对应的交易 id ,在 router 端还要调用这个交易去发报文到前置。该 xml 在网银端 common 包下(如果在第 1 步中指定了交易名称,此步可以跳过,它其实是根据网银交易名匹配 router 到主机的交易名)

    < param name = "CifActsQryByLHW" > pquery.CifActsQryByLHW </ param >

    前面的 name 就是网银交易名称,这个一般 router 中的和要发报文的交易都是相同的,后面的是报文名称,同时也是在 router 中的交易名称, pquery 为命名空间


    4. 在 router 包的 xml 内定义交易,就是上面的那个 id ,注意 namespace 和 transaction 要与匹配的一致

    < transaction id = "CifActsQryByLHW" template = "publicQueryTemplate" >

    < actions >

    < ref name = "action" > CifActsQryByCardQueryAction </ ref >

    </ actions >

    </ transaction >


    这里是在 router 中定义的,一般查询就是用 publicQueryTemplate ,有操作的用 publicTwoPhaseTrsTemplate


    5. 配置从路由到前置(主机)的报文 fsegpquery.CifActsQryByLHW.xml ,放在 router 包,

    config.pquery.outbound.gdrcu.packets

    < segment >

    < xmlTag tagName = "card_no" >< String name = "CardNo" ></ String >

    </ xmlTag >

    < xmlTag tagName = "page_no" >< String name = "PageNo" ></ String >

    </ xmlTag >

    </ segment >

    格式就是 fseg+ 报文名称 .xml


    6. 在 router 端定义报文对应的接口名称,就是你所发报文与接口的对应关系,因为主机使用的是自己的编码,而不是网银的编码

    < param name = "pquery.CifActsQryByLHW" > 11130004 </ param >


    7. 配置前置到路由 router 的返回报文 pquery.CifActsQryByLHW.xml ,放在

    Rotuer 端

    (经过第 6 步的转换,这里自动由 p11130004.xml 变为 pquery.CifActsQryByLHW.xml)

    < mapAlias name = "parse" >

    < elementAlias name = "Currency" alias = "curreny" />

    < elementAlias name = "AcctState" alias = "acct_status" />

    </mapAlias>

    格式就是 P+ 报文名称 .xml


    如果返回的 是 list ,如下:

    < mapAlias name = "parse" >

    < mapAlias name = "List" alias = "list" >

    < elementAlias name = "AcNo" alias = "acct_no" />

    </ mapAlias >

    </ mapAlias >


    8. 配置路由router到网银的返回报文fsegpquery.CifActsQryByLHW.xml,放在

    Router 端 config.inbound.csxml.packets

    < segment >

    < xmlTag >

    < idxField name = "List" >

    < Group name = "Map" >

    < xmlTag >< String name = "AcNo" ></ String ></ xmlTag >

    < xmlTag >< String name = "AcFlag" ></ String ></ xmlTag >

    </ Group >

    </ idxField >

    </ xmlTag >

    </ segment >

    格式就是 fseg+ 报文名称 .xml


    如果返回的是 map ,不是 list ,那么如下写:

    < segment >

    < xmlTag >< String name = "AcctNo" ></ String ></ xmlTag >

    < xmlTag >< String name = "AcName" ></ String ></ xmlTag >

    </segment>

  • 相关阅读:
    The OpenGL pipeline
    HLS协议实现
    用C++设计一个不能被继承的类
    Ansible@一个高效的配置管理工具--Ansible configure management--翻译(八)
    史上最简单的软件破解——5行脚本代码完美破解99%的过期软件
    oracle11g创建新的用户和改动最大连接数
    【SICP感应】1 工艺和替代模式
    ant利用先进,ant订单具体解释,ant包,ant包装删除编译jar文件
    SqlServer表EXCEL数据复制的另一种方法
    【摘要干】如何执飞前写商业计划?
  • 原文地址:https://www.cnblogs.com/gaoguofeng/p/5327998.html
Copyright © 2011-2022 走看看