JPOS ISO 8583 解析问题

2024-02-11

我使用 ISO 8583 v87 创建消息!但是当解析它时,我得到不同的参数值。问题是什么?是为了Hex.encodeHexString

import org.apache.commons.codec.binary.Hex;
import org.jpos.iso.ISOException;
import org.jpos.iso.ISOMsg;

public class ParseISOMessage { 
static org.jpos.iso.packager.ISO87APackager packager;

public static void main(String[] args) throws IOException, ISOException {

    String data  = createMSG();

    // Create Packager based on XML that contain DE type
    packager = new org.jpos.iso.packager.ISO87APackager();

    // Create ISO Message
    ISOMsg isoMsg = new ISOMsg();
    isoMsg.setPackager(packager);       

    isoMsg.unpack(data.getBytes());



    // print the DE list
    logISOMsg(isoMsg);
}

private static void logISOMsg(ISOMsg msg) {
    System.out.println("----ISO MESSAGE-----");
    try {
        System.out.println("  MTI : " + msg.getMTI());
        for (int i=1;i<=msg.getMaxField();i++) {
            if (msg.hasField(i)) {
                System.out.println("    Field-"+i+" ("+packager.getFieldPackager(i).getDescription()+") : "+msg.getString(i));
            }
        }
    } catch (ISOException e) {
        e.printStackTrace();
    } finally {
        System.out.println("--------------------");
    }

}

private static String createMSG() {
    try{
        ISO87BPackager packager = new ISO87BPackager();
        ISOMsg isoMsg = new ISOMsg();
        isoMsg.setPackager(packager);
        isoMsg.setMTI("0200");
        isoMsg.set(2, "1234567890123456");
        isoMsg.set(3, "000000");
        isoMsg.set(4,"000000001234");
        isoMsg.set(7, "0413135553");
        isoMsg.set(11, "000091");
        isoMsg.set(12, "135553");
        isoMsg.set(13, "0413");
        isoMsg.set(25, "14");
        isoMsg.set(32, "5816720610");
        isoMsg.set(35, "1234567890123456=9505146000000000000");
        isoMsg.set(37, "000000000000");
        isoMsg.set(41,"55555555");
        isoMsg.set(49,"123");
        isoMsg.set(52,"1A2B3C4D5E6F7012");
        isoMsg.set(64,"ABCDEF0123456789");
        byte[] b = isoMsg.pack();
        System.out.println("**"+Hex.encodeHexString(b)+"**");
        return Hex.encodeHexString(b);
    }
    catch(Exception ex) {
        ex.printStackTrace();
        return "";
    }
}
}

例如,我设置PIN DATA as ABCDEF0123456789,但是当解析创建的消息时,PIN DATA is 0353535353535353.


当你打电话时问题很简单data.getBytes()数据实际上是编码的十六进制数据,而不是创建的数据isoMsg.pack() .

Changes isoMsg.unpack(data.getBytes())

to

    final byte[] bytes = new Hex().decode(data.getBytes());
    isoMsg.unpack(bytes);

你也应该使用相同的packager打包和拆包


public class ParseISOMessage {

    private static org.jpos.iso.packager.ISO87APackager packager = new org.jpos.iso.packager.ISO87APackager();

    public static void main(String[] args) throws IOException, ISOException, DecoderException {
        String data = createMSG();
        // Create ISO Message
        ISOMsg isoMsg = new ISOMsg();
        isoMsg.setPackager(packager);
        final byte[] bytes = new Hex().decode(data.getBytes());
        isoMsg.unpack(bytes);
    ...
    private static String createMSG() {
        try {
//            ISO87BPackager packager = new ISO87BPackager(); // delete this line otherwise it cannot unpack
            ISOMsg isoMsg = new ISOMsg();
            isoMsg.setPackager(packager);
            isoMsg.setMTI("0200");
           ...//same
            isoMsg.set(64, "ABCDEF0123456789");
            byte[] b = isoMsg.pack();
            System.out.println("**" + new String(Hex.encodeHex(b, false)) + "**"); // make the result uppercase.
            return Hex.encodeHexString(b);
        } catch (Exception ex) {
            ex.printStackTrace();
            return "";
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPOS ISO 8583 解析问题 的相关文章

  • C# 与 JAVA 接口实例

    我不知道该如何回答我的问题 它是关于Android可以实例化接口的 我正在尝试用 C 来做 现在我非常确定 Java 和 C 的规则是不能创建抽象和接口的实例 但我很想知道Android是如何做到这一点的 在 Android 中你可以这样做
  • 使用 BlobOutputStream 在 Azure 中上传 blob

    我正在尝试直接从流上传 blob 因为我不知道我决定尝试的流的长度这个答案 https stackoverflow com a 24621538 3695939 这不起作用 即使它从流中读取并且不会抛出任何异常 内容也不会上传到我的容器 我
  • 将 allMatch、noneMatch 和 anyMatch 合并到单个流上

    我想要以下逻辑 我知道它不起作用 因为它多次消耗流 但我不知道如何实现它 Stream
  • 相当于 java PBKDF2WithHmacSHA1 的 Python

    我的任务是构建一个 API 的使用者 该 API 需要带有 UNIX 时间种子值的加密令牌 我看到的示例是使用我不熟悉的 Java 实现的 在阅读文档和其他堆栈文章后一直无法找到解决方案 使用javax crypto SecretKey j
  • 我需要在 Java 9 中使用哪个模块才能使用 JPA?

    我正在使用一个需要 JPA 的项目测试 Java 9 javax persistence 类 当我添加module info java并声明我的模块 下的所有类javax persistece包变得不可用 我搜索了很多 但找不到在 Java
  • 从 Eclipse 导出后,WAR 文件中缺少一些必要的库 - 为什么?

    我接手了一个大学的项目 其中包含一些 Web 服务 通过将项目导出为 WAR 文件 一些库包含在文件中 例如 Axis2 而另一些则不包含 hibernate JDBC 驱动程序 另外 添加到类路径中的 jar 尚未导出 所有库都位于硬盘驱
  • Eclipse 与 IntelliJ 热部署

    我的应用程序配置 Tomcat 8 Spring Spring MVC Hibernate 在 Eclipse 中 我创建了 Tomcat 服务器 并将我的应用程序添加到资源中 JSP JS CSS 和 JAVA 类热部署的工作原理就是这样
  • 使用起始字符串和结束字符串从长字符串中提取子字符串?

    我有这个长字符串 它是一个长的连续字符串 Home address H NO 12 SECTOR 12 GAUTAM BUDH NAGAR NOIDA 121212 UTTAR PRADESH INDIA 911112121212 Last
  • Java:等于和==

    让我们看看我们有 2 个对用户定义类实例的引用 即 Java 中的 a 和 b 会不会有一种情况 a b 但 a equals b 返回 false 当然 实施 equals 完全取决于班级 所以我可以写 class Foo public
  • Mockito mockStatic 无法解析符号

    我正在使用 Spring Boot 并在单元测试中 我试图模拟Files delete myFile toPath method 为此 我尝试使用Mockito mockStatic 方法 但是当我尝试使用它时 我的 IDE Intelli
  • python 中的子进程调用以使用 JAVA_OPTS 调用 java jar 文件

    示例代码 import subprocess subprocess call java jar temp jar 如何在上面的命令中指定JAVA OPTS 当我使用上述命令时 我收到 java lang OutOfMemoryError 无
  • Java:如果数组大小未知,如何初始化?

    我要求用户输入 1 到 100 之间的一些数字并将它们分配到一个数组中 数组大小未初始化 因为它取决于用户输入数字的次数 我应该如何分配数组长度 如果用户输入 5 6 7 8 9 5 个数字 则 int list becomes int l
  • Netty Nio java 中的通信

    我想在 Netty nio 中创建一个具有两个客户端和一个服务器的通信系统 更具体地说 首先 我希望当两个客户端与服务器连接时从服务器发送消息 然后能够在两个客户端之间交换数据 我正在使用本示例提供的代码 https github com
  • Java MYSQL/JDBC 查询从缓存的连接返回过时的数据

    我一直在 Stackoverflow 中寻找答案 但似乎找不到不涉及 Hibernate 或其他数据库包装器的答案 我直接通过 Tomcat 6 Java EE 应用程序中的 MYSQL 5 18 JDBC 驱动程序使用 JDBC 我正在缓
  • 为什么 CompletableFuture 的 thenAccept() 不在主线程上运行

    我在 CompletableFuture 的 SupplyAsync 中处理长时间运行的操作 并将结果放入 thenAccept 中 有时 thenAccept 在主线程上执行 但有时它在工作线程上运行 但我只想在主线程上运行 thenAc
  • Java 中的连接路径

    In Python我可以连接两条路径os path join os path join foo bar gt foo bar 我正在尝试在 Java 中实现相同的目标 而不用担心是否OS is Unix Solaris or Windows
  • Zookeeper 未启动,nohup 错误

    我已经下载了zookeeper 3 4 5 tar gz 解压后我将conf zoo cfg写为 tickTime 2000 dataDir var zookeeper clientPort 2181 现在我尝试通过 bin zkServe
  • Spring Data MongoDB 和批量更新

    我正在使用 Spring Data MongoDB 并且想要执行批量更新 就像此处描述的那样 http docs mongodb org manual reference method Bulk find update Bulk find
  • java - 简单计算在多线程中比在单线程中花费更长的时间

    我试图了解如何利用多线程 我写了一个简单的程序来增加i 比方说 使用两种方式 400 000 次 单线程方式 0 到 400 000 和多线程方式 在我的例子中 4 次 0 到 100 000 线程数等于Runtime getRuntime
  • Bipush 在 JVM 中如何工作?

    我知道 iload 接受整数 1 到 5 但是如何使用 bipush 指令扩展到更高的数字 特定整数如何与字节码一起存储 有几种不同的指令可用于推送整数常量 最小的是iconst 指令 这些只是一个字节 因为该值是在操作码本身中编码的 ic

随机推荐