PE框架学习之道:PE框架——发送报文流程
PE框架发送报文,适用于PE及VX技术
步骤:
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><Stringname="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框架学习之道:PE框架——发送报文流程的更多相关文章
- PE文件学习系列三-PE头详解
合肥程序员群:49313181. 合肥实名程序员群:128131462 (不愿透露姓名和信息者勿加入) Q Q:408365330 E-Mail:egojit@qq.com 最近比较忙 ...
- 框架学习之道:PE框架简介
1.PE框架开发新功能所需的部分 2.PE框架工作流程(重要) 首先根据<transcation>中的id号,找到模板(template),然后再根据模板找到责任链(chain),一旦确认 ...
- PE框架学习之道:PE框架——style的配置
1.在style.xml中定义style <style id="NumberStyle"> <setting> <param name=&qu ...
- Django框架学习——python模拟Django框架(转载)
原贴来源 http://wiki.woodpecker.org.cn/moin/ObpLovelyPython/AbtWebModules python实现web服务器 web开发首先要有web服务器 ...
- WebX框架学习笔记之二----框架搭建及请求的发起和处理
框架搭建 执行环境:windows.maven 执行步骤: 1.新建一个目录,例如:D:\workspace.注意在盘符目录下是无法执行成功的. 2.执行如下命令: mvn archetype:gen ...
- Spring框架学习之--搭建spring框架
此文介绍搭建一个最最简单的spring框架的步骤 一.创建一个maven项目 二.在pom.xml文件中添加依赖导入spring框架运行需要的相关jar包 注意:在引入jar包之后会出现org.jun ...
- Java SpringMVC框架学习(三)springMVC的执行流程
具体执行逻辑如下: 浏览器提交请求到中央调度器. 中央调度器将请求转给处理器映射器. 处理器映射器根据请求, 找到请求对应的处理器, 并将其封装为处理器执行链返回给中央调度器. 中央调度器根据处理器执 ...
- [Laravel框架学习一]:Laravel框架的安装以及 Composer的安装
1.先下载Composer-Setup.exe,下载地址:下载Composer .会自动搜索PHP.exe的安装路径,如果没有,就手动找到php路径下的php.exe. 2.在PHP目录下,打开php ...
- Struts2框架学习(三) 数据处理
Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...
随机推荐
- 从零开始PHP学习 - 第五天
写这个系列文章主要是为了督促自己 每天定时 定量消化一些知识! 同时也为了让需要的人 学到点啥~! 本人技术实在不高!本文中可能会有错误!希望大家发现后能提醒一下我和大家! 偷偷说下 本教程最后的目 ...
- (Problem 39)Integer right triangles
If p is the perimeter of a right angle triangle with integral length sides, {a,b,c}, there are exact ...
- SQL Server 多表删除
第一步: 建表 create table t1(x int, y int); create table t2(x int, y int); go insert into t1(x,y) values( ...
- Angularjs基础教程
Angularjs-基础教程 一些angualr的基础概念,适合入门. 1.下载 推荐 bower 或 npm 安装. bower install angular bower install angu ...
- 迭代器(iterators)
1.迭代器的概念 迭代器是一种抽象的设计概念.在设计模式中,迭代器模式定义为:提供一种方法,使之能够依序访问某个容器中所含的各个元素,而又无需暴露该容器的内部组织结构. 迭代器可以看做一种行为类似指针 ...
- 借助树的概率dp(期望)+数学-好题-hdu-4035-Maze
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4035 题目意思: 有n个房间,有n-1条通道连接这n个房间(每两个房间之间有且只有一条路,所以实际上 ...
- 在unity 脚本中获取客户端的IP地址
需要using System.Net.NetworkInformation;原理就是获取网卡的信息. //下面这段代码是我在百度贴吧找来的,经检验是正确的 string userIp = " ...
- hough变换中,直线方程从XY空间转换到参数空间的转换过程
XY空间直线方程:y=kx+b 参数空间直线方程:xcosθ+ysinθ=ρ 直线方程从XY空间转换到参数空间过程的转换过程: k=tan(π-α)=tan(-α)=-tanα=-cotθ=-cosθ ...
- 2768: [JLOI2010]冠军调查( 最小割 )
最小割... 怎么乱搞都可以 -------------------------------------------------------------------------------- #inc ...
- Java 比较两日期相差天数
(版本1) publicstaticint getIntervalDays(Date fDate, Date oDate) { if (null == fDate || null == oDate) ...