在本章节中:

关于扩展

ISO 8583 扩展是 Parasoft 的持续测试解决方案的自定义扩充套件。在客户端,可以使用它们来发送和接收自定义的 ISO 8583 消息。在服务端,可以使用它们来创建和发送自定义的虚拟化消息。

将为 ISO 8583 集成提供以下自定义扩展:

  • ISO 8583 消息格式:消息格式用于将本机 ISO 转换为 XML ISO,反之亦然。
  • ISO 8583 传输:传输协议用于发送和接收自定义的 ISO 8583 消息。
  • ISO 8583 消息监听器:消息监听器用于监听自定义的 ISO 8583 消息和生成虚拟响应。

实现

此扩展套件实现为 com.parasoft.soavirt.iso8583.main-<version>.jar,这取决于发行版提供的以下 jar:

jPOS

  • jpos-1.9.2.jar

JDOM

  • jdom-1.1.3.jar

Apache Commons CLI

  • commons-cli-1.2.jar

ISO-8583 扩展

  • com.parasoft.soavirt.messages.iso8583-<version>.jar
  • com.parasoft.soavirt.transport.iso8583-<version>.jar
  • com.parasoft.virtualize.listener.iso8583-<version>.jar

要求

  • SOAtest 和/或 Virtualize 9.5.x 及更高版本。

安装指南

可以从 UI 或命令行安装该扩展。

UI 安装指南

  1. 选择 Parasoft> Preferences

  2. 在系统属性首选项页面,单击 Add JARs

  3. 在打开的文件选择器中,选择 com.parasoft.soavirt.iso8583.main-<version>.jar。将加载所有必需的依赖项。
  4. 重启 SOAtest/Virtualize。

命令行安装指南

将 com.parasoft.soavirt.iso8583.main-<version>.jar 文件添加到 localsettings 属性文件中的 system.properties.classpath 属性。

例如:

system.properties.classpath=<path to jar>/com.parasoft.soavirt.iso8583.main-1.0.0.jar

一旦路径完成更改,将加载所有必需的依赖项。

使用说明

Virtualize

需要使用 ISO 8583 传输的 Virtualize 消息响应程序必须配置为在 PVA 级别上使用自定义的 ISO 8583 监听器(有关其他消息,请查阅 添加项目、虚拟资产和响应程序套件 )。

  1. 双击 Virtualize 服务树上 PVA 的节点。
  2. 单击 Transport> Custom 选项卡,并配置监听器。
  3. 如果安装了多个监听器,则首先从 Select Implementation 下拉菜单选择 ISO 8583 监听器。

一旦 PVA 被绑定到监听器上,则可将 ISO 8583 响应程序工具添加到 PVA,以正确地提供 ISO 8583 响应(请查阅 使用 ISO 8583)。

SOAtest

  1. 右键单击测试套件并选择 Add New> Test。 
  2. 添加测试向导中将有两个具有相同名称的 ISO 8583 客户机可用。在常用工具类中选择 ISO 8583 Client ,然后单击 完成。其他 ISO 客户机是 SOAtest 附带的内置工具,由 ISO 8583 扩展替换。   



  3. 单击 Transport 选项卡,然后从 Transport 下拉菜单选择 Custom Extension 。
  4. 从 Select Implementation 下拉菜单选择 ISO 8583 ,对工具进行配置。包装器选项是在转换选项选项卡和 Packager Settings下的传输设置中配置的。

ISO 8583 消息监听器设置

可以为 ISO 8583 消息监听器配置以下设置

频道设置

Channel Name

定义在发送/接收消息时要使用的 ISO 8583 频道。jPOS 库中包含的所有默认的频道实现(如,仅需端口、主机和包装器的频道实现)都可使用。有关更多详情信息,请查阅 Channels

Host定义在创建连接时要使用的Host。
Port

定义在创建连接时要使用的端口。 

Timeout

定义连接超时之前可以等待多少秒。 

包装器设置

Packager Name

定义将要用来包装和打开 ISO 8583 消息的包装器。总的来说,这里将使用 GenericPackager 和通用包装程序 XML 说明。然而,如果预定义的 ISO 包装器更合适,则可以使用“包装器”部分中提到的所有包装器。如果实现了自定义的 ISO 包装器(如,ISOPackager 接口),则其必须包含在 SOAtest/Virtualize 类路径中,并且必须提供完全限定的类名。有关更多详情信息,请查阅 Packagers

Packager Path

定义通用包装器说明 XML 文件的路径。

该字段仅使用于通用的包装器(如 GenericPackager 和 X92GenericPackager)。

头设置

Header Length指定输出响应的头长度。

连接管理设置

Keep connection alive

启用此选项,让客户端保持连接并重复,以便后续的发布。

Close connection after test execution

启用此选项,在发布后直接关闭客户端连接。


ISO 8583 消息格式设置

可以为 ISO 8583 消息格式配置以下设置

Packager Name

定义用来打包和解包 ISO 8583 消息的包装器。总的来说,这里将使用 GenericPackager 和通用包装程序 XML 说明。然而,如果预定义的 ISO 包装器更合适,则可以使用“包装器”部分中提到的所有包装器。如果实现了自定义的 ISO 包装器(如,ISOPackager 接口),则其必须包含在 SOAtest/Virtualize 类路径中,并且必须提供完全限定的类名。有关更多详情信息,请查阅 Packagers

Packager Path

定义通用包装器说明 XML 文件的路径。

该字段仅使用于通用的包装器(如 GenericPackager 和 X92GenericPackager)

ISO 8583 传输设置

可以为 ISO 8583 传输配置以下设置。

频道设置

Channel Name

定义在发送/接收消息时要使用的 ISO 8583 频道。jPOS 库中包含的所有默认的频道实现(如,仅需端口、主机和包装器的频道实现)都可使用。有关更多详情信息,请查阅 Channels

Host定义在创建连接时要使用的主机。
Port

定义在创建连接时要使用的端口。 

Timeout

定义连接超时之前可以等待多少秒。 

包装器设置

Packager Name

定义创建频道时将使用的包装器。

该字段与 ISO 8583 Message Format Settings中的对等内容具有相同的工作原理。

Packager Path

定义通用包装器说明 XML 文件的路径。

该字段的工作原理等同于 ISO 8583 Message Format Settings

头设置

Request Header

定义要与请求一起发送的自定义头信息。该字段还可作为响应头大小模板,允许正确读取响应中的头信息。

包装器

包装器定义如何组织 ISO 8583 消息,包括消息中的字段数和字段数据类型。它们允许 ISO 8583 消息的二进制数据应用到通用 ISO 消息,它可以轻松地被不同的包装器操作和格式化。默认情况下,提供大量的包装器,并且客户包装器用来支持特殊情况。

它们还为该自定义包装器中的 jPOS API 提供可扩展性,该包装器可定义为对自定义的 ISO 8583 消息进行描述,从而支持几乎任何类型的 ISO 8583 消息。

默认包装器

包装器名称包装器说明

Base1Packager

VISA Base1 二进制包装器。

Base1SubFieldPackager

VISA Base1 二进制子字段包装器。

BASE24Packager

BASE24 ASCII 包装器。

CTCSubElementPackager

验证用于字段 48 中子元素的包装器。

CTCSubFieldPackager

验证用于字段 48 中子字段的包装器。

DummyPackager

Dummy 包装器。如果消息被封装或打开,将抛出异常。

EuroPackager

EuroPay 包装器。

EuroSubFieldPackager

EuroPay 子字段包装器。

FSDPackager

FSD ISO 消息包装器。

GenericPackager

使用 XML 说明对 ISO 消息进行描述。

GenericSubFieldPackager

使用 XML 说明对 ISO 子字段进行描述。

GenericTaggedFieldsPackager

用于包含没有位图的 TLV 子字段的字段的包装器。

GenericValidatingPackager

使用 XML 说明对 ISO 消息进行验证。

ISO87APackager

ISO 8583 v1987 ASCII 包装器。

ISO87APackagerBBitmap

使用二进制位图的 ISO 8583 v1987 ASCII 包装器。

ISO87BPackager

ISO 8583 v1987 ASCII 包装器。

ISO93APackager

ISO 8583 v1993 ASCII 包装器。

ISO93BPackager

ISO 8583 v1993 ASCII 包装器。

LogPackager

打包和解压来自 jPOS 日志的 ISO 消息。

MasterCardEBCDICSubFieldPackager

MasterCard EBCDIC 子字段包装器。

PackagerWrapper

包装其他的 ISO 包装器。

PostPackager

用于 Postilion 的 ISO 8583 v1987 包装器。

VAPSMSPackager

用于 VISA’s VAP Single Message(已弃用)的 ISO 8583 v1987 BINARY 包装器。

VAPVIPPackager

用于 VISA’s VAP Single Message(已弃用)的 ISO 8583 v1987 BINARY 包装器。

X92GenericPackager

使用 XML 说明对 ANSI X9.2 ISO 消息进行描述。

X92Packager

ANSI X9.2 包装器。

XML2003Packager

将 ISO 8583 v2003 消息打包和解包到 XML 表示形式中。

XMLPackager

将 ISO 8583 消息打包和解包到 XML 表示形式中。

自定义包装器

自定义包装器有两种实现方式,以给自定义 ISO 8583 消息提供支持。


通用包装器 XML 说明

在这个实现中,jPOS 库提供了可以处理大部分 ISO 8583 消息的通用包装器。通用包装器使用 ISO 8583 的 XML 说明,正确地打包和解包自定义的 ISO 8583 消息。

若要定义通用包装器说明,则通过声明 XML 文档类型进行启用:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE isopackager PUBLIC
	"-//jPOS/jPOS Generic Packager DTD 1.0//EN"
	"http://jpos.org/dtd/generic-packager-1.0.dtd"> 

ISO 包装器定义遵循以下文档类型:

<isopackager>
	<!-- ISO Field Definitions -->
</isopackager>

ISO 字段定义放置在ISO 包装器定义中。ISO 字段定义可以是基本的 ISO 8583 类型,也可以是复杂类型。

基本 ISO 字段定义

使用功能以下格式定义基本 ISO 字段定义:

<isofield
	id="0"
	length="4"
	name="MESSAGE TYPE INDICATOR"
	pad="true"
	class="org.jpos.iso.IFB_NUMERIC"/>

id 属性定义字段号, length 属性定义数据长度, name 属性定义字段名, pad 属性(可选)指定字段是否应该填充字符, class 属性定义与字段数据类型相关联的字段包装器。如果需要,自定义字段包装器也可以通过实现 ISOFieldPackager 并包括在 SOAtest/Virtualize 类路径上的实现来创建。 

默认提供以下 ISO 字段包装器(所有类名应以 XML 定义中的“org.jpos.iso”作为前缀)。

类名类说明类名类说明

IF_CHAR

固定长度的字母数字(ASCII)

IFB_LLCHAR

可变长度的字母数字(BINARY,最大长度为 99)

IF_ECHAR

固定长度的字母数字(EBCDIC)

IFB_LLHBINARY

可变长度的二进制十六进制(BINARY,最大长度为 99)

IF_NOP

固定长度的空(哑)字段

IFB_LLHCHAR

可变长度的字母数字十六进制(BINARY,最大长度为 99)

IF_TBASE

固定长度的令牌字段

IFB_LLHECHAR

可变长度的字母数字十六进制(EBCDIC,最大长度为 99)

IF_TCHAR

使用令牌的固定长度字母数字

IFB_LLHFBINARY

固定长度的二进制十六进制(BINARY,最大长度为 99)

IF_UNUSED

固定长度的空(哑)字段,如果字段正在使用则抛出异常。

IFB_LLHNUM

可变长度的数字十六进制(BINARY,最大长度为 99)

IFA_AMOUNT

固定长度的数量以 0 填充(ASCII)

IFB_LLLBINARY

可变长度的二进制(BINARY,最大长度为 999)

IFA_AMOUNT2003

ISO 8583-2003 固定长度的数量以 0 填充(ASCII)

IFB_LLLCHAR

可变长度的字母数字(BINARY,最大长度为 999)

IFA_BINARY

固定长度的二进制(ASCII)

IFB_LLLHBINARY

可变长度的二进制十六进制(BINARY,最大长度为 999)

IFA_BITMAP

固定长度的位图(ASCII)

IFB_LLLHCHAR

可变长度的字母数字十六进制(BINARY,最大长度为 999)

IFA_FLLCHAR

固定长度的字母数字(ASCII,长度为 99)

IFB_LLLHECHAR

可变长度的字母数字十六进制(EBCDIC,最大长度为 999)

IFA_FLLNUM

固定长度的数字(ASCII,长度为 99)

IFB_LLLHNUM

可变长度的数字十六进制(BINARY,最大长度为 999)

IFA_LBINARY

可变长度的二进制(ASCII,最大长度为 9)

IFB_LLLLBINARY

可变长度的二进制(BINARY,最大长度为 9999)

IFA_LCHAR

可变长度的字母数字(ASCII,最大长度为 9)

IFB_LLLNUM

可变长度的数字(BINARY,最大长度为 999)

IFA_LLABINARY

可变长度的二进制(ASCII,最大长度为 99)

IFB_LLNUM

可变长度的数字(BINARY,最大长度为 99)

IFA_LLBINARY

可变长度的二进制(ASCII,最大长度为 99)

IFB_NUMERIC

固定长度的数字(ASCII)

IFA_LLBNUM

可变长度的数字(ASCII BCD,最大长度为 99)

IFE_AMOUNT

固定长度的数量(EBCDIC)

IFA_LLCHAR

可变长度的字母数字(ASCII,最大长度为 99)

IFE_BINARY

固定长度的二进制(EBCDIC)

IFA_LLLABINARY

可变长度的二进制(ASCII,最大长度为 999)

IFE_BITMAP

固定长度的位图(EBCDIC)

IFA_LLLCHAR

可变长度的字母数字(ASCII,最大长度为 999)

IFE_CHAR

固定长度的字母数字(EBCDIC)

IFA_LLLLBINARY

可变长度的二进制(ASCII,最大长度为 9999)

IFE_LLBINARY

可变长度的二进制(EBCDIC,最大长度为 99)

IFA_LLLLCHAR

可变长度的字母数字(ASCII,最大长度为 9999)

IFE_LLCHAR

可变长度的字母数字(EBCDIC,最大长度为 99)

IFA_LLLLLBINARY

可变长度的二进制(ASCII,最大长度为 99999)

IFE_LLLBINARY

可变长度的二进制(EBCDIC,最大长度为 999)

IFA_LLLLLCHAR

可变长度的字母数字(ASCII,最大长度为 99999)

IFE_LLLCHAR

可变长度的字母数字(EBCDIC,最大长度为 999)

IFA_LLLNUM

可变长度的数字(ASCII,最大长度为 999)

IFE_LLLEBINARY

可变长度的二进制 EBCDIC(EBCDIC,最大长度为 999)

IFA_NUMERIC

固定长度的数字(ASCII)

IFE_LLLLBINARY

可变长度的二进制(EBCDIC,最大长度为 9999)

IFA_TTLBINARY

使用令牌的可变长度二进制(ASCII,最大长度为 9)

IFE_LLLLCHAR

可变长度的字母数字(EBCDIC,最大长度为 9999)

IFA_TTLCHAR

使用令牌的可变长度字母数字(ASCII,最大长度为 9)

IFE_LLNUM

可变长度的数字(EBCDIC,最大长度为 99)

IFA_TTLLBINARY

使用令牌的可变长度二进制(ASCII,最大长度为 99)

IFE_NUMERIC

固定长度的数字(EBCDIC)

IFA_TTLLCHAR

使用令牌的可变长度字母数字(ASCII,最大长度为 99)

IFE_SIGNED_
NUMERIC

固定长度带符号的的数字(EBCDIC)

IFA_TTLLLBINARY

使用令牌的可变长度二进制(ASCII,最大长度为 999)

IFEA_LLCHAR

深奥的可变长度字母数字(ASCII EBCDIC,最大长度为 99)

IFA_TTLLLCHAR

使用令牌的可变长度字母数字(ASCII,最大长度为 999)

IFEB_LLLNUM

深奥的可变长度数字(EBCDIC,最大长度为 999)

IFA_TTLLLLBINARY

使用令牌的可变长度二进制(ASCII,最大长度为 9999)

IFEB_LLNUM

深奥的可变长度数字(EBCDIC,最大长度为 99)

IFA_TTLLLLCHAR

使用令牌的可变长度字母数字(ASCII,最大长度为 9999)

IFEMC_LLCHAR

深奥的可变长度字母数字( EBCDIC,最大长度为 99)

IFB_AMOUNT

固定长度的数量(BINARY)

IFEP_LLCHAR

欧洲支付可变长度的字母数字( EBCDIC,最大长度为 99)

IFB_AMOUNT2003

ISO 8583-2003(BINARY)固定长度的数量

IFEPE_LLCHAR

信用卡可变长度的字母数字(EBCDIC,最大长度为 99)

IFB_BINARY

固定长度的二进制(BINARY)

IFIPM_LLLCHAR

使用令牌的可变长度字母数字(最大长度为 999)

IFB_BITMAP

固定长度的位图(BINARY)

IFMC_LLBINARY

使用令牌的可变长度二进制(最大长度为 99)

IFB_FLLLNUM

固定长度的数字(BINARY,长度为 999)

IFMC_LLCHAR

使用令牌的可变长度字母数字(最大长度为 99)

IFB_FLLNUM

固定长度的数字(BINARY,长度为 99)

IFMC_LLLBINARY

使用令牌的可变长度二进制(最大长度为 999)

IFB_FNUMERIC

固定长度的数字(ASCII)

IFMC_LLLCHAR

使用令牌的可变长度字母数字(最大长度为 999)

IFB_LLBINARY

可变长度的二进制(BINARY,最大长度为 99)

 


复杂 ISO 字段定义

使用以下格式定义复杂 ISO 字段定义:

<isofieldpackager
	id="127"
	length="255"
	name="FILE RECORS(S) ACTION/DATA"
	class="org.jpos.iso.IFB_LLHBINARY"
	packager="org.jpos.iso.packager.GenericSubFieldPackager"/>


<!-- ISO Field Definitions -->
</isofieldpackager>

id, length, name, class 属性与基本 ISO 字段定义具有相同的含义。但是,此处多了一个 packager 属性必须定义,它用来说明如何在子字段说明(其定义类似于基本的 ISO 字段)后使用 ISO 消息的其余部分包装该复杂 ISO 字段。

作为参考,本文还提供了自定义包装器示例,该示例为 VISA’s Base1 ISO 8583 消息提供了 jPOS 示例;请查阅插件的 zip 文件中包含的 base1.xml。

ISOPackager 接口

在这个实现中,jPOS 库还提供了一个可用来定义自定义包装器的 Java 接口。如果通用包装器或其中一个默认的包装器不支持某个 ISO 8583 消息,则可实现一个自定义的 ISO 包装器。

频道

频道定义了 ISO 8583 客户端和服务端之间如何通讯。它们确保在通过电线发送并在另一端进行了适当的重构之前,对通用 ISO 消息进行了正确地格式化。频道处理用于在客户端和服务端之间对 ISO 8583 消息进行转换的连接和协议。与包装器一样,jPOS 库提供了许多频道,可以处理大多数情况。但是,如果不存在合适的频道,则可以通过继承 BaseChannel 类来实现自定义 ISO 8583 频道。

默认提供以下频道:

频道名称频道说明

AmexChannel

美国特快频道。 

ASCIIChannel

ISO 基本频道扩展,具有四个 ASCII 字符消息长度头信息。 

BCDChannel

ISO 基本频道扩展,具有以下消息格式

[LEN][TPDU][ISOMSG]

其中 LEN 为 2 个十六进制字节。 

CSChannel

CS 标准频道。 

FSDChannel

ISO 基本频道扩展,具有以下消息格式

[LEN][TPDU][ISOMSG]

其中按照 NBO(network byte order,网络字节顺序),LEN 为 2 个字节。 

GZIPChannel

ISO 基本频道扩展,GZIP 压缩通过频道发送的数据。 

HEXChannel

ISO 基本频道扩展,具有四个 ASCII 十六进制的字符消息长度头信息。 

LogChannel

ISO 基本频道扩展,从 ISO 日志程序中提取 ISOMSG 块。 

NACChannel

ISO 基本频道扩展,具有以下消息格式

 [LEN][TPDU][ISOMSG]

其中按照 NBO(network byte order,网络字节顺序),LEN 为 2 个字节。 

NCCChannel

ISO 基本频道扩展,具有以下消息格式

 [LEN][TPDU][ISOMSG]

其中按照 BCD (binary-coded decimal,二进制编码的十进制)格式,LEN 为 2 个字节。 

PADChannel

ISO 频道适用于连接到 X.25 PAD。 

PostChannel

ISO 基本频道扩展,具有以下消息格式

[LEN][ISOMSG]

其中按照 NBO,LEN 为 2 个字节(NBO)。 

RawChannel

ISO 基本频道扩展,具有以下消息格式

[LEN][ISOMSG]

其中按照 NBO,LEN 为 4 个字节(NBO)。 

RBPChannel

记录边界保存频道。 

TelnetXMLChannel

通过 telnet 会话交换基于 XML 的 ISO-8583 消息,telnet 命令将被忽略。 

VAPChannel

VISA 的 VAP 框架(已弃用)。 

X25Channel

ISO 频道适用于连接到 X.25 PAD。 

XMLChannel

ISO 基本频道扩展,交换基于 XML 的 ISO-8583 消息。 

第三方内容

此工具集包括来自第三方的资源项,如下:

Parasoft 的 ISO 扩展发布在 GNU AGPL v3.0 许可证下。

更多的许可详情可在该插件的 licenses 文件夹中获得。

  • No labels