跳到主要内容
版本:Next

SSK-串口数据交互文档-1.1.0

版本号编辑者更新时间更新内容
V1.0.0陈浩2024/10/14创建
V1.1.0房杨平2025/07/24数据使用JSON通信,废弃base参数模块, 适用于收款程序1.1.0或更高版本

功能描述

  • 串口初始化:设置串口参数并打开串口与设备建立连接。
  • 数据接收:通过回调接口接收从设备发送的数据。
  • 数据发送:向外部设备发送数据。

SDK下载

接口介绍

注意: 这里所有的接口参数都以JSON的格式,所有的接口请求和响应都应该包含公共参数信息。

公共请求参数信息

参数名类型是否必填描述
apiString接口
requestIdString调用方唯一请求流水号

公共响应参数信息

参数名类型是否必填描述
codeString业务响应码,定义业务处理结果状态(见下方响应码说明)
msgString业务响应描述信息,用于说明响应码对应的具体结果
dataObject数据对象
├─ requestIdString原样返回请求中的流水号,用于请求-响应匹配校验
├─ apiString接口
├─ snString终端SN

公共响应结构

{
"code": "00",
"msg": "SUCCESS",
"data": {
"requestId": "971dda25971dda25971dda25",
"sn": "SI00005958",
"api": "/sale",
"..."
}
}

响应码定义表

常量名类型说明
REQUEST"04"String表示请求已发出(待处理状态)
CONFIRM"03"String请求确认收到(已接收未处理)
PROCESSING"02"String请求正在处理中(异步处理)
FAIL"01"String受理异常(业务失败)
SUCCESS"00"String正常受理(业务成功)

使用说明

初始化串口

serialService = SerialSDKService.getInstance(context);
serialService.setListener(this);
serialService.create("/dev/ttyS2", 9600);
serialService.open();

示例代码

以下是一个完整的示例代码,展示如何使用此 SDK:

public class MainActivity extends AppCompatActivity implements SerialListener  {
private SerialSDKService serialService;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

serialService = SerialSDKService.getInstance(context);
serialService.setListener(this);
serialService.create("/dev/ttyS2", 9600);
serialService.open();

try {
JSONObject jsonObject = new JSONObject();
jsonObject.put("api", "/sale");
jsonObject.put("orderAmount", amount);
jsonObject.put("paymentType", "01");
jsonObject.put("merchantSerialNo", UUID.randomUUID());
jsonObject.put("externalAdditionalData", "external data");
String jsonString = jsonObject.toString();
serialService.sendText(jsonString);
} catch (JSONException e) {
throw new RuntimeException(e);
}
}

@Override
public void onDataReceived(String jsonString) {
try {
Log.i(TAG, "onDataReceived result: " + new JSONObject(jsonString));
JSONObject jsonObject = new JSONObject(jsonString);
String code = jsonObject.optString("code");
String msg = jsonObject.optString("msg");
if(code.equals("00")) {
JSONObject data = jsonObject.optJSONObject("data");
if (data != null) {
String api = data.optString("api");
String requestId = data.optString("requestId");
String sn = data.optString("sn");

Log.d("JSON", "api = " + api);

if (api.equals("/sale") && requestId.equals("requestId")) {
Log.i(TAG, "onDataReceived: Processing /sale return data");
}
}
}else {
Log.e(TAG, "onDataReceived: " + msg );
}
} catch (Exception e) {
e.printStackTrace();
}
}

@Override
public void onError(int errorCode, String errorMessage) {
Log.i(TAG, "onError: " + errorCode + " errorMessage:" + errorMessage);
}

@Override
protected void onDestroy() {
super.onDestroy();
serialService.close();
}
}

接口列表

签到

接口:/sign

请求参数

参数名类型是否必填描述
apiString接口

JAVA代码

JSONObject jsonObject = new JSONObject();
jsonObject.put("api", "/sign");
serialService.sendText(jsonObject.toString());

JSON

{
"api":"/sign",
}

响应参数

参数名类型描述
signStatusString签到状态 YES NO
merchantNoString商户号
defaultAmountString预授权金额
showCardSwipeButtonString是否显示刷卡按钮 SHOW HIDE

示例

{
"code":"00",
"msg":"SUCCESS",
"data":{
"api":"/sign",
"sn":"SI00005958",
"signStatus":"YES",
"merchantNo":"4276000064",
"defaultAmount":"45.00",
"showButton":"SHOW",
}
}

查询签到信息

接口:/query/device/status

请求参数

参数名类型是否必填描述
apiString接口

JAVA代码

JSONObject jsonObject = new JSONObject();
jsonObject.put("api", "/query/device/status");
serialService.sendText(jsonObject.toString());

JSON

{
"api":"/query/device/status",
}

响应参数

参数名类型描述
signStatusString签到状态 YES NO
merchantNoString商户号
defaultAmountString预授权金额
showCardSwipeButtonString是否显示刷卡按钮 SHOW HIDE

示例

{
"code":"00",
"msg":"SUCCESS",
"data":{
"api":"/query/device/status",
"sn":"SI00005958",
"signStatus":"YES",
"merchantNo":"4276000064",
"defaultAmount":"45.00",
"showButton":"SHOW",
}
}

消费

接口: /sale

参数说明

字段名类型是否必传字段说明
apiString接口
paymentTypeString支付类型: 01-银行卡,04-二维码(B 扫 C),05-二维码(C 扫 B) 06-支付卡
paymentSubTypeString支付子类型: 只有 paymentType=06 必传: 12-八达通
merchantSerialNoString商户交易流水号: 需保证全局唯一性
orderAmountString订单金额: 最小值为 0.01,两位小数)
walletTypeString钱包类型: paymentType=05 时选填 :01-微信,02-支付宝,03-云闪付,04-PayNow,05-PayMe
externalAdditionalDataString附加信息

JAVA代码

JSONObject jsonObject = new JSONObject();
jsonObject.put("api", "/sale");
jsonObject.put("paymentType", "01");
jsonObject.put("merchantSerialNo", UUID.randomUUID());
jsonObject.put("externalAdditionalData", "external data");
String jsonString = jsonObject.toString();
serialService.sendText(jsonString);

JSON

 {
"api":"/sale",
"orderAmount":"10.00",
"paymentType":"01",
"merchantSerialNo":"13403a5c-f770-4cdc-aeb2-ac537711e4a6",
"externalAdditionalData":"external data"
}

响应参数

字段名类型字段说明
merchantSerialNoString商户交易流水号
orderNoString系统生成的唯一订单号
transactionNoString交易流水号(全局唯一)
currencyString交易币种(ISO 4217 标准,如:CNY
totalAmountString支付总金额
orderAmountString订单金额
tipAmountString小费金额
payerFee String交易手续费金额
transactionStatusString交易状态,参考附录枚举值
paymentWayString支付方式,参考附录枚举值
paymentTypeString支付类型,参考附录枚举值
paymentSubTypeString支付子类型,参考附录枚举值
cardTypeString卡类型,参考附录枚举值
cardFlagString卡标识,参考附录枚举值
cardBrandString卡组织,参考附录枚举值
cardNoMaskString脱敏卡号(如:6214*****5678
posBatchNoStringPOS 终端批次号
posSerialNoStringPOS 终端流水号
retrievalNoString检索参考号
authCodeString交易授权码(联机交易返回)
transactionTimeString交易发起时间
completionTimeString交易完成时间

示例

{
"code":"00",
"msg":"SUCCESS",
"data": {
"api":"/sale",
"sn":"SI00005958",
"merchantSerialNo":"5507f119-64ef-47d4-b49d-77ec7df4a471",
"orderNo":"10820250724000011304",
"transactionNo":"TK7D6A93779100000843849731883008",
"currency":"HKD",
"totalAmount":"10.00",
"orderAmount":"10.00",
"tipAmount":"0.00",
"payerFee":"0.00",
"transactionStatus":"00",
"paymentWay":"01",
"paymentType":"01",
"cardBrand":"01",
"cardNoMask":"433668******3008",
"posBatchNo":"250724",
"posSerialNo":"000011",
"retrievalNo":"520511288288",
"authCode":"911950",
"transactionTime":"2025-07-24T11:38:28.000+00:00",
"completionTime":"2025-07-24T11:38:29.000+00:00"
}
}

消费撤销

接口: /sale/revoke

请求参数说明
参数名类型是否必填描述
apiString接口
originalTransactionNoString原预授权交易流水号
merchantSerialNoString商户交易流水号(需保证全局唯一性)

JAVA代码

JSONObject jsonObject = new JSONObject();
jsonObject.put("api", "/sale/revoke");
jsonObject.put("merchantSerialNo", UUID.randomUUID());
jsonObject.put("originalTransactionNo", transactionNo);
String jsonString = jsonObject.toString();
serialService.sendText(jsonString);

JSON

{
"api":"/sale/revoke",
"merchantSerialNo":"690a2439-1753-43ea-828c-264b78438e28",
"originalTransactionNo":"TKDC694BEF4500000843721092825088"
}

响应参数说明

字段名类型描述
transactionNoString交易流水号,本次撤销交易生成的流水号
originalTransactionNoString需要撤销的原交易流水号
merchantSerialNoString原交易对应的商户流水号
orderNoString订单号
transactionStatusString交易状态,参考附录枚举值
orderAmountString原交易订单金额
paymentTypeString原交支付类型
paymentSubTypeString原交支付子类型
transactionTimeString交易发起时间

示例

{
"code":"00",
"msg":"SUCCESS",
"data":{
"api":"/sale/revoke",
"sn":"SI00005958",
"transactionNo":"TK9AE44D4B5900000843681978023936",
"originalTransactionNo":"TKC696B779F200000843681799766016",
"merchantSerialNo":"6b30ab46-8084-4fcc-b31a-364ef46376d1",
"orderNo":"10820250725000011320",
"transactionStatus":"00",
"orderAmount":"10.00",
"paymentType":"01",
"paymentSubType":"",
"transactionTime":"2025-07-25T03:26:18.000+00:00"
}
}

退款

接口: /refund

请求参数说明
参数名类型是否必填描述
apiString接口
originalTransactionNoString原预授权交易流水号
merchantSerialNoString商户交易流水号(需保证全局唯一性)
refundOrderAmountString退款金额

JAVA代码

JSONObject jsonObject = new JSONObject();
jsonObject.put("api", "/refund");
jsonObject.put("merchantSerialNo", UUID.randomUUID());
jsonObject.put("originalTransactionNo", transactionNo);
jsonObject.put("refundOrderAmount", "1.00");
String jsonString = jsonObject.toString();
serialService.sendText(jsonString);

JSON

{
"api":"/refund",
"merchantSerialNo":"690a2439-1753-43ea-828c-264b78438e28",
"originalTransactionNo":"TKDC694BEF4500000843721092825088",
"refundOrderAmount":"1.00"
}

响应参数说明

字段名类型描述
transactionNoString交易流水号,本次撤销交易生成的流水号
originalTransactionNoString需要撤销的原交易流水号
merchantSerialNoString原交易对应的商户流水号
orderNoString订单号
transactionStatusString交易状态,参考附录枚举值
orderAmountString原交易订单金额
paymentTypeString原交支付类型
paymentSubTypeString原交支付子类型
transactionTimeString交易发起时间

示例

{
"code":"00",
"msg":"SUCCESS",
"data":{
"api":"/refund",
"sn":"SI00005958",
"transactionNo":"TK9AE44D4B5900000843681978023936",
"originalTransactionNo":"TKC696B779F200000843681799766016",
"merchantSerialNo":"6b30ab46-8084-4fcc-b31a-364ef46376d1",
"orderNo":"10820250725000011320",
"transactionStatus":"00",
"orderAmount":"10.00",
"paymentType":"01",
"paymentSubType":"",
"transactionTime":"2025-07-25T03:26:18.000+00:00"
}
}

预授权

接口: /auth

请求参数说明
参数名类型是否必填描述
apiString接口
merchantSerialNoString商户交易流水号(需保证全局唯一性)
orderAmountString订单金额 (最小值为0.01,单位:元,两位小数)
externalAdditionalDataString附加信息

JAVA代码

JSONObject jsonObject = new JSONObject();
jsonObject.put("api", "/auth");
jsonObject.put("merchantSerialNo", UUID.randomUUID());
jsonObject.put("orderAmount", amount);
jsonObject.put("externalAdditionalData", "external data");
String jsonString = jsonObject.toString();
serialService.sendText(jsonString);

JSON

{
"api":"/auth",
"merchantSerialNo":"e29fbf56-5947-4270-8ddb-695b2c815b13",
"orderAmount":"10.00",
"externalAdditionalData":"external data"
}

响应参数说明

字段名类型字段说明
merchantSerialNoString商户交易流水号
orderNoString系统生成的唯一订单号
transactionNoString交易流水号(全局唯一)
currencyString交易币种(ISO 4217 标准,如:CNY
totalAmountString支付总金额
orderAmountString订单金额
tipAmountString小费金额
payerFee String交易手续费金额
transactionStatusString交易状态,参考附录枚举值
paymentWayString支付方式,参考附录枚举值
paymentTypeString支付类型,参考附录枚举值
paymentSubTypeString支付子类型,参考附录枚举值
cardTypeString卡类型,参考附录枚举值
cardFlagString卡标识,参考附录枚举值
cardBrandString卡组织,参考附录枚举值
cardNoMaskString脱敏卡号(如:6214*****5678
posBatchNoStringPOS 终端批次号
posSerialNoStringPOS 终端流水号
retrievalNoString检索参考号
authCodeString交易授权码(联机交易返回)
transactionTimeString交易发起时间
completionTimeString交易完成时间

示例

{
"code":"00",
"msg":"SUCCESS",
"data":{
"api":"/auth",
"sn":"SI00005958",
"merchantSerialNo":"282ab07c-019c-48a9-9836-a0425ac111ad",
"orderNo":"10820250724000011306",
"transactionNo":"TK76F797295000000843958316105728",
"currency":"HKD",
"totalAmount":"10.00",
"orderAmount":"10.00",
"tipAmount":"0.00",
"payerFee":"0.00",
"transactionStatus":"00",
"paymentWay":"01",
"paymentType":"01",
"paymentSubType":"03",
"cardBrand":"01",
"cardNoMask":"433668******3008",
"posBatchNo":"250724",
"posSerialNo":"000013",
"retrievalNo":"520512288295",
"authCode":"709787",
"transactionTime":"2025-07-24T12:19:01.000+00:00",
"completionTime":"2025-07-24T12:19:02.000+00:00"
}
}

预授权撤销

接口: /auth/revoke

请求参数说明
参数名类型是否必填描述
apiString接口
originalTransactionNoString原预授权交易流水号
merchantSerialNoString商户交易流水号(需保证全局唯一性)

JAVA代码

JSONObject jsonObject = new JSONObject();
jsonObject.put("api", "/auth/revoke");
jsonObject.put("merchantSerialNo", UUID.randomUUID());
jsonObject.put("originalTransactionNo", transactionNo);
String jsonString = jsonObject.toString();
serialService.sendText(jsonString);

JSON

{
"api":"/auth/revoke",
"merchantSerialNo":"690a2439-1753-43ea-828c-264b78438e28",
"originalTransactionNo":"TKDC694BEF4500000843721092825088"
}

响应参数说明

字段名类型描述
transactionNoString交易流水号,本次撤销交易生成的流水号
originalTransactionNoString需要撤销的原交易流水号
merchantSerialNoString原交易对应的商户流水号
orderNoString订单号
transactionStatusString交易状态,参考附录枚举值
orderAmountString原交易订单金额
paymentTypeString原交支付类型
paymentSubTypeString原交支付子类型
transactionTimeString交易发起时间

示例

{
"code":"00",
"msg":"SUCCESS",
"data":{
"api":"/sale/revoke",
"sn":"SI00005958",
"transactionNo":"TK9AE44D4B5900000843681978023936",
"originalTransactionNo":"TKC696B779F200000843681799766016",
"merchantSerialNo":"6b30ab46-8084-4fcc-b31a-364ef46376d1",
"orderNo":"10820250725000011320",
"transactionStatus":"00",
"orderAmount":"10.00",
"paymentType":"01",
"paymentSubType":"",
"transactionTime":"2025-07-25T03:26:18.000+00:00"
}
}

交易查询

接口: /query/transaction

请求参数说明
参数名类型是否必填描述
apiString接口
originalTransactionNoString原交易流水号
merchantSerialNoString原商户交易流水号

JAVA代码

JSONObject jsonObject = new JSONObject();
jsonObject.put("api", "/query/transaction");
jsonObject.put("originalTransactionNo", "e29fbf56-5947-4270-8ddb-695b2c815b13");
String jsonString = jsonObject.toString();
serialService.sendText(jsonString);

JSON

{
"api":"/query/transaction",
"originalTransactionNo":"e29fbf56-5947-4270-8ddb-695b2c815b13",
}

响应参数说明

字段名类型字段说明
merchantSerialNoString商户交易流水号
orderNoString系统生成的唯一订单号
transactionNoString交易流水号(全局唯一)
currencyString交易币种(ISO 4217 标准,如:CNY
totalAmountString支付总金额
orderAmountString订单金额
tipAmountString小费金额
payerFee String交易手续费金额
transactionStatusString交易状态,参考附录枚举值
paymentWayString支付方式,参考附录枚举值
paymentTypeString支付类型,参考附录枚举值
paymentSubTypeString支付子类型,参考附录枚举值
cardTypeString卡类型,参考附录枚举值
cardFlagString卡标识,参考附录枚举值
cardBrandString卡组织,参考附录枚举值
cardNoMaskString脱敏卡号(如:6214*****5678
posBatchNoStringPOS 终端批次号
posSerialNoStringPOS 终端流水号
retrievalNoString检索参考号
authCodeString交易授权码(联机交易返回)
transactionTimeString交易发起时间
completionTimeString交易完成时间

示例

{
"code":"00",
"msg":"SUCCESS",
"data":{
"api":"/query/transaction",
"sn":"SI00005958",
"merchantSerialNo":"282ab07c-019c-48a9-9836-a0425ac111ad",
"orderNo":"10820250724000011306",
"transactionNo":"TK76F797295000000843958316105728",
"currency":"HKD",
"totalAmount":"10.00",
"orderAmount":"10.00",
"tipAmount":"0.00",
"payerFee":"0.00",
"transactionStatus":"00",
"paymentWay":"01",
"paymentType":"01",
"paymentSubType":"03",
"cardBrand":"01",
"cardNoMask":"433668******3008",
"posBatchNo":"250724",
"posSerialNo":"000013",
"retrievalNo":"520512288295",
"authCode":"709787",
"transactionTime":"2025-07-24T12:19:01.000+00:00",
"completionTime":"2025-07-24T12:19:02.000+00:00"
}
}

设置营业

接口:/open/business

请求参数

参数名类型是否必填描述
apiString接口

JAVA代码

JSONObject jsonObject = new JSONObject();
jsonObject.put("api", "/open/business");
serialService.sendText(jsonObject.toString());

JSON

{
"api":"/open/business",
}

响应参数

参数名类型描述
businessStatusString营业状态 OPEN CLOSE

示例

{
"code":"00",
"msg":"SUCCESS",
"data":{
"api":"/open/business",
"sn":"3080004570",
"businessStatus":"OPEN",
}
}

设置停业

接口:/stop/business

请求参数

参数名类型是否必填描述
apiString接口

JAVA代码

JSONObject jsonObject = new JSONObject();
jsonObject.put("api", "/stop/business");
serialService.sendText(jsonObject.toString());

JSON

{
"api":"/stop/business",
}

响应参数

参数名类型描述
businessStatusString营业状态 OPEN CLOSE

示例

{
"code":"00",
"msg":"SUCCESS",
"data":{
"api":"/stop/business",
"sn":"3080004570",
"businessStatus":"CLOSE",
}
}

查询营业状态

接口:/query/business/status

请求参数

参数名类型是否必填描述
apiString接口

JAVA代码

JSONObject jsonObject = new JSONObject();
jsonObject.put("api", "/query/business/status");
serialService.sendText(jsonObject.toString());

JSON

{
"api":"/query/business/status",
}

响应参数

参数名类型描述
businessStatusString营业状态 OPEN CLOSE

示例

{
"code":"00",
"msg":"SUCCESS",
"data":{
"api":"/query/business/status",
"sn":"3080004570",
"businessStatus":"OPEN",
}
}

完成交易

接口:/finish/transaction

请求参数

参数名类型是否必填描述
apiString接口

JAVA代码

 jsonObject.put("api", "/finish/transaction");
String jsonString = jsonObject.toString();
serialService.sendText(jsonString);

JSON

{
"api":"/finish/transaction",
}

响应参数说明

公共返回参数

示例

{
"code":"00",
"msg":"SUCCESS",
"data":{
"api":"/finish/transaction",
"sn":"3080004570",
"businessStatus":"OPEN",
}
}

取消交易

接口:/cancel/transaction

请求参数

参数名类型是否必填描述
apiString接口

JAVA代码

JSONObject jsonObject = new JSONObject();
jsonObject.put("api", "/cancel/transaction");
serialService.sendText(jsonObject.toString());

JSON

{
"api":"/cancel/transaction",
}

响应参数说明

公共返回参数

示例

{
"code":"00",
"msg":"SUCCESS",
"data":{
"api":"/cancel/transaction",
"sn":"3080004570",
}
}