步骤:

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>

PE发送报文的更多相关文章

  1. PE框架学习之道:PE框架——发送报文流程

    PE框架发送报文,适用于PE及VX技术 步骤: 1.在action中使用发送报文,要指定报文在router端的交易名称 2.如果使用supe.execute(context)来发送,不需要第一步 3. ...

  2. java URL实现调用其他系统发送报文并获取返回数据

    模拟本系统通过Url方式发送报文到目标服务器,并获取返回数据:(实现类) import java.io.BufferedOutputStream; import java.io.BufferedRea ...

  3. xcap发包工具的简单使用2(发送报文)

    上一篇文章介绍了如何构造报文,现在简单讲一下发送报文的步骤 1.获取接口列表 点击主界面工具栏中的“刷新列表”按钮(或对应菜单“interface->Reference interfaces”) ...

  4. Linux服务器上使用curl命令发送报文

    报文格式如下: curl -l -H "Content-type: application/json" -X POST -d 'postdata' http://172.20.10 ...

  5. soap发送报文请求和dom4j解析XML并且获得指定名称的节点信息

    package com.lzw.b2b.soap; import java.io.ByteArrayInputStream;import java.io.InputStream;import java ...

  6. 用HttpURLConnection来完成HTTP发送报文接收报文!

    public String sendMsg(String url, byte[] PostData) { String content = null; URL urls = null; try { u ...

  7. webService 发送soap请求,并解析返回的soap报文

    本例应用场景:要做一个webService测试功能,不局限于任何一种固定格式的webService,所以像axis,cxf等框架就不好用了.只有深入到webService的原理,通过发收soap报文, ...

  8. HTTPAnalyzer截获SoapUI发送的接口报文

      一.截获过程 1. 开启HTTPAnalyzer报文截获工具. 2. 通过SoapUI工具发送报文. 3. HTTPAnalyzer报文截获工具自动截获. 二.SoapUI报文准备 准备工作是:打 ...

  9. java socket解析和发送二进制报文工具(附java和C++转化问题)

    解析: 首先是读取字节: /** * 读取输入流中指定字节的长度 * <p/> * 输入流 * * @param length 指定长度 * @return 指定长度的字节数组 */ pu ...

随机推荐

  1. HDU——1257最少拦截系统(贪心)

    最少拦截系统 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  2. [SCOI2016] 背单词 (Trie 树,贪心)

    题目链接 大致题意 给你 \(n\) 个字符串, 要求你给出最小的代价. 对于每个字符串: 1.如果它的后缀在它之后,那么代价为 \(n^2\). 2.如果一个字符串没有后缀,那么代价为 \(x\), ...

  3. php 爬取网页列表 QueryList

    主流的方式是 phpQuery 今天使用了 QueryList,是在PHPQuery的基础上进行了封装,现在最新的版本是4.0,但是要求PHP>7.0.就用了旧版的3.0 3.0文档:https ...

  4. 滑雪与时间胶囊(bzoj 2753)

    Description a180285非常喜欢滑雪.他来到一座雪山,这里分布着M条供滑行的轨道和N个轨道之间的交点(同时也是景点),而且每个景点都有一编号i(1<=i<=N)和一高度Hi. ...

  5. ADO:DataSet合并两张表( ds.Merge(ds1))

    原文发布时间为:2008-08-01 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...

  6. 应用js函数柯里化currying 与ajax 局部刷新dom

    直接上代码吧 最近读javascript核心概念及实践的代码 感觉很有用 备忘. <div id="request"></div> <script t ...

  7. js 判断变量是否为空

    js 判断变量是否为空 欢迎指正,补充! /** * 判断变量是否为空, * @param {[type]} param 变量 * @return {Boolean} 为空返回true,否则返回fal ...

  8. AC日记——【模板】二分图匹配 洛谷 P3386

    题目背景 二分图 题目描述 给定一个二分图,结点个数分别为n,m,边数为e,求二分图最大匹配数 输入输出格式 输入格式: 第一行,n,m,e 第二至e+1行,每行两个正整数u,v,表示u,v有一条连边 ...

  9. 牛客网 Wannafly挑战赛9 C.列一列-sscanf()函数

      C.列一列   时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K64bit IO Format: %lld 链接:https://www.now ...

  10. luogu P2158 [SDOI2008]仪仗队

    题目描述 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是否整齐(如下图 ...