java - 如何使用 JSSC 通过串行端口连接传递多种类型的数据?
问题描述
我的任务是创建一个可以在 Ingenico 卡终端上启动付款的程序。为企业创建自定义 POS 系统是大型项目的一小部分。但我面临着各种各样的障碍,使这个问题变得困难。
我没有使用串口编程的经验。我在网上找到的文档只描述了写入字符串或字节。这些例子很简单,但没有告诉我足够的信息。
我正在使用的设备没有文档。Ingenico 不提供此信息。我能够弄清楚读卡器期望启动支付的数据的唯一方法是通过 github 上这个已经完成的项目。链接在这里
https://github.com/Ousret/pyTeliumManager
这个实现是在 python 中,并且使用基于 linux 的系统。我们将使用它,但我们需要一个更自定义的实现,因此我在 java 中这样做。
我已经在这个项目中查看并查看了数据的结构,然后通过串行端口连接发送,但在这一点上,我因为无知而错过了它。我对python一点也不熟悉,我唯一知道的是发起付款的数据如下......
交易金额的浮动
三个字符串,一个用于货币类型(美元、欧元等)付款方式(卡)和结帐 ID(可以是任何东西,这是用于个人记账)
和三个布尔值,一个如果你想等待交易被批准,一个如果你想银行验证,一个如果你想保存收款人付款信息。(我已将所有这些设置为 false,因为此时它们不是必需的。我只是想在构建界面之前编写一些作为概念证明的东西)
现在,这是我的一些测试代码,其中大部分与我通过研究在互联网上找到的相似。
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实现是如何做到的。如果有人能解释这些数据是如何打包和发送的,那就太好了。
解决方案
推荐阅读
- r - 安装 R 包 PearsonDS 给出了意外的令牌错误
- python - Bokeh 2.0 中的简单日期范围滑块
- swift - “前提条件失败:类型检查失败:104,预期图像,得到 _ColorInvertEffect”,在 iOS 13.4 上的 SwiftUI 中使用 .colorInvert()
- haskell - 在 Haskell 中实现 Lambda 演算的模式匹配
- if-statement - 简单的编辑检查以通过电子邮件发送不工作的人
- python - python中的多级依赖注入
- python - Pandas drop_duplicates only possible after to_csv and read_csv
- r - 组合多列/堆叠多列
- java - ConnectyCube 检索对话框列表返回一个空列表
- sql - SQL 数据未在站点上显示两列