首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务器端消息IS08583的十六进制格式

服务器端消息IS08583的十六进制格式
EN

Stack Overflow用户
提问于 2022-08-25 15:08:08
回答 1查看 77关注 0票数 0

实际上,我正在处理iso 8583消息,以及java中的库j8583。

我创建了一个echo (0800)消息来探测与服务器的连接,当打印消息时,消息看起来很好,但是在服务器端,消息看起来像十六进制编码,如下所示:

服务器端的devs告诉我消息的格式错误,正确的消息如下:

我看到正确的消息格式是清晰的,像上面的图像一样。

来自xml字段的工厂:

代码语言:javascript
复制
this.messageFactory = ConfigParser.createFromClasspathConfig("j8583-config.xml");

Iso消息设置二进制标志

代码语言:javascript
复制
req.setBinaryFields(true);
req.setBinaryHeader(true);

XML配置:

代码语言:javascript
复制
    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE j8583-config PUBLIC "-//J8583//DTD CONFIG 1.0//EN" "http://j8583.sourceforge.net/j8583.dtd">
<j8583-config>

        <!-- These are the ISO headers to be prepended to the message types specified -->
        <header type="0800">6000050000</header>
        <header type="0810">6000050000</header>

        <template type="0800">
                <field num="3" type="NUMERIC" length="6" />
                <field num="7" type="DATE10" />
                <field num="11" type="NUMERIC" length="6" />
                <field num="24" type="NUMERIC" length="3" />
                <field num="41" type="ALPHA" length="8" />
                <field num="42" type="ALPHA" length="15" />
                <field num="60" type="LLLLVAR" length="" />
        </template>


        <parse type="0800">
                <field num="3" type="NUMERIC" length="6" />
                <field num="7" type="DATE10" />
                <field num="11" type="NUMERIC" length="6" />
                <field num="24" type="NUMERIC" length="3" />
                <field num="41" type="ALPHA" length="8" />
                <field num="42" type="ALPHA" length="15" />
                <field num="60" type="LLLLVAR" length="" />
        </parse>


</j8583-config>

IsoMessage构建:

代码语言:javascript
复制
        final IsoMessage req = this.messageFactory.newMessage(NET_INFO_REQUEST.getValue());

        req.setValue(PROCESSING_CODE, ECHO.getValue(), IsoType.NUMERIC, 6);
        req.setValue(TRANSMISSION_DATE_TIME, FormatUtils.formatDate10GMT0(new Date()), IsoType.DATE10, 0);    
        req.setValue(SYSTEM_TRACE_AUDIT_NO, leftPad(simpleTraceGenerator.nextTrace(), 6), IsoType.NUMERIC, 6);    
        req.setValue(INTERNATIONAL_NETWORK_ID, command.VISA.getCode(), IsoType.NUMERIC, 4);
        req.setValue(TERMINAL_ID, "72024092", IsoType.ALPHA, 8);    
        req.setValue(CLIENT_CODE, "03659307       ", IsoType.ALPHA, 15);    
        req.setValue(SOFTWARE_VERSION, "OPv1", IsoType.LLLLVAR, 0);
        req.setBinary(fale);

能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-28 18:12:42

似乎你正在产生的信息有不止一个问题:

  1. 您将字段和头设置为二进制,但是位图仍然是用ASCII编码的。您可能应该调用setUseBinaryMessages,它将所有消息标志设置为二进制(位图、标题、字段)。如果没有,则需要以编程方式设置二进制位图(这有另一种方法)。
  2. 为0800提供了消息头,但从另一方期望的十六进制数据头上看,它似乎有很大的不同(可能是二进制代码,BCD编码的),或者它们根本不需要头文件。如果您需要二进制标头,请在配置中指定它(二进制标头内容应该指定为十六进制,例如,programatically.
  3. For ),或者您可以将其设置为BCD编码字段,只需使用数字字段;当使用二进制格式时,值将被BCD编码。日期字段也是如此。L_VAR字段被编码为文本;如果在这些字段中需要二进制数据,则使用L_BIN。如果您的消息是ASCII编码的,但是您需要一个带有BCD编码的长度头的L_BIN字段,否则就会根据消息的编码来选择长度标头编码(BCD表示二进制消息,否则是

)。

希望这能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73489902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档