首页 > 解决方案 > 如何使用 JSSC 通过串行端口连接传递多种类型的数据?

问题描述

我的任务是创建一个可以在 Ingenico 卡终端上启动付款的程序。为企业创建自定义 POS 系统是大型项目的一小部分。但我面临着各种各样的障碍,使这个问题变得困难。

  1. 我没有使用串口编程的经验。我在网上找到的文档只描述了写入字符串或字节。这些例子很简单,但没有告诉我足够的信息。

  2. 我正在使用的设备没有文档。Ingenico 不提供此信息。我能够弄清楚读卡器期望启动支付的数据的唯一方法是通过 github 上这个已经完成的项目。链接在这里

https://github.com/Ousret/pyTeliumManager

这个实现是在 python 中,并且使用基于 linux 的系统。我们将使用它,但我们需要一个更自定义的实现,因此我在 java 中这样做。

我已经在这个项目中查看并查看了数据的结构,然后通过串行端口连接发送,但在这一点上,我因为无知而错过了它。我对python一点也不熟悉,我唯一知道的是发起付款的数据如下......

现在,这是我的一些测试代码,其中大部分与我通过研究在互联网上找到的相似。

    public static void main(String[] args) {
    SerialPort cerealPort = new SerialPort("COM9");

        try {


            System.out.println("Port opened: " + cerealPort.openPort());
            System.out.println("reading bytes " + cerealPort.readBytes());
            System.out.println("name " + cerealPort.getPortName());
            cerealPort.writeString("bing bong");



            //cerealPort.setEventsMask(256);


            System.out.println("Params setted: " + cerealPort.setParams(9600, 8, 1, 0));
            System.out.println("\"Hello World!!!\" successfully writen to port: " + cerealPort.writeBytes("Hello World!!!".getBytes()));

            System.out.println("Port closed: " + cerealPort.closePort());
        }
        catch (SerialPortException ex){
            System.out.println(ex);
        }
    }

} 

这段代码实际上并没有做任何事情,只是为了测试与设备的通信是否正常工作。请注意,运行此代码时,终端上没有任何反应。

现在我有了一个名为 TelliumData 的类,它包含我描述的数据成员。

public class TelliumData {
float amount;
String paymentMode = "debit";
String currency = "USD";
String checkoutId = "1";
boolean transactionWait = false; // waits for trans to end. Set to True if you need valid transaction status otherwise, set it to False.
boolean collectPaymentInfo = false;
boolean forceBankVerify = false;

}

我不知道如何使用 JSSC 中的函数将此信息传递给终端

我的问题的核心是,如何通过串行端口发送这些数据?

我曾尝试使用 .writebytes 和 .writeint 一个一个地发送所有数据,但这没有任何作用,也不会触发读卡器上的支付初始化。

我也不明白python实现是如何做到的。如果有人能解释这些数据是如何打包和发送的,那就太好了。

标签: javaserial-portpoint-of-salejssc

解决方案


推荐阅读