步骤:
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>