3

我的问题基于 ISO8583 事务消息标准。我的问题陈述是开发一个应用程序,它将解码作为 HEX 格式输入提供的 ISO8583 消息。

例如:我的输入 = 0200B2200000001000000000000000800000201234000000010000011072218012345606A5DFGR021ABCDEFGHIJ 1234567890

使用 jPOS 库,我正在解析此十六进制代码,输出如下: MTI:0200 字段 3:201234 字段 4:000000010000 字段 7:0110722180 字段 11:123456 字段 44:A5DFGR 字段 105:ABCDEFGHIJ 1234567890

现在这个解析的输出我想解码,即我想把它转换成字符串格式。我想知道它到底传达了什么,比如是余额查询还是交易请求等。

所以,我的问题是,是否有任何工具可用于理解 iso8583 消息的十六进制代码?

4

2 回答 2

5

从 1987 年、1993 年和 2003 年开始,有大量基于 ISO 8583 规范的方言。修改后的协议在字段中混合使用 ASCII、二进制、BCD、EBCDIC 数据。

您的消息示例看起来类似于 OmniPay 主机到主机的实现,除了字段 105 未被本规范使用。

在没有额外修改的情况下,它被https://iso8583.info/lib/OmniPay/H2H/msg的在线工具解析

使用您的消息“二进制”表示:

0000: 30 32 30 30 42 32 32 30 │ 30 30 30 30 30 30 31 30  0200B22000000010
0010: 30 30 30 30 30 30 30 30 │ 30 30 30 30 30 30 38 30  0000000000000080
0020: 30 30 30 30 32 30 31 32 │ 33 34 30 30 30 30 30 30  0000201234000000
0030: 30 31 30 30 30 30 30 31 │ 31 30 37 32 32 31 38 30  0100000110722180
0040: 31 32 33 34 35 36 30 36 │ 41 35 44 46 47 52 30 32  12345606A5DFGR02
0050: 31 41 42 43 44 45 46 47 │ 48 49 4A 20 31 32 33 34  1ABCDEFGHIJ 1234
0060: 35 36 37 38 39 30       │                          567890

这是原始消息中的一些垃圾,但这不是解析器的错。))

--- # Cheef's parser (Limited version - 5 levels deep only)
- msg:  # OmniPay H2H message
   MTI: "0200" # Message Type ID.
   DE000: "B220000000100000" # Primary bitmap  // 1.3.4.7.11.44.
 - BM0:  # Fields at Primary Bitmap
    DE001: "0000000000800000" # Secondary bitmap  // 105.
  - DE003:  # PC
     S01: "20" # Transaction Code.  // Refund
     S02: "12" # Account, from.
     S03: "34" # Account, to.
    DE004: "000000010000" # Amount, transaction.  // 10000
  - DE007:  # Date and time, transmission
     date: "0110" # Date, local transmission.  // 2015.01.10
     time: "722180" # Time, local transmission.  // 00:22:20
    DE011: "123456" # STAN.
  - DE044:  # Additional response data
     len: "06"
   - val: 
      RFU: "A5DFGR"

为多种方言定义的在线解析器,因此您可以使用您的消息数据并分析结果。

于 2015-06-01T23:41:17.447 回答
1

您的示例输入看起来像标准的 ASCII ISO-8583 输入字符串,而不是十六进制或任何类型的二进制格式。因此,如果您的所有输入看起来都像这样,那么您的大部分问题已经解决了。

就您所拥有的了解而言,有大量公开可用的信息专门用于解码 ISO-8583 消息格式及其值。对于它们中的大多数,它们通常遵循标准字段格式,但可能具有规范所特有的自定义字段值。最大的例外是 VISA 和 MasterCard,但美国的区域性通常非常接近 ISO-8583-87。

我认为 Wikipedia 页面和 jPOS 文档将为您提供您正在寻找的大量文档,例如“什么是字段 44?”。大约 15 年来,我一直在维护和查看不同组织的 ISO-8583 规范,对于特定于接口的所有数据变化和独特的数据处理,您通常必须直接从他们那里获得特定的供应商规范。通过在 Google 上搜索“ISO-8583 .PDF”也很容易找到一些公开可用的内容。

问题在于大多数规范,尤其是 ISO 组织本身的原始 ISO-8583 规范不包含特定事务的示例。虽然如果您知道数据元素 003 的内容,您应该能够在逻辑上组合许多基本消息类型,以至少识别解析器程序的事务类型(即 310000 = 来自默认的余额查询),但关键是知道所有支持字段以及它们特定于该实体规范的相应字段,这些字段需要真正做出正面或反面,但也可以使用一些常识将它们拼凑在一起。

一旦对 ISO-8583 非常熟悉,您通常可以查看上面没有二进制文件的文本块,并在精神上解析其中的大部分内容,以了解它是什么类型的事务,有时甚至没有位图如果您熟悉该特定变体。

于 2014-10-09T04:54:08.563 回答