iso8583 - 我的 jpos ISO8583 实现一直在消息长度前加上“1”
问题描述
我的 ISO JPOS 客户端实现正确打印消息长度输出,但是当我执行 tcpdump 时,我看到消息长度以“1”为前缀。所以 tcpdump 将消息头显示为"10000431804003001000000000084946520200922160158801"
而不是"0000431804003001000000000084946520200922160158801"
知道可能是什么问题。
下面是我的客户端打印出的消息长度和解压 ISO:
0000431804003001000000000084946520200922160158801
<log realm="post-channel/xx.xx.xx.x:xxxx" at="Tue Sep 22 16:01:58 WAT 2020.579" lifespan="1ms">
<send>
<isomsg direction="outgoing">
<!-- org.jpos.iso.packager.GenericPackager[deploy/cfg/customizedPackager.xml] -->
<header>303030303433</header>
<field id="0" value="1804"/>
<field id="11" value="849465"/>
<field id="12" value="20200922160158"/>
<field id="24" value="801"/>
</isomsg>
</send>
</log>
我的代码实现如下:
Date currDate = new Date();
SimpleDateFormat lda = new SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault());
String d = lda.format(currDate);
QMUX mux1 = (QMUX) NameRegistrar.getIfExists("mux.pesa-link-mux");
LoggingUtil.logDebugInfo("SIGNON MUX: " + mux1.getName());
Random randomGenerator = new Random();
int randomInt = randomGenerator.nextInt(1000000);
String formatedInt;
formatedInt = String.format("%06d", randomInt);
ISOMsg m = new ISOMsg();
//m.setHeader("000043".getBytes());
ISOPackager p = new GenericPackager("/usr/app/customized.xml");
byte[] b = new byte[1];
m.setPackager(p);
m.setMTI("1804");
m.set(11, formatedInt);
m.set(12, d);
m.set(24, "801");
byte[] data = m.pack();
short messageLength = (short) data.length;
String msglen = String.format("%6s", String.valueOf(messageLength)).replace(' ', '0');
String message = msglen + new String(data);
LoggingUtil.logDebugInfo(":: message length :: " + message + " :: len: " + msglen);
ISOMsg resp = mux1.request(m, 30 * 1000);
频道配置在这里
<channel-adaptor name="pd-channel-adaptor" class="org.jpos.q2.iso.ChannelAdaptor" logger="Q2">
<channel class="org.jpos.iso.channel.PostChannel" type="client" connect="yes" logger="Q2"
realm="post-channel" packager="org.jpos.iso.packager.GenericPackager">
<property name="packager-config" value="deploy/cfg/customized.xml" />
<property name="host" value="1111.11.11.11" />
<property name="port" value="3322" />
</channel>
<in>pd_link_send</in>
<out>pd_link_receive</out>
<reconnect-delay>1000</reconnect-delay>
<keep-alive>yes</keep-alive>
</channel-adaptor>
解决方案
您的服务器似乎期望长度为 6 个 ASCII 数字,因此您需要使用ASCIIChannel
属性length-digits
设置为6
<channel-adaptor name="pd-channel-adaptor" class="org.jpos.q2.iso.ChannelAdaptor" logger="Q2">
<channel class="org.jpos.iso.channel.ASCIIChannel" type="client" connect="yes" logger="Q2"
realm="post-channel" packager="org.jpos.iso.packager.GenericPackager">
<property name="packager-config" value="deploy/cfg/customized.xml" />
<property name="host" value="1111.11.11.11" />
<property name="port" value="3322" />
<property name="length-digits" value="6"/>
</channel>
<in>pd_link_send</in>
<out>pd_link_receive</out>
<reconnect-delay>1000</reconnect-delay>
<keep-alive>yes</keep-alive>
</channel-adaptor>
而且您不必将长度放在标题中。
推荐阅读
- swift - 显示动画时在后台加载场景
- android - 何时/如何创建/销毁房间数据库
- excel - vba 代码耗时过长(偏移)在 excel 中运行的代码以填充工作表的行列
- python - IndexError,Python 绘图
- c# - EPPlus Excel 相关日期上次修改
- replace - 修复文本文件中多余的空格
- python - 从另一个数据框中删除具有相同值的行
- mongodb - 仅安装 Mongo 客户端/Shell - 在 Windows 上不安装 MongoDB
- python - 芹菜嵌套和弦未按正确顺序调用回调
- python - 如何创建熊猫数据框以在 Python 中导出此字典?