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>

时间: 2024-10-05 03:19:06

PE发送报文的相关文章

C++传智笔记(6):socket客户端发送报文接受报文的api接口

#define _CRT_SECURE_NO_WARNINGS #include "stdio.h" #include "stdlib.h" #include "string.h" #include "itcast_comm.h" #include "memwatch.h" #include "itcastlog.h" /* 下面定义了一套socket客户端发送报文接受报文的api接口

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

模拟本系统通过Url方式发送报文到目标服务器,并获取返回数据:(实现类) 1 import java.io.BufferedOutputStream; 2 import java.io.BufferedReader; 3 import java.io.InputStream; 4 import java.io.InputStreamReader; 5 import java.io.OutputStream; 6 import java.io.OutputStreamWriter; 7 impor

https请求带证书发送报文

public String sendXml(String sendurl, String sendData) throws Exception { File trustedKeystoreFile = new File(sslTrustStore); BufferedReader reader = null; CloseableHttpResponse resp = null; String resultuestStr1 = null; try { SSLContext sslcontext =

短报文消息发送的模块设计实现

曾接触到一个报文发送的项目,这个项目的报文发送,虽有报文优先级,但却无按照报文优先级发送的功能. 因此,我便思考了一下,将自己的设计思路发出来,与大家共享. 首先明确的是,我所设想的报文发送是基于 Redis的 List 数据存储结构. 报文有三个优先级:高.中.低:报文有两个类型:定时发送报文和普通发送报文. 这些报文按照优先级,存储到 high.midium.low的三个List中,以下间记为H.M.L:按照定时发送报文存储到 time(时间,精确到秒) List中,以下间记为T. 需要的线

linux内核-网络报文发送流程

报文的发送是由网络协议栈的上层发起的.网络协议栈上层构造一个需要发送的skb结构后(该skb已经包含了数据链路层的报头),调用dev_queue_xmit函数进行发送:dev_queue_xmit(skb);该函数先会处理一些缓冲区重组.计算校验和之类的杂事,然后开始处理报文的发送.发送报文有两种策略,有队列或无队列.这是由网络设备驱动程序在定义其对应的dev结构时指定的,一般的设备都会使用队列.dev->qdisc指向一个队列的实例,里面包含了队列本身以及操作队列的方法(enqueue.deq

HTTPAnalyzer截获SoapUI发送的接口报文

  一.截获过程 1. 开启HTTPAnalyzer报文截获工具. 2. 通过SoapUI工具发送报文. 3. HTTPAnalyzer报文截获工具自动截获. 二.SoapUI报文准备 准备工作是:打开SoapUI工具,任选一个接口,填写好报文信息,作为这次测试报文截获的例子,如下图所示: 三. 报文截获步骤 详细的报文截获步骤如下: 1. 先打开已经安装好的HTTPAnalyzer报文截获工具,如下如所示: 2. 点击Start开始报文截获,如下图所示: 3. 时间久了,截获工具会截获一些其他

Linux Netfilter挂载钩子发送简单的UDP报文

1.思路 分配空间--->填充udp.ip.ethernet报文头以及发送数据--->发送构造完成的报文 2.需要明白的接口 alloc_skb 分配skb空间 skb_reserve 在skb头部预留(将数据指针与skb尾指针后移) skb_push 向前移动数据头指针(skb_reserve为这个操作预留空间) skb_reset_transport_header 重置传输层报文头指针(存在偏移与不偏移两种方式) skb_set_transport_header 重置并设置传输层报文头指针

linux原始套接字(3)-构造IP_TCP发送与接收

一.概述                                                    tcp报文封装在ip报文中,创建tcp的原始套接字如下: 1 sockfd = socket(PF_INET, SOCK_RAW, IPPROTO_TCP); 此时只能构造tcp报文,如果想进一步构造ip首部,那么就要开启sockfd的IP_HDRINCL选项: 1 int on = 1; 2 setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &on

大话IS08583报文协议

背景 最近在学习ISO8583报文协议, 苦于网上只有些苦涩难懂的中文翻译解释, 和由于自己蹩脚的英语看不懂国外资料, 在搜寻一翻后, 查到了一些资料,  特此整理出来.. 正文 如果单纯的讲IS08583那些字段的定义,我觉得没有什么意思,标准中已经对每个字段解释的非常详细了,如果你觉得理解英文版的ISO8583规范有些困难,网上也有同行为我们翻译好的中文版ISO8583规范,所以我的目的是达到阅读本文后能够对ISO8583知其然,亦知其所以然,使以前基本没有接触它的人也能够达到掌握ISO85