You are on page 1of 83

中国建设银行智能 POS 终端接口规范

中国建设银行

建行智能 POS 终端接口规范


版本 V1.6.6( 2020/3/30)
中国建设银行智能 POS 终端接口规范

目录
0. 术语及定义............................................................................................................................... 3
 服务(Service) ............................................................................................................... 3
 Android 接口定义语言(AIDL) ................................................................................... 3
 应用程序无响应(ANR) .............................................................................................. 3
 Action ................................................................................................................................ 3
 厂商服务应用(Service Application) ........................................................................... 4
 智能终端应用软件(Application) ................................................................................ 4
1. 总体设计................................................................................................................................... 4
2. 服务层接口说明....................................................................................................................... 6
2.1 接口说明................................................................................................................... 6
2.2 配置说明................................................................................................................... 6
2.3 加解密说明............................................................................................................... 6
3. 设备接口................................................................................................................................... 7
3.1 设备服务................................................................................................................... 7
3.1.1. 功能描述 ........................................................................................................... 7
3.1.2. 接口列表 ........................................................................................................... 7
3.1.3. 接口说明 ........................................................................................................... 8
3.2 磁条读卡器............................................................................................................. 13
3.2.1. 功能描述 ......................................................................................................... 14
3.2.2. 接口列表 ......................................................................................................... 14
3.2.3. 接口说明 ......................................................................................................... 14
3.3 接触式 IC 读卡器 ................................................................................................... 15
3.3.1. 功能描述 ......................................................................................................... 15
3.3.2. 接口列表 ......................................................................................................... 15
3.3.3. 接口说明 ......................................................................................................... 16
3.4 非接触 IC 读卡器 ................................................................................................... 17
3.4.1. 功能描述 ......................................................................................................... 17
3.4.2. 接口列表 ......................................................................................................... 18
3.4.3. 接口说明 ......................................................................................................... 18
3.5 蜂鸣器..................................................................................................................... 23
3.5.1. 功能描述 ......................................................................................................... 23
3.5.2. 接口列表 ......................................................................................................... 23
3.5.3. 接口说明 ......................................................................................................... 23
3.6 LED 灯 .................................................................................................................... 24
3.6.1. 功能描述 ......................................................................................................... 24
3.6.2. 接口列表 ......................................................................................................... 24
3.6.3. 接口说明 ......................................................................................................... 24
3.7 扫码器..................................................................................................................... 25
3.7.1. 功能描述 ......................................................................................................... 25
3.7.2. 接口列表 ......................................................................................................... 25
3.7.3. 接口说明 ......................................................................................................... 25

1
中国建设银行智能 POS 终端接口规范

3.8 打印机..................................................................................................................... 27
3.8.1. 功能描述 ......................................................................................................... 27
3.8.2. 接口列表 ......................................................................................................... 27
3.8.3. 接口说明 ......................................................................................................... 28
3.9 串口......................................................................................................................... 33
3.9.1. 功能描述 ......................................................................................................... 33
3.9.2. 接口列表 ......................................................................................................... 33
3.9.3. 接口说明 ......................................................................................................... 33
3.10 密码键盘(Pinpad).............................................................................................. 36
3.10.1. 功能描述 ......................................................................................................... 36
3.10.2. 接口列表 ......................................................................................................... 36
3.10.3. 接口说明 ......................................................................................................... 37
3.11 PBOC 流程 ............................................................................................................. 44
3.11.1. 功能描述 ......................................................................................................... 44
3.11.2. 接口列表 ......................................................................................................... 44
3.11.3. 接口说明 ......................................................................................................... 45
3.12 设备信息................................................................................................................. 60
3.12.1. 功能描述 ......................................................................................................... 61
3.12.2. 接口列表 ......................................................................................................... 61
3.12.3. 接口说明 ......................................................................................................... 61
3.13 参数文件................................................................................................................. 66
3.13.1. 功能描述 ......................................................................................................... 67
3.13.2. 接口列表 ......................................................................................................... 67
3.13.3. 接口说明 ......................................................................................................... 67
3.14 钱箱......................................................................................................................... 69
3.14.1. 功能描述 ......................................................................................................... 69
3.14.2. 接口列表 ......................................................................................................... 69
3.14.3. 接口说明 ......................................................................................................... 69
3.15 签名板..................................................................................................................... 70
3.15.1. 功能描述 ......................................................................................................... 70
3.15.2. 接口列表 ......................................................................................................... 70
3.15.3. 接口说明 ......................................................................................................... 71
3.16 Psam 卡读卡器 ....................................................................................................... 75
3.16.1. 功能描述 ......................................................................................................... 75
3.16.2. 接口列表 ......................................................................................................... 75
3.16.3. 接口说明 ......................................................................................................... 75
3.17 二代证读卡器 ......................................................................................................... 77
3.17.1. 功能描述 ......................................................................................................... 77
3.17.2. 接口列表 ......................................................................................................... 77
3.17.3. 接口说明 ......................................................................................................... 78
3.18 底座......................................................................................................................... 79
3.18.1. 功能描述 ......................................................................................................... 80
3.18.2. 接口列表 ......................................................................................................... 80
3.18.3. 接口说明 ......................................................................................................... 80

2
中国建设银行智能 POS 终端接口规范

4. 附录......................................................................................................................................... 81
4.1 PBOC 流程调用时序图 ......................................................................................... 81
4.2 密钥索引说明 ......................................................................................................... 81

0. 术语及定义

 服务(Service)

Android 系统中的四大组件之一,它跟 Activity 的级别差不多,但不能自己运行只能


后台运行,并且可以和其他组件进行交互。Service 的启动有两种方式:
context.startService() 和 context.bindService()。

 Android 接口定义语言(AIDL)

Android Interface Definition Language,即 Android 接口定义语言。 Android 系统中的进


程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。为了使其
他的应用程序也可以访问本应用程序提供的服务,Android 系统采用了远程过程调用
(Remote Procedure Call,RPC)方式来实现。

 应用程序无响应(ANR)

在 Android 上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个
对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。
一个流畅的合理的应用程序中不能出现 ANR。默认情况下,在 android 中 Activity 的最长
执行时间是 5 秒,BroadcastReceiver 的最长执行时间则是 10 秒。

 Action

Android 中配合 Intent 对象使用的概念,表示要执行的动作。系统通常使用 Intent 对象


上指定的动作来路由到指定的行为上。action 可以表示 Service、Broadcast Receiver、
Activity 等组件。

3
中国建设银行智能 POS 终端接口规范

 厂商服务应用(Service Application)

一种遵循《智能 POS 终端接口规范》服务层接口的服务应用。


该应用由各智能 POS 终端厂商提供,用于驱动其差异性硬件设备(打印设备、扫码设
备等),各厂商仅在其智能 POS 终端中装载其自有服务。

 智能终端应用软件(Application)

由建行或第三方开发,实现建行智能 POS 业务处理逻辑、满足建行业务需求的应用软


件。

1. 总体设计
为了方便 APP 应用层屏蔽各终端厂商智能 POS 的硬件差异,达到应用调用接口层的统
一,因此从业务角度出发抽象出终端各设备模块的使用接口。不同终端厂商的设备都按照此
接口实现,达到避免重复开发 APP 应用的目的。

基于此实现的方案如下:

AIDL(Android Interface Define Language)是 Android 提供用来实现跨进程间(IPC)接


口调用的机制。对不同终端厂商的设备硬件差异通过定义统一的 AIDL 接口进行解耦,统一
APP 层应用开发的接口,实现原理如下:

4
中国建设银行智能 POS 终端接口规范

App 应用软件:由建行或第三方开发的实现业务处理逻辑,满足建行业务需求的应用软件,
该应用独立存在于智能 POS 中;

AIDL 接口:为上层 APP 应用开发提供的统一设备层接口;

厂商服务:由各 POS 厂商提供的用于驱动其差异性的终端硬件设备(打印设备、扫码设备


等)的服务,各厂商仅在其智能 POS 中装载其自有的服务,且各厂商服务应对外提供统一
的智能 POS 终端设备调用接口。

5
中国建设银行智能 POS 终端接口规范

2. 服务层接口说明

2.1 接口说明

服务层采用 apk 的形式输出,该 apk 独立运行于智能 POS 支付终端中,


应用层采用 AIDL
的方式调用服务。
服务层 AIDL 接口满足以下设计原则:
1) AIDL 统一暴露接口,屏蔽各厂商的硬件差异性,由应用主动调用的接口。AIDL 中
声明的接口都是调用后立即返回的接口,可以在主线程上调用,不应该造成调用应
用 ANR。
2) 对于调用时间不可控的接口,通过注入回调监听的方式接收调用返回的结果。
3) 为了满足多变的业务需求,功能复杂的接口将使用 Bundle 作为传入参数。

2.2 配置说明

厂商服务通过包名为”com.ccb.sedeviceservice”,Action 名为“com.ccb.device_service”标
识自己是厂商服务,应用将通过该包名和 Action 启动和绑定服务,关于 Action 部分示例代
码如下:
<service android:name=”com.ccb.sedeviceservice.CCBDeviceService”>
<intent-filter>
<action android:name=”com.ccb.device_service”>
</intent-filter>
</service>

2.3 加解密说明

2.3.1 加密范围:
对 于 pboc 流 程 , OnPBOCHandler 的 onConfirmCardInfo , onRequestOnlineProcess ,
onTransactionResult 方法中,对于 PAN , TRACK2 , CARD_SN , CARD_HOLDER_NAME ,
ARQC_TLV,REVERSAL_TLV,RESULT_TLV 等字段,进行了加密操作。对于 getAppTLVList,
getPBOCData,getCardData 等方法的返回内容也进行了加密。

2.3.2 解密流程:
a.将相关字段转换成 byte[]。
String srcStr=0a233444 ->byte[] srcBy= {0x0a,0x23,0x34,0x44}

b.调用 pinpad 的解密接口 calculateDes 来解密


byte[] deByte=calculateDes(1, mkapId, srcBy)

c.还原内容
String deStr=new String(deByte,”GBK”)

6
中国建设银行智能 POS 终端接口规范

3. 设备接口

3.1 设备服务

包名定义:com.ccb.sedeviceservice.aidl.IDeviceService

3.1.1. 功能描述

用于管理智能 POS 终端设备服务接口,如磁条卡读卡器、接触式/非接触式 IC 卡读卡


器、打印机、蜂鸣器、串口、扫码器、密码键盘等。除此之外也提供终端设备信息获取和管
理接口,用户获取终端序列号、厂商名称等。该模块由 DeviceService.aidl 文件定义。

3.1.2. 接口列表

函数原型 功能说明
boolean lock(in Bundle data, IBinder session); 锁定设备资源

void unlock(); 释放设备资源

String getVersion(); 获取设备服务版本信息

IBinder getBeeper(); 获取蜂鸣器对象

IBinder getLed(); 获取 LED 灯对象


IBinder getSerialPort(); 获取串口对象
IBinder getScanner(int cameraId); 获取扫码器对象
IBinder getMagCardReader(); 获取磁条卡读卡器对象
IBinder getInsertCardReader(); 获取接触式 IC 卡读卡对象
IBinder getRFCardReader(); 获取非接触式 IC 卡读卡对象
IBinder getPinpad(int kapId); 获取密码键盘对象
IBinder getPrinter(); 获取打印机对象
IBinder getPBOC(); 获取 PBOC 流程对象
IBinder getDeviceInfo(); 获取设备信息对象
IBinder getParamFile(String moduleName, String
获取参数文件对象
fileName);
IBinder getCashBox(in Bundle bundle); 获取钱箱操作对象
IBinder getSignPanel(in Bundle bundle); 获取签名板操作对象
IBinder getPsamCardReader(in Bundle param); 获取 psam 操作对象

7
中国建设银行智能 POS 终端接口规范

IBinder getIDCardReader(in Bundle param); 获取二代证操作对象


IBinder getPedestal(in Bundle param); 获取底座操作对象

3.1.3. 接口说明

3.1.3.1. 锁定设备资源

函数原型 boolean lock(in Bundle data, IBinder session);


功能说明 锁定设备资源,设备资源为共享资源,使用前需锁定,使用后要释放。
data - 锁定请求信息
<ul>
入参 <li>preemptedByOthers(boolean) - 是否允许被其他应用抢占使
用设备</li>
参数说明 </ul>
session - 会话对象,该对象如果释放,则自动触发{@link
#unlock}
出参 无
返回值 成功返回 true,失败返回 false
补充说明

3.1.3.2. 释放设备资源

函数原型 void unlock();


功能说明 释放设备资源,使用完要及时释放设备资源。
入参 无
参数说明
出参 无
返回值 无
补充说明

3.1.3.3. 获取设备服务版本

函数原型 String getVersion();


功能说明 获取串口设备操作对象
入参 无
参数说明
出参 无

8
中国建设银行智能 POS 终端接口规范

返回值 获取设备服务版本
补充说明 版本格式:版本号-版本生成日期,如:V1.0.0-20161201

3.1.3.4. 蜂鸣器

函数原型 IBinder getBeeper();


功能说明 获取蜂鸣器对象
入参 无
参数说明
出参 无
返回值 蜂鸣器设备操作对象,详见 IBeeper.aidl 定义
补充说明 需校验 smartpos.deviceservice.permission.Beeper 权限

3.1.3.5. LED 灯

函数原型 IBinder getLed();


功能说明 获取 LED 灯操作对象
入参 无
参数说明
出参 无
返回值 LED 灯设备操作对象,详见 ILed.aidl 定义
补充说明 需校验 smartpos.deviceservice.permission. Led 权限

3.1.3.6. 串口

函数原型 IBinder getSerialPort();


功能说明 获取串口设备操作对象
入参 无
参数说明
出参 无
返回值 串口设备操作对象,详见 ISerialPort.aidl 定义
补充说明 需校验 smartpos.deviceservice.permission. SerialPort 权限

3.1.3.7. 扫码器

函数原型 IBinder getScanner(int cameraId);

9
中国建设银行智能 POS 终端接口规范

功能说明 获取(前后置)扫码器设备操作对象
cameraId :扫码头 ID
FRONT- 前置扫码
入参
参数说明 BACK – 后置扫码
DCS20 – DCS20 串口模式扫码盒子
出参 无
返回值 扫码器设备操作对象,详见 IScanner.aidl 定义
1. 需校验 smartpos.deviceservice.permission. Scanner 权限
补充说明 2.参见 com.ccb.deviceservice.aidl.scanner.Constant 下的常量定义:
Constant.CameraID:摄像头 ID 定义;

3.1.3.8. 磁卡读卡器

函数原型 IBinder getMagCardReader();


功能说明 获取磁卡读卡器设备操作对象
入参 无
参数说明
出参 无
返回值 磁卡读卡器设备操作对象,详见 IMagCardReader.aidl 定义
补充说明 需校验 smartpos.deviceservice.permission. MagReader 权限

3.1.3.9. 接触式 IC 卡读卡器

函数原型 IBinder getInsertCardReader();


功能说明 获取接触式 IC 卡读卡器设备操作对象
入参 无
参数说明
出参 无
返回值 接触式 IC 卡读卡器设备操作对象,详见 IInsertCardReader.aidl 定义
补充说明 需校验 smartpos.deviceservice.permission. ICReader 权限

3.1.3.10. 非接触式 IC 卡读卡器

函数原型 IBinder getRFCardReader();


功能说明 获取非接触式 IC 卡读卡器对象
入参 无
参数说明
出参 无
返回值 非接触式 IC 卡读卡设备操作对象,详见 IRFCardReader.aidl 对象

10
中国建设银行智能 POS 终端接口规范

补充说明 需校验 smartpos.deviceservice.permission. RFReader 权限

3.1.3.11. 密码键盘(Pinpad)

函数原型 IBinder getPinpad(int kapId);


功能说明 获取密码键盘 Pinpad 对象
入参 kapId:密码键盘 kapId 索引(默认取值 0,联迪使用)
参数说明
出参 无
返回值 密码键盘设备操作对象,详见 IPinpad.aidl 定义
补充说明 需校验 smartpos.deviceservice.permission. Pinpad 权限

3.1.3.12. 打印机

函数原型 IBinder getPrinter();


功能说明 获取打印机设备操作对象
入参 无
参数说明
出参 无
返回值 打印机设备操作对象,详见 IPrinter.aidl 定义
补充说明 需校验 smartpos.deviceservice.permission. Printer 权限

3.1.3.13. PBOC

函数原型 IBinder getPBOC();


功能说明 获取 PBOC 流程对象
入参 无
参数说明
出参 无
返回值 PBOC 流程操作对象,详见 IPBOC.aidl 定义
需校验四个权限,包括:
smartpos.deviceservice.permission. MagReader
补充说明 smartpos.deviceservice.permission. ICReader
smartpos.deviceservice.permission. RFReader
smartpos.deviceservice.permission. PBOC

3.1.3.14. 终端设备

函数原型 IBinder getDeviceInfo();

11
中国建设银行智能 POS 终端接口规范

功能说明 获取终端设备对象
入参 无
参数说明
出参 无
返回值 终端设备信息管理对象,详见 IDeviceInfo.aidl 定义
补充说明 需校验 smartpos.deviceservice.permission. DeviceInfo 权限

3.1.3.15. 参数文件

函数原型 IBinder getParamFile(String moduleName, String fileName);


功能说明 获取参数文件对象
入参 moduleName – 参数文件模块名称
参数说明 fileName – 参数文件名称
出参 无
返回值 参数文件对象,详见 IParamFile.aidl 定义
补充说明 需校验 smartpos.deviceservice.permission. ParamFile 权限

3.1.3.16. 钱箱

函数原型 IBinder getCashBox(Bundle bundle);


功能说明 获取钱箱操作对象
入参 bundle – 请求参数(预留)
参数说明
出参 无
返回值 钱箱操作对象,参见 ICashBox.aidl 类
补充说明 需校验 smartpos.deviceservice.permission. CashBox 权限

3.1.3.17. 签名板

函数原型 IBinder getSignPanel(in Bundle bundle);


功能说明 签名板操作对象,参见 ISignPanel.aidl 类
bundle – 请求参数
<ul>
入参
参数说明 <li>deviceName(String) - 设备名称</li>
</ul>

出参 无
返回值 签名板操作对象,参见 ISignPanel.aidl 类

12
中国建设银行智能 POS 终端接口规范

补充说明 需校验 smartpos.deviceservice.permission. SignPanel 权限

3.1.3.18. Psam 卡读卡器

函数原型 IBinder getPsamCardReader (in Bundle param);


功能说明 获取 Psam 卡读卡器设备操作对象
参数说明 bundle 请求参数
<ul>
入参
<li>slot(int) - 卡座号</li>
</ul>
出参 无
返回值 Psam 卡读卡器设备操作对象,详见 IPsamCardReader.aidl 定义
补充说明 需校验 smartpos.deviceservice.permission. PsamCardReader 权限

3.1.3.19. 获取二代证操作对象

函数原型 IBinder getIDCardReader(in Bundle param);


功能说明 获取二代证操作对象
参数说明 入参 bundle 请求参数,预留
出参 无
返回值 IIDCardReader 对象,参见 IIDCardReader.aidl 类
补充说明 需校验 smartpos.deviceservice.permission. IDCardReader 权限

3.1.3.20. 获取底座操作对象

函数原型 IBinder getPedestal(in Bundle param);


功能说明 获取底座操作对象
参数说明 入参 bundle 请求参数,预留
出参 无
返回值 IPedestal 对象,参见 IPedestal.aidl 类
补充说明 需校验 smartpos.deviceservice.permission. Pedestal 权限

3.2 磁条读卡器

包名定义:com.ccb.deviceservice.aidl.magreader.IMagCardReader

13
中国建设银行智能 POS 终端接口规范

3.2.1. 功能描述

该设备用于采集磁条卡数据信息。

3.2.2. 接口列表

函数原型 功能说明
void searchCard(int timeout, MagCardListener listener); 等待刷卡

void stopSearch(); 取消等待刷卡

3.2.3. 接口说明

3.2.3.1. 等待刷卡

函数原型 void searchCard(int timeout, OnSearchListener listener);


功能说明 等待刷卡,获取磁卡卡片磁道数据
参数说明 入参 timeout:刷卡超时,单位秒
listener: 磁条卡刷卡监听器
出参 无
返回值 无
补充说明 包名定义:com.ccb.deviceservice.aidl.magreader.OnSearchListener

磁卡刷卡监听器说明:
interface OnSearchListener{
/**
* 刷卡成功回调
* @param track - 磁卡数据对象
* <ul>
* <li>PAN(String) - 主账号(卡号)</li>
* <li>TRACK1(String) - 磁道1数据</li>
* <li>TRACK2(String) - 磁道2数据</li>
* <li>TRACK3(String) - 磁道3数据</li>
* <li>SERVICE_CODE(String) - 服务码</li>
* <li>EXPIRED_DATE(String) - 卡片有效期(yyMM)</li>
* </ul>
*/
void onSuccess(in Bundle track);

/**

14
中国建设银行智能 POS 终端接口规范

* 刷卡失败回调
* @param error - 错误码
* <ul>
* <li>MAG_SWIPE_ERROR(90) - 刷卡失败</li>
* <li>SERVICE_CRASH(99) - 设备服务异常</li>
* <li>REQUEST_EXCEPTION(100) - 请求异常</li>
* </ul>
*/
void onError(int error);

/**
* 刷卡超时回调
*/
void onTimeout();
}

参见 com.ccb.deviceservice.aidl.magreader.Constant 下的常量定义:
Constant.ErrorCode:错误码定义;

3.2.3.2. 取消刷卡

函数原型 void stopSearch();


功能说明 取消等待刷卡
参数说明 入参 无
出参 无
返回值 无
补充说明 无

3.3 接触式 IC 读卡器

包名定义:com.ccb.deviceservice.aidl.insertreader.IInsertCardReader

3.3.1. 功能描述

与终端接触式 IC 卡槽上卡片数据交互。

3.3.2. 接口列表

函数原型 功能说明
boolean powerUp(int mode, int voltage, PowerUpResult 卡上电

15
中国建设银行智能 POS 终端接口规范

result);

boolean powerDown(); 卡下电

boolean isCardIn(); 卡是否在位

byte[] exchangeApdu(byte[] apdu); APDU 数据通讯

3.3.3. 接口说明

3.3.3.1. 卡上电

函数原型 boolean powerUp(int mode, int voltage, PowerUpResult result);


功能说明 对 IC 卡上电,并返回卡片上电结果
参数说明 入参 mode – 上电模式
* <ul>
* <li>MODE_EMV(0x01) - EMV 模式</li>
* <li>MODE_BPS_576(0x02) - 57600 波特率</li>
* <li>MODE_BPS_384(0x03) - 38400 波特率</li>
* <li>MODE_BPS_192(0x04) - 19200 波特率</li>
* <li>MODE_SHB(0x05) -社保卡模式</li>
* <li>MODE_ISO(0x06) - ISO 规范模式</li>
* <li>MODE_TCR(0x07) - ISO 规范上电,9600 波特率,不支持
PPS </li>
* <li>MODE_DEFAULT(0x01) -默认上电模式,同{@link
#MODE_EMV} </li>
* </ul>

voltage – 上电电压
* <ul>
* <li>VOL_3(0x01) -上电电压,3V </li>
* <li>VOL_5(0x02) -上电电压,5V </li>
* <li>VOL_18(0x03) -上电电压,1.8V </li>
* <li>VOL_DEFAULT(VOL_5) -默认上电电压,5V 同{@link
#VOL_5} </li>
* </ul>
出参 result – 上电结果
<ul>
<li>int protocal – 卡片协议类型,0 或 1</li>
<li>byte[] atr – 卡片 ATR</li>
</ul>

返回值 上电成功 true,失败 false。


补充说明 参见 com.ccb.deviceservice.aidl.insertreader.Constant 下的常量定义:
Constant.Mode:卡上电模式;
Constant.Voltage:卡上电电压;

16
中国建设银行智能 POS 终端接口规范

3.3.3.2. 卡下电

函数原型 boolean powerDown();


功能说明 对 IC 卡下电
参数说明 入参 无
出参 无
返回值 下电成功 true,失败 false。
补充说明 无

3.3.3.3. 卡是否在位

函数原型 boolean isCardIn();


功能说明 判断卡片是否在位
参数说明 入参 无
出参 无
返回值 卡在位返回 true,不在位返回 false。
补充说明 无

3.3.3.4. APDU 数据通讯

函数原型 byte[] exchangeApdu(byte[] apdu);


功能说明 与卡片 APDU 数据通讯
参数说明 入参 apdu – APDU 指令数据
出参 无
返回值 卡片 APDU 应答数据。
补充说明 无

3.4 非接触 IC 读卡器

包名定义:com.ccb.deviceservice.aidl.rfreader.IRFCardReader

3.4.1. 功能描述

非接式 IC 读卡器支持一些非接卡业务的卡片数据交互功能。

17
中国建设银行智能 POS 终端接口规范

3.4.2. 接口列表

函数原型 功能说明
void waitCard(OnPassListener listener); 寻卡上电

void stopWait(); 停止寻卡

int activateCard(String driver, byte[] responseData); 激活卡片

void halt(); 关闭设备

boolean isExist(); 卡是否在位

byte[] exchangeApdu(byte[] apdu); APDU 数据通讯

int authBlock(int blockNo, int keyType, byte[] key); 认证块号

int authSector(int sectorNo, int keyType, byte[] key); 认证扇区

int readBlock(int blockNo, byte[] data); 读块数据

int writeBlock(int blockNo, byte[] data); 写块数据

int increaseValue(int blockNo, int value); 加值

int decreaseValue(int blockNo, int value); 减值

3.4.3. 接口说明

3.4.3.1. 寻卡上电

函数原型 void waitCard(OnPassListener listener);


功能说明 等待非接挥卡并上电
参数说明 入参 listener - 寻卡监听器
出参 无
返回值 无
补充说明 包名定义:com.ccb.deviceservice.aidl.rfreader.OnPassListener

/**
* 非接寻卡过程监听接口定义
*/
interface OnPassListener {
/**
* 检测到磁条卡
* @param cardType - 卡类型
* <ul>
* <li>S50_CARD(0x00) - S50卡</li>

18
中国建设银行智能 POS 终端接口规范

* <li>S70_CARD(0x01) - S70卡</li>
* <li>PRO_CARD(0x02) - PRO卡</li>
* <li>S50_PRO_CARD(0x03) - 支持S50驱动与PRO驱动的PRO卡</li>
* <li>S70_PRO_CARD(0x04) - 支持S70驱动与PRO驱动的PRO卡</li>
* <li>CPU_CARD(0x05) - CPU卡</li>
* </ul>
*/
void onCardPass(int cardType);

/**
* 寻卡失败回调
* @param error - 错误码
* <ul>
* <li>ERROR_TRANSERR(0xA2) - 通讯错误</li>
* <li>ERROR_PROTERR(0xA3) - 卡片返回数据不符合规范要求</li>
* <li>ERROR_MULTIERR(0xA4) - 感应区内多卡存在</li>
* <li>ERROR_CARDTIMEOUT(0xA7) - 超时无响应</li>
* <li>ERROR_CARDNOACT(0xB3) - Pro卡或者TypeB卡未激活</li>
* <li>ERROR_MCSERVICE_CRASH(0xff01) - 主控服务异常</li>
* <li>ERROR_REQUEST_EXCEPTION(0xff02) - 请求异常</li>
* </ul>
* @param message - 错误描述
*/
void onFail(int error, String message);
}

参见 com.ccb.deviceservice.aidl.rfreader.Constant 下的常量定义:
Constant.CardType:非接卡类型;
Constant.ErrorCode:错误码定义;

3.4.3.2. 停止寻卡

函数原型 void stopWait();


功能说明 停止非接卡寻卡
参数说明 入参 无
出参 无
返回值 无
补充说明

19
中国建设银行智能 POS 终端接口规范

3.4.3.3. 激活卡片

函数原型 int activateCard(String driver, byte[] responseData);


功能说明 激活感应区内的射频卡
参数说明 入参 driver - 驱动名称
* <ul>
* <li>"S50" - S50 卡</li>
* <li>"S70" - S70 卡</li>
* <li>"CPU" - CPU 卡</li>
* <li>"PRO" - PRO、S5O_PRO、S70_PRO 卡</li>
* </ul>
出参 responseData - 激活卡片应答数据
返回值 返回 0 表示激活成功,其他失败。
补充说明 参见 com.ccb.deviceservice.aidl.rfreader.Constant 下的常量定义:
Constant.CardDriver:非接卡驱动;

3.4.3.4. 关闭设备

函数原型 void halt();


功能说明 关闭设备,再次操作需从寻卡开始
参数说明 入参 无
出参 无
返回值 无
补充说明 无

3.4.3.5. 卡是否在位

函数原型 boolean isExist();


功能说明 判断卡片是否在位
参数说明 入参 无
出参 无
返回值 卡在位返回 true,不在位返回 false。
补充说明 无

20
中国建设银行智能 POS 终端接口规范

3.4.3.6. APDU 数据通讯

函数原型 byte[] exchangeApdu(byte[] apdu);


功能说明 与卡片 APDU 数据通讯
参数说明 入参 apdu – APDU 指令数据
出参 无
返回值 卡片 APDU 应答数据。
补充说明 无

3.4.3.7. 认证块号

函数原型 int authBlock(int blockNo, int keyType, byte[] key);


功能说明 根据块号认证
参数说明 入参 blockNo - 块号,从 0 开始
keyType - 密钥类型 KEY_A 或者 KEY_B
Key - 密钥,6 字节长
出参 无
返回值 成功返回 0,其他失败。
补充说明 参见 com.ccb.deviceservice.aidl.rfreader.Constant 下的常量定义:
Constant.KeyTpe:非接卡密钥类型;

3.4.3.8. 认证扇区

函数原型 int authSector(int sectorNo, int keyType, byte[] key);


功能说明 根据扇区号认证
参数说明 入参 blockNo - 块号,从 0 开始
keyType - 密钥类型 KEY_A 或者 KEY_B
Key - 密钥,6 字节长
出参 无
返回值 成功返回 0,其他失败。
补充说明 参见 com.ccb.deviceservice.aidl.rfreader.Constant 下的常量定义:
Constant.KeyTpe:非接卡密钥类型;

21
中国建设银行智能 POS 终端接口规范

3.4.3.9. 读块数据

函数原型 int readBlock(int blockNo, byte[] data);


功能说明 读块数据
参数说明 入参 blockNo – 块号
data – 读取的数据内容
出参 无
返回值 成功返回 0,其他失败。
补充说明 无

3.4.3.10. 写块数据

函数原型 int writeBlock(int blockNo, byte[] data);


功能说明 写块数据
必须是 16 个字节的数据,没有达到字节数将认为是错误。
参数说明 入参 blockNo– 块号
data – 待写入的数据
出参 无
返回值 成功返回 0,其他失败。
补充说明 无

3.4.3.11. 加值

函数原型 int increaseValue(int blockNo, int value);


功能说明 加值操作
参数说明 入参 blockNo– 块号
value – 数据
出参 无
返回值 成功返回 0,其他失败。
补充说明 无

3.4.3.12. 减值

函数原型 int decreaseValue(int blockNo, int value);


功能说明 减值操作

22
中国建设银行智能 POS 终端接口规范

参数说明 入参 blockNo – 块号
value – 数据
出参 无
返回值 成功返回 0,其他失败。
补充说明 无

3.5 蜂鸣器

包名定义:com.ccb.deviceservice.aidl.beeper.IBeeper

3.5.1. 功能描述

实现 POS 设备持续蜂鸣的功能。

3.5.2. 接口列表

函数原型 功能说明
void startBeep(int msec); 开始蜂鸣

void stopBeep(); 停止蜂鸣

3.5.3. 接口说明

3.5.3.1. 开始蜂鸣

函数原型 void startBeep(int msec);


功能说明 开始蜂鸣
参数说明 入参 msec – 蜂鸣持续的时间,单位毫秒
出参 无
返回值 无
补充说明 蜂鸣器发声是采用非阻塞的方式进行的,调用该函数后,函数立即返
回,不会阻塞调用。

3.5.3.2. 停止蜂鸣

函数原型 void stopBeep();

23
中国建设银行智能 POS 终端接口规范

功能说明 停止蜂鸣
参数说明 入参 无
出参 无
返回值 无
补充说明 调用该方法后立即停止蜂鸣。

3.6 LED 灯

包名定义:com.ccb.deviceservice.aidl.led.ILed

3.6.1. 功能描述

实现 POS 设备上 LED 灯点亮与熄灭。

3.6.2. 接口列表

函数原型 功能说明
void turnOn(int led); 点亮 LED 灯

void turnOff(int led); 熄灭 LED 灯

3.6.3. 接口说明

3.6.3.1. 点亮 LED 灯

函数原型 void turnOn(int led);


功能说明 点亮 LED 灯
参数说明 入参 led – 1:蓝灯,2:黄灯,3:绿灯,4:红灯
出参 无
返回值
补充说明 参见 com.ccb.deviceservice.aidl.led.Constant 下的常量定义:
Constant.Light:LED 灯类型;

24
中国建设银行智能 POS 终端接口规范

3.6.3.2. 熄灭 LED 灯

函数原型 void turnOff(int led);


功能说明 熄灭 LED 灯
参数说明 入参 led – 1:蓝灯,2:黄灯,3:绿灯,4:红灯
出参
返回值
补充说明 参见 com.ccb.deviceservice.aidl.led.Constant 下的常量定义:
Constant.Light:LED 灯类型;

3.7 扫码器

包名定义:com.ccb.deviceservice.aidl.scanner.IScanner

3.7.1. 功能描述

实现 POS 设备前/后置扫码功能。

3.7.2. 接口列表

函数原型 功能说明
void startScan(in Bundle bundle, OnScanListener listener); 启动扫码

void stopScan(); 停止扫码

3.7.3. 接口说明

3.7.3.1. 启动扫码

函数原型 void startScan(Bundle bundle, OnScanListener listener);


功能说明 启动扫码,返回条形码/二维码扫码结果
参数说明 入参 bundle – 请求参数
<ul>
<li>timeout(long) - 扫码超时时间(单位:秒)</li>

以下参数仅针对内置摄像头扫码使用:
<li>payType(int) - 扫码支付方式,用于内置摄像头扫码。0:

25
中国建设银行智能 POS 终端接口规范

通用支付,1:龙支付/银联,2:支付宝/微信</li>
<li>title(String) - 扫码界面标题,用于内置摄像头扫码。若存
在该参数,则扫码界面显示该标题,否则根据支付方式显示对
应标题。

以下参数仅针对 DCS20 扫码器使用:


<li>deviceName(String) – usb 设备名称,用于指定扫码器接入
的 USB 端口,默认为 USB_CDC_ACM。当仅接入一个扫码设
备或 CDC 设备时,可不用指定,否则需指定对应的设备名(如
ttyACM0,ttyACM1 等)。
</ul>
listener – 扫码结果监听器,详见补充说明
出参 无
返回值 无
补充说明 1、监听器说明
包名定义:com.ccb.deviceservice.aidl.scanner.OnScanListener

/**
* 扫码器扫码结果监听器
*/
interface OnScanListener{
/**
* 扫码成功回调
* @param barcode - 条码/二维码
*<ul>
* <li>payType(int) - 扫码支付方式,0:通用支付,1:龙支付/银联,2:支付宝/
微信</li>
* <li>barcode(String) - 条码 </li>
* </ul>
*/
void onSuccess(Bundle result);

/**
* 扫码出错
* @param error - 错误码
* 摄像头扫码错误码
* <ul>
* <li>ERROR_INIT_FAIL(1) - 初始化解码库失败</li>
* <li>ERROR_ALREADY_INIT(2) - 已经初始化</li>
* <li>ERROR_INIT_ENGINE(3) - 初始化扫码模组失败</li>
* <li>ERROR_AUTH_LICENSE(4) - License认证失败</li>
* <li>ERROR_OPEN_CAMERA(5) - 打开摄像头失败</li>
* </ul>
* DCS20扫码错误码
* <ul>

26
中国建设银行智能 POS 终端接口规范

* <li>ERROR_FAIL(1) – 扫码失败</li>
* <li>SERVICE_CRASH(99) - 设备服务异常</li>
* </ul>
* @param message - 错误描述
*/
void onError(int error, String message);

/**
* 扫码超时回调
*/
void onTimeout();
}

2、错误码
参见 com.ccb.deviceservice.aidl.scanner.Constant 下的常量定义:
Constant.ErrorCode:错误码;

3.7.3.2. 停止扫码

函数原型 void stopScan();


功能说明 停止扫码,取消扫码过程。
参数说明 入参 无
出参 无
返回值 无
补充说明

3.8 打印机

包名定义:com.ccb.deviceservice.aidl.printer.IPrinter

3.8.1. 功能描述

热敏打印机提供交易凭条打印功能,支持文本、条码、二维码和单色图片打印功能。

3.8.2. 接口列表

函数原型 功能说明
int getStatus(); 获取打印机状态

27
中国建设银行智能 POS 终端接口规范

void setGray(int gray); 设置打印灰度

void addText(Bundle format, String text); 添加一行打印文本


void addBarCode(Bundle format, String barcode); 添加打印条形码
void addQrCode(Bundle format, String qrCode); 添加打印二维码

void addImage(Bundle format, byte[] imageData); 添加打印 bitmap 图片


void feedLine(int lines); 添加走纸

void cutPaper(); 添加切纸


void autoCutPaper(); 添加自动切纸

void startPrint(OnPrintListener listener); 启动打印过程

3.8.3. 接口说明

3.8.3.1. 获取打印状态

函数原型 int getStatus();


功能说明 获取打印机状态
参数说明 入参 无
出参 无
返回值 打印机状态:
* <ul>
* <li>ERROR_NONE(0x00) - 状态正常</li>
* <li>ERROR_PAPERENDED(0xF0) - 缺纸,不能打印</li>
* <li>ERROR_HARDERR(0xF2) - 硬件错误</li>
* <li>ERROR_OVERHEAT(0xF3) - 打印头过热</li>
* <li>ERROR_BUFOVERFLOW(0xF5) - 缓冲模式下所操作的位置超出范围</li>
* <li>ERROR_LOWVOL(0xE1) - 低压保护</li>
* <li>ERROR_PAPERENDING(0xF4) - 纸张将要用尽,还允许打印(单步进针打
特有返回值)</li>
* <li>ERROR_MOTORERR(0xFB) - 打印机芯故障(过快或者过慢)</li>
* <li>ERROR_PENOFOUND(0xFC) - 自动定位没有找到对齐位置,纸张回到原来
位置</li>
* <li>ERROR_PAPERJAM(0xEE) - 卡纸</li>
* <li>ERROR_NOBM(0xF6) - 没有找到黑标</li>
* <li>ERROR_BUSY(0xF7) - 打印机处于忙状态</li>
* <li>ERROR_BMBLACK(0xF8) - 黑标探测器检测到黑色信号</li>
* <li>ERROR_WORKON(0xE6) - 打印机电源处于打开状态</li>
* <li>ERROR_LIFTHEAD(0xE0) - 打印头抬起(自助热敏打印机特有返回值)</li>

28
中国建设银行智能 POS 终端接口规范

* <li>ERROR_CUTPOSITIONERR(0xE2) - 切纸刀不在原位(自助热敏打印机特
有返回值)</li>
* <li>ERROR_LOWTEMP(0xE3) - 低温保护或AD出错(自助热敏打印机特有返
回值)</li>
* </ul>
补充说明

3.8.3.2. 设置打印灰度

函数原型 void setGray(int gray);


功能说明 设置打印机的打印灰度
参数说明 入参 gray – 打印灰度,0~10 级
出参 无
返回值
补充说明

3.8.3.3. 添加一行打印文本

函数原型 void addText(Bundle format, String text);


功能说明 按指定格式添加一行打印文本
参数说明 入参 format – 指定打印字体的格式
font(int):字体,0:small, 1:normal, 2:large
align(int):对齐方式,默认左对齐,0:left, 1:center, 2:right
underline(boolean):是否添加下划线,(true:添加;false:
不添加)
autoTrunc(boolean):超出一行是否自动截断(true:截断;
false:不截断,默认 true)
fontTemplate(int):字号大小模板(0:默认;1:模板 1;2:
模板 2;3:模板 3),详见 FontTemplate 类
text – 打印文本
出参 无
返回值
补充说明 参见 com.ccb.deviceservice.aidl.printer.Constant 下的常量定义:
Constant.FontSize:打印字体;
Constant.FontTemplate:字号模板,具体字号点阵(宽*高)如下:
(默认:small – 16*16,normal – 24*24,large - 24*48
模板 1:small – 16*16,normal – 24*24,large - 32*32
模板 2:small – 16*16,normal – 24*24,large - 48*48
模板 3:small – 24*24,normal – 32*32,large - 48*48)
Constant.Align:打印对齐方式;

29
中国建设银行智能 POS 终端接口规范

3.8.3.4. 添加条码打印

函数原型 void addBarCode(Bundle format, String barcode);


功能说明 添加打印条形码
参数说明 入参 format – 打印格式
align(int) - 0:left, 1:center, 2:right
width(int) - 宽度
height(int) - 高度
barcode – 条形码内容
出参 无
返回值
补充说明 参见 com.ccb.deviceservice.aidl.printer.Constant 下的常量定义:
Constant.Align:打印对齐方式;

3.8.3.5. 添加二维码打印

函数原型 void addQrCode(Bundle format, String qrCode);


功能说明 添加打印二维码
参数说明 入参 format – 打印格式
offset(int) - 打印起始位置
expectedHeight(int) - 期望高度
qrCode – 二维码内容
出参
返回值
补充说明

3.8.3.6. 添加图片打印

函数原型 void addImage(Bundle format, byte[] imageData);


功能说明 添加 bitmap 图片打印
参数说明 入参 format –打印格式,可设置打印的位置
offset(int) - 打印起始位置
imageData –单色 bmp 图片,位图深度 1。
出参
返回值
补充说明

30
中国建设银行智能 POS 终端接口规范

3.8.3.7. 添加走纸

函数原型 void feedLine(int lines);


功能说明 添加打印机走纸
参数说明 入参 lines – 走纸行数
出参 无
返回值
补充说明

3.8.3.8. 添加切纸

函数原型 void cutPaper();


功能说明 添加打印机切纸
C10 终端打印需要在切纸前调用 feedLine 接口走纸 80 像素点(保证打
印内容走到切刀位置)后进行切纸,切纸后再调用 feedLine 接口走纸 88
像素点,避免卡纸。
参数说明 入参 无
出参 无
返回值
补充说明

3.8.3.9. 添加自动切纸

函数原型 void autoCutPaper();


功能说明 添加打印机自动切纸
自动先走纸 80 像素点后切纸,再走纸 88 像素点
参数说明 入参 无
出参 无
返回值
补充说明

3.8.3.10. 启动打印

函数原型 void startPrint(OnPrintListener listener);


功能说明 启动打印过程
参数说明 入参 listener – 打印结果监听器,详见说明

31
中国建设银行智能 POS 终端接口规范

出参 无
返回值
补充说明 包名定义:com.ccb.deviceservice.aidl.printer.OnPrintListener

打印结果监听器
interface OnPrintListener{
/**
* 打印成功回调
*/
void onFinish();

/**
* 打印失败回调
* @param error - 错误码
* <ul>
* <li>ERROR_PAPERENDED(0xF0) - 缺纸,不能打印</li>
* <li>ERROR_HARDERR(0xF2) - 硬件错误</li>
* <li>ERROR_OVERHEAT(0xF3) - 打印头过热</li>
* <li>ERROR_BUFOVERFLOW(0xF5) - 缓冲模式下所操作的位置超出范围</li>
* <li>ERROR_LOWVOL(0xE1) - 低压保护</li>
* <li>ERROR_PAPERENDING(0xF4) - 纸张将要用尽,还允许打印(单步进针打
特有返回值)</li>
* <li>ERROR_MOTORERR(0xFB) - 打印机芯故障(过快或者过慢)</li>
* <li>ERROR_PENOFOUND(0xFC) - 自动定位没有找到对齐位置,纸张回到原来
位置</li>
* <li>ERROR_PAPERJAM(0xEE) - 卡纸</li>
* <li>ERROR_NOBM(0xF6) - 没有找到黑标</li>
* <li>ERROR_BUSY(0xF7) - 打印机处于忙状态</li>
* <li>ERROR_BMBLACK(0xF8) - 黑标探测器检测到黑色信号</li>
* <li>ERROR_WORKON(0xE6) - 打印机电源处于打开状态</li>
* <li>ERROR_LIFTHEAD(0xE0) - 打印头抬起(自助热敏打印机特有返回值)</li>
* <li>ERROR_CUTPOSITIONERR(0xE2) - 切纸刀不在原位(自助热敏打印机特
有返回值)</li>
* <li>ERROR_LOWTEMP(0xE3) - 低温保护或AD出错(自助热敏打印机特有返
回值)</li>
* </ul>
*/
void onError(int error);
}

2、错误码定义
参见 com.ccb.deviceservice.aidl.printer.Constant 下的常量定义:
Constant.ErrorCode:错误码;

32
中国建设银行智能 POS 终端接口规范

3.9 串口

包名定义:com.ccb.deviceservice.aidl.serialport.ISerialPort

3.9.1. 功能描述

实现串口数据收发功能。

3.9.2. 接口列表

函数原型 功能说明
boolean open(); 打开串口

boolean close(); 关闭串口


boolean init(int bps, int par, int dbs); 初始化串口

int read(byte[] buffer, int timeout); 从串口读数据


int write(byte[] data, int timeout); 往串口发数据
boolean clearInputBuffer(); 清空接收缓冲区

boolean isBufferEmpty(boolean input); 检查缓冲区是否为空

3.9.3. 接口说明

3.9.3.1. 打开串口

函数原型 boolean open();


功能说明 打开串口设备
参数说明 入参 无
出参 无
返回值 成功返回 true,失败返回 false。
补充说明

3.9.3.2. 关闭串口

函数原型 boolean close();


功能说明 关闭串口

33
中国建设银行智能 POS 终端接口规范

参数说明 入参 无
出参 无
返回值 成功返回 true,失败返回 false。
补充说明

3.9.3.3. 初始化串口

函数原型 boolean init(int bps, int par, int dbs);


功能说明 初始化串口
参数说明 入参 bps – 波特率
* <ul>
* <li>BPS_1200(0x01) - 1200波特率</li>
* <li>BPS_2400(0x02) - 2400波特率</li>
* <li>BPS_4800(0x03) - 4800波特率</li>
* <li>BPS_9600(0x04) - 9600波特率</li>
* <li>BPS_14400(0x05) - 14400波特率</li>
* <li>BPS_28800(0x06) - 28800波特率</li>
* <li>BPS_19200(0x07) - 19200波特率</li>
* <li>BPS_57600(0x08) - 57600波特率</li>
* <li>BPS_115200(0x09) - 115200波特率(缺省)</li>
* <li>BPS_38400(0x0A) - 38400波特率</li>
* </ul>

par – 校验
* <ul>
* <li>PAR_NOPAR('N') - 无效验(缺省)</li>
* <li>PAR_EVEN('E') - 偶效验</li>
* <li>PAR_ODD('O') - 奇效验</li>
* </ul>

dbs – 数据位
* <ul>
* <li>DBS_7(0x07) - 7 位数据位</li>
* <li>DBS_8(0x08) - 8 位数据位(缺省)</li>
* </ul>
出参 无
返回值 初始化成功返回 true,失败返回 false。
补充说明 参见 com.ccb.deviceservice.aidl.serialport.Constant 下的常量定义:
Constant.BPS:波特率;
Constant.PAR:校验;
Constant.DBS:数据位

34
中国建设银行智能 POS 终端接口规范

3.9.3.4. 读串口数据

函数原型 int read(byte[] buffer, int timeout);


功能说明 从串口读取数据
参数说明 入参 buffer – 读取数据缓冲区
timeout – 读取超时时间,单位毫秒
出参 buffer – 读取数据缓冲区
返回值 成功返回实际读取的字节数,失败返回-1。
补充说明

3.9.3.5. 写串口数据

函数原型 int write(byte[] data, int timeout);


功能说明 往串口写数据。
参数说明 入参 data – 发送的数据
timeout – 发送超时时间,单位毫秒
出参 无
返回值 成功返回实际发送的字节数,失败返回-1。
补充说明

3.9.3.6. 清空接收缓冲区

函数原型 boolean clearInputBuffer();


功能说明 清接收缓冲区
参数说明 入参 无
出参 无
返回值 清空成功返回 true,失败返回 false。
补充说明

3.9.3.7. 检查缓冲区是否为空

函数原型 boolean isBufferEmpty(boolean input);


功能说明 检查串口缓冲区是否为空
参数说明 入参 input – true 为输入缓冲,false 为输出缓冲

35
中国建设银行智能 POS 终端接口规范

出参 无
返回值 缓冲为空返回 true,不为空返回 false。
补充说明

3.10 密码键盘(Pinpad)

包名定义:com.ccb.deviceservice.aidl.pinpad.IPinpad

3.10.1. 功能描述

密码键盘设备用于处理交易中敏感数据的加密,像磁道、PIN 数据和报文 MAC 计算;同时,


也提供客户密码(PIN)安全输入的功能。

3.10.2. 接口列表

函数原型 功能说明
boolean isKeyExist(int keyType, int keyId); 判断密钥是否存在

boolean loadTEK(byte[] key, byte[] checkValue); 下装 TEK 密钥


boolean loadEncryptMainKey(int keyId, byte[] key, byte[]
下装密文主密钥
checkValue);
boolean loadMainKey(int keyId, byte[] key, byte[]
下装明文主密钥
checkValue);
boolean loadWorkKey(int keyType, int mkId, int wkId,
下装工作密钥
byte[] key, byte[] checkValue);
byte[] calcMAC(int keyId, byte[] data); 计算数据的 MAC

byte[] encryptTrackData(int mode, int keyId, byte[] track); 加密磁道数据


byte[] calculateDes(int mode, int keyId, byte[] data); 数据 DES 加密/解密
void startPinInput(int keyId, Bundle param,
启动 PIN 输入过程
OnInputPinListener listener);
void stopPinInput(); 取消 PIN 输入
String getLastError(); 获取最近一次错误描述
void setKeyAlgorithm(char keyAlgorithm); 设置密钥的算法类型
boolean isSM4Enabled(); 是否使用国密算法

boolean linkedExtPinpad(); 是否连接外置密码键盘


boolean setPinpadConfig(boolean enterKeyClearDisplay ,
配置外接密码键盘属性
boolean enableKeyTone );
boolean display(String line1, String line2); 显示信息

36
中国建设银行智能 POS 终端接口规范

boolean reset(); 重置密码键盘

3.10.3. 接口说明

3.10.3.1. 密钥是否存在

函数原型 boolean isKeyExist(int keyType, int keyId);


功能说明 判断指定密钥是否存在。
参数说明 入参 keyType – 密钥类型
<ul>
<li>0-主密钥</li>
<li>1-MAC 密钥</li>
<li>2-PIN 密钥</li>
<li>3-TD 密钥</li>
<li>4-加解密密钥</li>
</ul>
keyId – 下装密钥存储的索引
出参 无
返回值 存在返回 true,否则返回 false。
补充说明 1. 参见 com.ccb.deviceservice.aidl.pinpad.Constant 下的常量定义:
Constant.KeyType:密钥类型;
2. 密钥索引说明详见附录 4.2 说明;

3.10.3.2. 下装 TEK 密钥

函数原型 boolean loadTEK(byte[] key, byte[] checkValue);


功能说明 下装 TEK 密钥,TEK 是加密主密钥的密钥。
入参
key – 下装的 KEK 密钥
参数说明
checkValue – 校验值 KCV
出参 无
返回值 下装成功返回 true,失败返回 false。
补充说明 密钥固定下装 0 号索引

37
中国建设银行智能 POS 终端接口规范

3.10.3.3. 下装密文主密钥

函数原型 boolean loadEncryptMainKey(int keyId, byte[] key, byte[] checkValue);


功能说明 下装密文主密钥,经 TEK 加密。
参数说明 入参 keyId – 下装密钥存储的索引,取值范围:1-30
key – 下装密钥
checkValue – 校验值 KCV
出参 无
返回值 下装成功返回 true,失败返回 false。
补充说明 密钥索引说明详见附录 4.2 说明

3.10.3.4. 下装明文主密钥

函数原型 boolean loadMainKey(int keyId, byte[] key, byte[] checkValue);


功能说明 下装明文主密钥
参数说明 入参 keyId – 下装密钥存储的索引,取值范围:1-30
key – 下装密钥
checkValue – 校验值 KCV
出参 无
返回值 下装成功返回 true,失败返回 false。
补充说明 密钥索引说明详见附录 4.2 说明

3.10.3.5. 下装工作密钥

函数原型 boolean loadWorkKey(int keyType, int mkId, int wkId,


byte[] key, byte[] checkValue);
功能说明 下装工作密钥,包括 PIN 密钥、MAC 密钥和磁道加密密钥
参数说明 入参 keyType – 工作密钥类型,1:MAC key,2:PIN key,3:
TDK key,4:ENCDEC key
mkId – 主密钥的索引,取值范围:1-30
wkId – 下装工作密钥存储的索引,取值范围:1-30
key – 密钥数据
checkValue -校验值 KCV
出参 无
返回值 下装成功返回 true,失败返回 false。

38
中国建设银行智能 POS 终端接口规范

补充说明 1. 参见 com.ccb.deviceservice.aidl.pinpad.Constant 下的常量定


义:
Constant.KeyType:密钥类型;
2. 密钥索引说明详见附录 4.2 说明

3.10.3.6. 计算 MAC

函数原型 byte[] calcMAC(int keyId, byte[] data);


功能说明 按标准的 ISO9797 算法,计算输入数据的 MAC
参数说明 入参 keyId – MAC 密钥索引
data – 待计算的数据
出参 无
返回值 成功返回 MAC,失败返回 null。
补充说明 密钥索引说明详见附录 4.2 说明

3.10.3.7. 加密磁道数据

函数原型 byte[] encryptTrackData(int mode, int keyId, byte[] track);


功能说明 加密磁道数据
参数说明 入参 mode – 加密模式,0:ECB 模式,1:CBC 模式
keyId – 磁道 TDK 密钥索引
track – 磁道数据
出参 无
返回值 成功返回加密后的磁道数据,失败返回 null。
补充说明 密钥索引说明详见附录 4.2 说明

3.10.3.8. 数据加/解密

函数原型 byte[] calculateDes(int mode, int keyId, byte[] data);


功能说明 用指定的密钥对数据进行加密或解密
参数说明 入参 mode – 模式:加密/解密,见 Constant.DesMode 定义
keyId – 加密/解密密钥索引
data –数据
出参 无
返回值 成功返回加密或解密后的数据,失败返回 null。
补充说明 1.密钥索引说明详见附录 4.2 说明

39
中国建设银行智能 POS 终端接口规范

2.DesMode 说明:
interface DesMode {
int ENC = 0; /** 加密 */
int DEC = 1; /** 解密 */
}

3.10.3.9. 启动 PIN 输入流程

函数原型 void startPinInput(int keyId, Bundle param, OnInputPinListener listener);


功能说明 启动 PIN 输入流程
参数说明 入参 keyId – PIN 密钥索引
param – PIN 输入配置参数
listener – PIN 输入过程监听器
出参 无
返回值 无
补充说明 1. 密钥索引说明详见附录 4.2 说明;
2. param 配置参数
isOnline(boolean):是否联机 PIN,默认联机 PIN
panBlock(byte[]):用于加密联机 PIN 的 PAN BLOCK
pinLimit(byte[]):允许输入 PIN 的长度,取值范围[0,6,7,8,9,10,11,12],默认取 6
timeout(int):PIN 输入超时时间,单位秒
inputType(int):输入类型,详见 Constant.InputType
3. PIN 输入过程监听器
包名定义:com.ccb.deviceservice.aidl.pinpad.OnInputPinListener

interface OnInputPinListener{
/**
* 按键按压事件
* @param len - 已输入密码长度
* @param key - 当前的Key值
*/
void onInput(intlen, int key);

/**
* 用户确认PIN输入时调用
* @param data - pin码,输入为空时候,为null
* 16 字节的密文 PIN block, 格式为 partial hex-ASCII,见补充说明3。
* @param isNonePin - 输入为空的时候为true
*/
void onConfirm(in byte[] data, boolean isNonePin);

/**

40
中国建设银行智能 POS 终端接口规范

* 取消PIN输入时调用
*/
void onCancel();

/**
* 错误时回调
* @param errorCode - 错误码
*<ul>
*<li>ERROR_ABOLISH(27) - 用户取消</li>
*<li>ERROR_NO_SUCH_PINPAD(32) - 用户指定名称的 pinpad 不存在</li>
*<li>ERROR_INVALID_ARGUMENT(33) - PINPAD 调用失败,无效实参</li>
*<li>ERROR_TIME_OUT(35) - 超时</li>
*<li>ERROR_COMM_ERR(36) - 通讯错误</li>
*<li>ERROR_UNSUPPORTED_FUNC(37) - 当前 PINPAD 版本不支持该功能</li>
*<li>ERROR_NO_SUCH_KEY(39) - 无指定密钥</li>
*<li>ERROR_BAD_STATUS(46) - 模块当前状态错误或者当前状态不支持该调用
</li>
*<li>ERROR_NO_SUCH_KAP(50) - 该操作指定的密钥区不存在</li>
*<li>ERROR_KAP_ALREADY_EXIST(51) - 指定的密钥区已经存在</li>
*<li>ERROR_WRONG_KAP_MODE(64) - 该密钥区不兼容</li>
*<li>EXTEND_ERR_INPUT_TIMEOUT(65281) - PIN 输入超时</li>
*<li>EXTEND_ERR_INPUT_COMM_ERR(65282) - PIN 输入通讯异常</li>
*<li>EXTEND_ERR_INPUT_UNKNOWN(65283) - 未知的PIN输入错误</li>
*</ul>
*/
void onError(int errorCode);
}

3、partial hex-ASCII
hex-ASCII 的一种退化表示。
字节序列 0xab, 0xcd 的 hex-ASCII 形态, 应该是 "abcd"。
因为 '0' 到 '9' 和 'a' 到 'f' 的 ASCII 编码不是连续的,出于实现上的简单(半字节 +
0x30), partial hex-ASCII 将 0xab, 0xcd, 直接表示为 0x3a, 0x3b, 0x3c, 0x3d, 对应的
字串就是 ":;<=",不具备 hex-ASCII 的可读性。但是, 对于 0-9 的数字 (比如 PIN
digits),"partial hex-ASCII" 和 "hex-ASCII" 一致。

3.10.3.10. 取消 PIN 输入

函数原型 void stopPinInput();


功能说明 取消 PIN 输入流程
参数说明 入参 无
出参 无
返回值

41
中国建设银行智能 POS 终端接口规范

补充说明

3.10.3.11. 设置密钥算法

函数原型 void setKeyAlgorithm(char keyAlgorithm);


功能说明 设置密钥的算法类型
参数说明 入参 keyAlgorithm – 密钥算法
出参 无
返回值
补充说明 参见 com.ccb.deviceservice.aidl.pinpad.Constant 下的常量定义:
Constant.KeyAlgorithm:密钥算法类型

3.10.3.12. 是否使用国密算法

函数原型 boolean isSM4Enabled();


功能说明 判断是否使用国密算法
入参 无
参数说明
出参 无
返回值 是返回 true,否返回 false
补充说明

3.10.3.13. 获取错误描述

函数原型 String getLastError();


功能说明 获取最近一次调用失败的错误描述
参数说明 入参 无
出参 无
返回值 错误描述
补充说明 PINPAD 错误对应表:
<li>ERROR_ABOLISH(27) - 用户取消</li>
<li>ERROR_NO_SUCH_PINPAD(32) - 用户指定名称的 pinpad 不存在</li>
<li>ERROR_INVALID_ARGUMENT(33) - PINPAD 调用失败,无效实参</li>
<li>ERROR_TIME_OUT(35) - 超时</li>
<li>ERROR_COMM_ERR(36) - 通讯错误</li>
<li>ERROR_UNSUPPORTED_FUNC(37) - 当前 PINPAD 版本不支持该功能</li>
<li>ERROR_NO_SUCH_KEY(39) - 无指定密钥</li>

42
中国建设银行智能 POS 终端接口规范

<li>ERROR_BAD_STATUS(46) - 模块当前状态错误或者当前状态不支持该调用</li>
<li>ERROR_NO_SUCH_KAP(50) - 该操作指定的密钥区不存在</li>
<li>ERROR_KAP_ALREADY_EXIST(51) - 指定的密钥区已经存在</li>
<li>ERROR_WRONG_KAP_MODE(64) - 该密钥区不兼容</li>
<li>EXTEND_ERR_INPUT_TIMEOUT(65281) - PIN 输入超时</li>
<li>EXTEND_ERR_INPUT_COMM_ERR(65282) - PIN 输入通讯异常</li>
<li>EXTEND_ERR_INPUT_UNKNOWN(65283) - 未知的 PIN 输入错误</li>

参见 com.ccb.deviceservice.aidl.pinpad.Constant 下的常量定义:
Constant.ErrorCode:错误码定义

3.10.3.14. 是否连接外接密码键盘

函数原型 boolean linkedExtPinpad();


是否连接外接密码键盘
功能说明
只对使用外接键盘操作时有效
入参 无
参数说明
出参 无
返回值 已返回 true,否则返回 false
补充说明

3.10.3.15. 配置外接密码键盘属性

boolean setPinpadConfig(boolean enterKeyClearDisplay , boolean


函数原型
enableKeyTone );
功能说明 配置外接密码键盘属性
enterKeyClearDisplay – 是否可以按确认键清空外置密码键盘上
入参
的显示内容
参数说明 enableKeyTone – 是否使能外接密码键盘的按键音,仅对外接
密码见怕有效
出参 无
返回值 设置成功返回 true,失败返回 false
补充说明

3.10.3.16. 显示信息

函数原型 boolean display(String line1, String line2);


显示信息
功能说明
仅对外界密码键盘有效
参数说明 入参 line1 – 外接密码键盘第 1 行显示信息

43
中国建设银行智能 POS 终端接口规范

Line2 – 外接密码键盘第 2 行显示信息


出参 无
返回值 显示成功返回 true,失败返回 false
补充说明

3.10.3.17. 重置密码键盘

函数原型 boolean reset();


重置密码键盘
复位 pinpad 物理设备。仅仅复位当前 pinpad 的运行时状态,"不改变"其
功能说明
下的各个 KAP 实例中的数据和状态。 若当前 pinpad 逻辑设备在分段的
MAC 操作流程中,MAC 操作流程也将被复位
入参 无
参数说明
出参 无
返回值 复位成功返回 true,失败返回 false
补充说明

3.11 PBOC 流程

包名定义:com.ccb.deviceservice.aidl.pboc.IPBOC

3.11.1. 功能描述

用来处理金融卡(带接触式芯片和非接功能)的金融 EMV 交易流程。

3.11.2. 接口列表

函数原型 功能说明
void waitCard(Bundle cardOption, int timeout, PBOC 检卡
OnWaitCardListener listener);
void stopWaitCard(); 取消 PBOC 检卡
void readUPCard(OnUPCardListener listener); 读取手机芯片卡

void startPBOC(int transType, Bundle intent, 启动 PBOC 流程


OnPBOCHandler handler);
void abortPBOC(); 终止 PBOC 流程

boolean updateAID(int operation, String aid); 更新 AID 参数


boolean updateRID(int operation, String rid); 更新 CA/公钥参数
void importAmount(long amount); 导入交易金额

44
中国建设银行智能 POS 终端接口规范

void importAppSelect(int index); 导入应用选择结果

void importPin(int option, byte[] pin); 导入 PIN


void importCertConfirmResult(intoption); 导入身份证件校验结果
void importCardConfirmResult(boolean pass); 导入卡信息确认结果

void inputOnlineResult(Bundle onlineResult, 导入联机应答数据


OnOnlineResultHandler handler);
void setEMVData(List<String> tlvList); 设置 EMV 内核参数
void getAppTLVList(String[] tagList); 获取内核 TLV 列表数据
byte[] getCardData(String tagName); 获取卡片 EMV 数据元

String getPBOCData(String tagName); 获取 PBOC 流程数据


CandidateAppInfo getCandidateAppInfo(); 获取卡片候选应用

3.11.3. 接口说明

3.11.3.1. PBOC 检卡

函数原型 void waitCard(Bundle cardOption, int timeout, OnWaitCardListener listener);


功能说明 PBOC 检卡,等待用户刷卡、插卡或挥卡
参数说明 入参 cardOption - 支持的卡类型,磁条卡、IC卡和非接卡
<ul>
<li>supportMagCard(boolean) - 是否支持磁条卡</li>
<li>supportICCard(boolean) - 是否支持IC卡</li>
<li>supportRFCard(boolean) - 是否支持非接卡</li>
<li>deviceName(String) - 非接读卡器设备名,参见
RFDeviceName类</li>
<li>insertDeviceName(String) – 接触式IC卡设备名称,详见
insertcard包下Constant.DeviceName类,默认USERCARD</li>
</ul>
timeout – 检卡等待超时时间,单位秒
listener – 检卡结果监听器
出参 无
返回值 无
补充说明 包名定义:com.ccb.deviceservice.aidl.pboc.OnWaitCardListener
/**
* 检卡过程监听接口定义
*/
interfaceOnWaitCardListener {

45
中国建设银行智能 POS 终端接口规范

/**
* 检测到磁条卡
* @param track - 磁卡数据
* <ul>
* <li>PAN(String) - 主账号(卡号)</li>
* <li>TRACK1(String) - 磁道1数据</li>
* <li>TRACK2(String) - 磁道2数据</li>
* <li>TRACK3(String) - 磁道3数据</li>
* <li>SERVICE_CODE(String) - 服务码</li>
* <li>EXPIRED_DATE(String) - 卡片有效期</li>
* </ul>
*/
void onCardSwiped(in Bundle track);

/**
* IC卡上电成功
*/
void onCardPowerUp();

/**
* 非接卡激活成功
*/
void onCardActivate();

/**
* 检卡超时
*/
void onTimeout();

/**
* 检卡出错
* @param error - 错误码
* <ul>
* <li>SERVICE_CRASH(99) - 服务崩溃</li>
* <li>REQUEST_EXCEPTION(100) - 请求异常</li>
* <li>MAG_SWIPE_ERROR(1) - 刷卡失败</li>
* <li>IC_INSERT_ERROR(2) - 插卡失败</li>
* <li>IC_POWERUP_ERROR(3) - 卡上电失败</li>
* <li>RF_PASS_ERROR(4) - 非接挥卡失败</li>
* <li>RF_ACTIVATE_ERROR(5) - 非接卡激活失败</li>
* <li>RF_NEED_RETRY(6) – 需要重新检卡</li>
* <li>RF_MULTI_CARD(7) – 感应区内多卡存在</li>
* </ul>
* @param message - 错误描述

46
中国建设银行智能 POS 终端接口规范

*/
void onError(int error, String message);
}

3.11.3.2. 停止检卡

函数原型 void stopWaitCard();


功能说明 停止检卡流程
参数说明 入参 无
出参 无
返回值
补充说明

3.11.3.3. 读取手机芯片卡

函数原型 void readUPCard(OnUPCardListener listener);


功能说明 读取手机芯片卡
参数说明 入参 listener – 读卡结果监听器
出参 无
返回值
补充说明 包名定义:com.ccb.deviceservice.aidl.pboc.OnUPCardListener

/**
* 读手机芯片卡结果监听器
*/
interface OnUPCardListener {
/**
* 读卡成功回调
* @param data - 芯片卡卡数据
* <ul>
* <li>PAN(String) - 主账号(卡号)</li>
* <li>TRACK2(String) - 磁道2数据</li>
* <li>TRACK3(String) - 磁道3数据</li>
* <li>CARD_SN(String) - 卡片序列号</li>
* <li>EXPIRED_DATE(String) - 卡片有效期</li>
* <li>TLV_DATA(String) - 带标签(DF32,DF33,DF34)TLV数据</li>
* </ul>
*/
void onRead(out Bundle data);

47
中国建设银行智能 POS 终端接口规范

/**
* 读卡错误回调
* @param error - 错误码
* <ul>
* <li>ERROR_DETECT_CARD(1) - 识别卡失败</li>
* <li>ERROR_READ_SN(2) - 读卡序列号失败</li>
* <li>ERROR_READ_TRACK(3) - 读卡信息失败</li>
* <li>ERROR_SERVICE_CRASH(4) - 设备服务异常</li>
* </ul>
* @param message - 错误描述
*/
void onError(int error, String message);
}

参见 com.ccb.deviceservice.aidl.pboc.Constant 下的常量定义:
Constant.ErrorCode:错误码定义;

3.11.3.4. 启动 PBOC 交易流程

函数原型 void startPBOC(int transType, Bundle intent, OnPBOCHandler handler);


功能说明 启动 PBOC 交易流程
参数说明 入参 transType – 交易类型
intent – 交易请求参数
handler – 交易流程回调处理
出参 无
返回值 无
补充说明 1、 交易类型
* <ul>
* <li>EC_BALANCE(1) - 查询电子现金余额</li>
* <li>TRANSFER(2) - 转账</li>
* <li>EC_LOAD(3) - 指定账户圈存</li>
* <li>EC_LOAD_U(4) - 非制定账户圈存</li>
* <li>EC_LOAD_CASH(5) - 现金圈存/现金充值</li>
* <li>EC_LOAD_CASH_VOID(6) - 圈存撤销</li>
* <li>PURCHASE(7) - 消费</li>
* <li>Q_PURCHASE(8) - 快速支付</li>
* <li>CHECK_BALANCE(9) - 余额查询</li>
* <li>PRE_AUTH(10) - 预授权交易</li>
* <li>SALE_VOID(11) - 消费撤销</li>

48
中国建设银行智能 POS 终端接口规范

* <li>SIMPLE_PROCESS(12) - 简易流程交易</li>
* <li>Q_QUERY(13) - qPBOC查询</li>
* <li>ICC_QUERY(20) - 卡日志查询</li>
* </ul>
2、 请求参数说明
* <ul>
* <li>cardType(int):卡类型,CARD_INSERT(0)-接触式IC卡,CARD_RF(1)-非
接触式卡</li>
* <li>authAmount(int):授权金额(交易金额)</li>
* <li>isSupportQ(boolean):是否支持QPBOC</li>
* <li>isSupportSM(boolean):是否支持国密</li>
* <li>isECLoad(boolean):是否读取圈存日志</li>
* <li>isSupportEC(boolean):是否支持电子现金</li>
* <li>isQPBOCForceOnline(boolean):QPBOC是否支持强制联机</li>
* <li>merchantName(String):商户名称</li>
* <li>merchantId(String):商户号</li>
* <li>terminalId(String):终端号</li>
* <li>outputEmvLog(boolean):是否输入完整内核日志到sd卡下</li>
* <li>isPBOCForceOnline(boolean):接触是否支持强制联机</li>
* <li>isForceInputPin(boolean):是否强制输密</li>
* <li>needCDCVM(boolean):是否支持cdcvm</li>
* <li>isPreAgain(boolean):是否二次出卡,Amex Express Pay使用</li>
* </ul>
3、 交易流程回调处理
包名定义:com.ccb.deviceservice.aidl.pboc.OnPBOCHandler
/**
* PBOC交易流程回调接口
*/
interface OnPBOCHandler {
/**
* 请求输入金额
*/
void onRequestAmount();

/**
* 请求应用选择
* @param appList - 应用列表
*/
void onSelectApplication(in List<String> appList);

/**
* 要求确认卡信息
* @param info - 卡片信息
* <ul>
* <li>PAN(String) - 主账号(卡号)</li>

49
中国建设银行智能 POS 终端接口规范

* <li>TRACK2(String) - 磁道2数据</li>
* <li>CARD_SN(String) - 卡片序列号</li>
* <li>SERVICE_CODE(String) - 服务码</li>
* <li>EXPIRED_DATE(String) - 卡片有效期</li>
* <li>CARD_HOLDER_NAME (String) –持卡人姓名</li>
* </ul>
*/
void onConfirmCardInfo(in Bundle info);

/**
* 要求输入PIN
* @param isOnlinePin 是否是联机pin
* @param retryTimes 脱机pin的输入次数
*/
void onRequestInputPIN(boolean isOnlinePin, int retryTimes);

/**
* 要求确认持卡人证件
* @param certType - 认证类型
* @param certInfo - 认证信息
*/
void onConfirmCertInfo(String certType, String certInfo);

/**
* 联机处理请求
* @param aaResult 卡片分析结果,联机数据
* <ul>
* <li>RESULT(int) - 结果类型:QPBOC_ARQC(201) - qPBOC联机请求;
AARESULT_ARQC(2) - 行为分析结果ARQC</li>
* <li>PAN(String) –卡号</li>
* <li>TRACK2(String) –二磁道数据</li>
* <li>CARD_SN (String) –卡序列号</li>
* <li>CARD_HOLDER_NAME (String) –持卡人姓名</li>
* <li>EXPIRED_DATE (String) –卡片失效期</li>
* <li>DATE (String) –交易日期,格式:yyMMdd</li>
* <li>TIME (String) –交易时间,格式:HHmmss</li>
* <li>CARD_ORG(String) –卡组织</li>
* <li>ARQC_TLV(String) –联机请求卡片55域TLV数据</li>
* <li>REVERSAL_TLV(String) - IC卡冲正TLV数据</li>
* </ul>
*/
void onRequestOnlineProcess(in Bundle aaResult);

/**

50
中国建设银行智能 POS 终端接口规范

* PBOC交易结果,见于简易流程,qPBOC,以及交易过程失败等
* @param result - 交易结果
* <ul>
* <li>EMV_ICC_QUERY (8) - 读卡片交易日志</li>
* <li>EMV_COMPLETE(9) - EMV简易流程结束</li>
* <li>EMV_ERROR(11) - EMV内核错误</li>
* <li>EMV_FALLBACK(12) - FALLBACK </li>
* <li>EMV_DATA_AUTH_FAIL(13) - 脱机数据认证失败</li>
* <li>EMV_APP_BLOCKED(14) - 应用被锁定</li>
* <li>EMV_NOT_ECCARD(15) - 非电子现金卡</li>
* <li>EMV_UNSUPPORT_ECCARD(16) - 该交易不支持电子现金卡</li>
* <li>EMV_AMOUNT_EXCEED_ON_PURELYEC(17) - 纯电子现金卡消费金额
超限</li>
* <li>EMV_SET_PARAM_ERROR(18) - 参数设置错误(9F7A) </li>
* <li>EMV_PAN_NOT_MATCH_TRACK2(19) - 主账号与二磁道不符</li>
* <li>EMV_CARD_HOLDER_VALIDATE_ERROR(20) - 持卡人认证失败</li>
* <li>EMV_PURELYEC_REJECT(21) - 纯电子现金卡被拒绝交易</li>
* <li>EMV_BALANCE_INSUFFICIENT(22) - 余额不足</li>
* <li>EMV_AMOUNT_EXCEED_ON_RFLIMIT_CHECK(23) - 交易金额超过非
接限额检查</li>
* <li>EMV_CARD_BIN_CHECK_FAIL(24) - 卡BIN检查失败</li>
* <li>EMV_CARD_BLOCKED(25) - 卡被锁</li>
* <li>EMV_MULTI_CARD_ERROR(26) - 多卡冲突</li>
* <li>EMV_BALANCE_EXCEED(27) - 余额超出</li>
* <li>EMV_NEED_TERMINATE_TRANSACTION(28) – 需要终止交易</li>
* <li>EMV_NEED_SEARCH_AGAIN(29) – 需要重新寻卡</li>

* <li>EMV_RFCARD_PASS_FAIL(60) - 挥卡失败</li>
* <li> EMV_NO_APPLICATION (61) - 读卡片日志失败,无卡片应用</li>
* <li>EMV_NO_ICC_RECORD (62) - 读卡片日志失败,无卡片记录</li>
* <li>EMV_QUERY_ICC_ERROR (63) - 读卡片日志失败,流程错误</li>
* <li>EMV_READ_TRACK2_FAIL (64) – 读卡片二磁道数据失败</li>
* <li>EMV_NOT_FINISHED (70) – EMV流程未结束</li>
* <li>EMV_ERR_FCI_FMT (71) – FCI格式错误</li>

* <li>AARESULT_TC(0) - 行为分析结果,交易批准(脱机)</li>
* <li>AARESULT_AAC(1) - 行为分析结果,交易拒绝</li>
* <li>AARESULT_ARQC(2) - 行为分析结果,请求联机</li>
* <li>REFER_TO_DEVICE(150) - 参考手机设备信息</li>
* <li>QPBOC_ARQC (201) - qPBOC交易结果,请求联机</li>
* <li>QPBOC_AAC(202) - qPBOC交易结果,交易拒绝</li>
* <li>QPBOC_ERROR(203) - qPBOC交易结果,交易失败</li>
* <li>QPBOC_TC(204) - qPBOC交易结果,交易批准</li>
* <li>QPBOC_CONT(205) - qPBOC结果,转接触式卡</li>

51
中国建设银行智能 POS 终端接口规范

* <li>QPBOC_NO_APP(206) - qPBOC交易结果,无应用(可转UP Card)</li>


* <li>QPBOC_NOT_CPU_CARD(207) - qPBOC交易结果,该卡非TYPE B/PRO
卡</li>
* <li>QPBOC_TERMINATED (224) - 交易终止:可能是无应用或其他原因</li>

* <li>PAYPASS_COMPLETE (301) - PAYPASS简易流程完成</li>


* <li>PAYPASS_MAG_ARQC (302) - PAYPASS磁卡模式ARQC</li>
* <li>PAYPASS_EMV_ARQC (303) - PAYPASS EMV模式ARQC</li>
* <li>PAYPASS_EMV_TC (304) - PAYPASS EMV模式TC</li>
* <li>PAYPASS_EMV_AAC (305) - PAYPASS EMV模式AAC</li>
* <li>PAYPASS_EMV_ERROR (306) - PAYPASS EMV模式错误</li>
* <li>PAYPASS_END_APP (307) - PAYPASS EMV模式交易终止,当
onProcessMsg为SEE PHONE信息时,且交易结果为PAYPASS_END_APP时,应请求
查看手机信息,之后继续自动发起第二笔交易</li>
* <li>PAYPASS_TRYOTHER (308) - 尝试其他接口</li>

* <li>AMEX_EXPRESS_PAY_XP2_EMV_ARQC (401) - AMEX EXPRESS PAY


XP2 EMV ARQC</li>
* <li>AMEX_EXPRESS_PAY_TC (402) - AMEX EXPRESS PAY TC</li>
* <li>AMEX_EXPRESS_PAY_AAC (403) - AMEX EXPRESS PAY AAC</li>
* <li>AMEX_EXPRESS_PAY_END_APP (404) - 终止交易</li>
* <li>AMEX_EXPRESS_PAY_TRYOTHER_CARD (405) - 尝试其他卡片</li>
* <li>AMEX_EXPRESS_PAY_TRYOTHER_INTERFACE (406) - 尝试其他接口
</li>
* <li>AMEX_EXPRESS_PAY_XP2_MS_ARQC (407) - AMEX EXPRESS PAY
XP2 MS ARQC</li>
* <li>AMEX_EXPRESS_PAY_XPM_MS_ARQC (408) - AMEX EXPRESS PAY
XPM MS ARQC</li>
* <li>AMEX_EXPRESS_PAY_XPM_EMV_ARQC (409) - AMEX EXPRESS PAY
XPM EMV ARQC</li>
* </ul>
*
* @param data 交易结果数据
* <ul>
* <li>RESULT_TLV(String) - IC卡交易批准卡片返回数据</li>
* <li>REVERSAL_TLV(String) - IC卡冲正TLV数据</li>
* <li>ERROR(String) - 错误描述(PBOC流程错误返回) </li>

* <li>ICC_LOG_COUNT(String) -交易日志记录数(读卡片交易日志返回)</li>
* <li>ICC_LOG_RECORDS(String) - 交易日志记录列表(TLV格式)( 读卡片交易
日志返回)</li>

// 简易流程 / QPBOC_AAC / AARESULT_AAC / PAYPASS AAC / AMEX AAC


情况下返回以下数据

52
中国建设银行智能 POS 终端接口规范

* <li>PAN(String) –卡号</li>
* <li>TRACK2(String) –二磁道数据</li>
* <li>CARD_SN (String) –卡序列号</li>
* <li>CARD_HOLDER_NAME (String) –持卡人姓名</li>
* <li>EXPIRED_DATE (String) –卡片失效期</li>
* <li>DATE (String) –交易日期,格式:yyMMdd</li>
* <li>TIME (String) –交易时间,格式:HHmmss</li>
* <li>CARD_ORG(String) –卡组织</li>

* </ul>
*/
void onTransactionResult(int result, in Bundle data);
}

4.建行交易仅联机要求说明
建行要求智能POS终端的所有交易(包括银联卡和外卡交易)和所有交易方式(插卡
和非接)都不允许脱机批准。故统一sdk服务需根据该接口的请求入参
isPBOCForceOnline(插卡强制联机标识)及isQPBOCForceOnline(非接强制联机
标识)决定交易是否强制联机(强制联机时,设置9F35标签值为0x21,标识终端仅联
机)。(目前应用入参都为强制联机,所以即便交易最终结果为TC时,也需按照
AAC的结果返回,避免出现脱机批准)

参见 com.ccb.deviceservice.aidl.pboc.Constant 下的常量定义:
Constant.TransType:交易类型定义;
Constant.PBOCData:PBOC 数据元标签定义;
Constant.EmvResult:EMV 交易流程结果码定义;

3.11.3.5. 终止 PBOC 流程

函数原型 void abortPBOC();


功能说明 终止 PBOC 流程
参数说明 入参 无
出参 无
返回值 无
补充说明

3.11.3.6. 更新 AID 参数

函数原型 boolean updateAID(int operation, String aid);


功能说明 更新终端 AID 参数
参数说明 入参 operation – 操作标识:增、删、清空

53
中国建设银行智能 POS 终端接口规范

* <ul>
* <li>1:新增</li>
* <li>2:删除</li>
* <li>3:清空</li>
* </ul>
aid – AID 参数,格式见补充说明
出参 无
返回值 更新成功返回 true,更新失败返回 false。
补充说明 AID 参数由 TLV 格式构成的字符串,包括如下 TAG:
1) 9F06 – AID
2) DF01 – 部分选择标志
3) 9F08,9F09 – 应用版本号
4) DF11 – 终端行为代码 TAC-默认
5) DF12 – 终端行为代码 TAC-联机
6) DF13 – 终端行为代码 TAC-拒绝
7) 9F1B – 最低限额
8) DF15 – 随机选择阈值
9) DF16 - 随机选择最大目标百分数
10) DF17 - 随机选择目标百分数
11) DF14 – DDOL
12) DF18 – 终端性能
13) 9F7B - 电子现金交易限额 EC 限额
14) DF19 - 非接触脱机最低限额
15) DF20 - 非接触交易限额
16) DF21 - 非接触 CVM 限额
示例 AID 值:
9F0608A000000333010106DF0101009F08020020DF1105D84000A800DF1205D84004F8
00DF130500100000009F1B0400000001DF150400000000DF160199DF170199DF14039F3
704DF1801019F7B06000000100000DF1906000000100000DF2006000999999999DF2106
000000100000

参见 com.ccb.deviceservice.aidl.pboc.Constant 下的常量定义:
Constant.Operation:操作类型定义;

3.11.3.7. 更新 CA 公钥参数

函数原型 boolean updateRID(int operation, String rid);


功能说明 更新终端 CA 公钥参数
参数说明 入参 operation – 操作标识:增、删、清空
* <ul>
* <li>1:新增</li>
* <li>2:删除</li>
* <li>3:清空</li>
* </ul>
rid – CA 公钥参数,格式见补充说明

54
中国建设银行智能 POS 终端接口规范

出参
返回值 更新成功返回 true,更新失败返回 false。
补充说明 RID 参数由 TLV 格式构成的字符串,包括如下 TAG:
1) 9F06 – RID
2) 9F22 – 公钥索引
3) DF02 – 公钥模
4) DF03 – 哈希校验和
5) DF04 – 公钥指数
6) DF05 – 公钥失效期
示例 RID 值:
9F0605A0000000049F220106DF05083230313631323331DF060101DF070101DF0281F8C
B26FC830B43785B2BCE37C81ED334622F9622F4C89AAE641046B2353433883F307FB
7C974162DA72F7A4EC75D9D657336865B8D3023D3D645667625C9A07A6B7A137CF0
C64198AE38FC238006FB2603F41F4F3BB9DA1347270F2F5D8C606E420958C5F7D50A
71DE30142F70DE468889B5E3A08695B938A50FC980393A9CBCE44AD2D64F630BB33
AD3F5F5FD495D31F37818C1D94071342E07F1BEC2194F6035BA5DED3936500EB82D
FDA6E8AFB655B1EF3D0D7EBF86B66DD9F29F6B1D324FE8B26CE38AB2013DD13F
611E7A594D675C4432350EA244CC34F3873CBA06592987A1D7E852ADC22EF5A2EE
28132031E48F74037E3B34AB747FDF040103DF0314F910A1504D5FFB793D94F3B5007
65E1ABCAD72D9

参见 com.ccb.deviceservice.aidl.pboc.Constant 下的常量定义:
Constant.Operation:操作类型定义;

3.11.3.8. 导入交易金额

函数原型 void importAmount(long amount);


功能说明 导入交易金额
参数说明 入参 amount – 交易金额,以分为单位
出参 无
返回值 无
补充说明

3.11.3.9. 导入应用选择结果

函数原型 void importAppSelect(int index);


功能说明 导入应用选择结果
参数说明 入参 index – 应用选择序号从 1 开始,0 为取消
出参 无
返回值 无

55
中国建设银行智能 POS 终端接口规范

补充说明

3.11.3.10. 导入 PIN 输入

函数原型 void importPin(int option, byte[] pin);


功能说明 导入 PIN 输入
参数说明 入参 option(int) - 操作选项
* <ul>
* <li> CANCEL(0) - 取消</li>
* <li> CONFIRM(1) - 确认</li>
* </ul>
pin – 输入的联机或脱机 PIN
出参 无
返回值 无
补充说明 参见 com.ccb.deviceservice.aidl.pboc.Constant 下的常量定义:
Constant.Option:操作选项定义;

3.11.3.11. 导入身份验证结果

函数原型 void importCertConfirmResult(intoption);


功能说明 导入身份验证结果
参数说明 入参 option - 确认结果
<ul>
<li> CANCEL(0) - 取消,跳过(BYPASS) </li>
<li> CONFIRM(1) - 确认持卡人身份</li>
<li> NOTMATCH(2) - 身份信息不符</li>
</ul>
出参 无
返回值 无
补充说明 参见 com.ccb.deviceservice.aidl.pboc.Constant 下的常量定义:
Constant.Option:操作选项定义;

3.11.3.12. 导入卡信息确认结果

函数原型 void importCardConfirmResult(boolean pass);


功能说明 导入卡片信息确认结果
参数说明 入参 pass – 是否确认卡信息
出参 无

56
中国建设银行智能 POS 终端接口规范

返回值 无
补充说明

3.11.3.13. 导入联机应答数据

函数原型 void inputOnlineResult(Bundle onlineResult, OnOnlineResultHandler


handler);
功能说明 导入联机应答数据结果,由卡片决定交易批准、拒绝。
参数说明 入参 onlineResult – 联机结果
handler – 联机结果处理器
出参 无
返回值 无
补充说明 1、 联机结果
onlineResult - 联机结果
* <ul>
* <li> isOnline(boolean) - 是否联机</li>
* <li> respCode(String) - 应答码</li>
* <li> authCode(String) - 授权码</li>
* <li> field55(String) - 55 域应答数据</li>
* </ul>
2、 联机结果处理器
包名定义:com.ccb.deviceservice.aidl.pboc.OnOnlineResultHandler
/**
* PBOC 流程联机应答数据处理
*/
interface OnOnlineResultHandler {
/**
* 联机应答数据处理回调<br/>
* @param result - 处理结果
* <ul>
* <li>ONLINE_RESULT_TC(0) - 联机成功</li>
* <li>ONLINE_RESULT_AAC(1) - 联机拒绝</li>
* <li>ONLINE_RESULT_OFFLINE_TC(101) - 联机失败,脱机成功</li>
* <li>ONLINE_RESULT_SCRIPT_NOT_EXECUTE(102) - 脚本未执行</li>
* <li>ONLINE_RESULT_SCRIPT_EXECUTE_FAIL(103) - 脚本执行失败</li>
* <li>ONLINE_RESULT_NO_SCRIPT(104) - 联机失败,未下送脚本</li>
* <li>ONLINE_RESULT_TOO_MANY_SCRIPT(105) - 联机失败,脚本超过 1
个</li>
* <li>ONLINE_RESULT_TERMINATE(106) - 联机失败,交易终止(GAC 返回
非 9000,要提示交易终止,0x8F) </li>
* <li>ONLINE_RESULT_ERROR(107) - 联机失败,EMV 内核错误</li>
* </ul>
* @param data - 结果数据
* <ul>
* <li>RESULT_TLV(String) - 交易结果 TLV 数据</li>

57
中国建设银行智能 POS 终端接口规范

* <li>SCRIPT_TLV(String) - 脚本结果 TLV 数据</li>


* <li>REVERSAL_TLV(String) - 冲正 TLV 数据</li>
* </ul>
*/
void onFinalResult(int result, in Bundle data);
}

参见 com.ccb.deviceservice.aidl.pboc.Constant 下的常量定义:
Constant.PBOCData:PBOC 数据元标签定义;
Constant.OnlineResult:EMV 联机处理结果码定义;

3.11.3.14. 设置 EMV 内核参数

函数原型 void setEMVData(List<String> tlvList);


功能说明 设置 EMV 内核参数
参数说明 入参 tlvList – 内核参数,详见补充说明
出参 无
返回值 无
补充说明 可设置 TLV 参数标签如下:
9F15:商户类别码
9F16:商户号
9F4E:商户名称
9F1C:终端号
9F01:收单行号
9F1E:IFD 序列号
9F35:终端类型
9F33:终端性能
9F40:终端附加性能
9F1A:终端国家代码
5F2A:交易货币代码
5F36:交易货币指数
9F3C:交易参考货币代码
9F3D:交易参考货币指数

3.11.3.15. 获取内核数据

函数原型 String getAppTLVList(String[] tagList);


功能说明 获取内核 TLV 数据列表
参数说明 入参 tagList – 要获取的内核数据 tag 列表
出参
返回值 EMV 内核数据

58
中国建设银行智能 POS 终端接口规范

补充说明

3.11.3.16. 获取卡片 EMV 数据元

函数原型 byte[] getCardData(String tagName);


功能说明 获取卡片 EMV 数据元
参数说明 入参 tagName – 标签数据元名称
出参 无
返回值 卡片 EMV 数据元
补充说明

3.11.3.17. 获取 PBOC 流程数据

函数原型 String getPBOCData(String tagName);


功能说明 获取 PBOC 流程数据,如卡号、有效期、卡片序列号等。
EMV 必须执行到相应流程才能获取到对应的卡片数据,否则返回空。
参数说明 入参 tagName – 标签名称
* <ul>
* <li> PAN(String) - 卡号</li>
* <li> TRACK2(String) - 磁道二数据</li>
* <li> CARD_SN(String) - 卡片序列号</li>
* <li> EXPIRED_DATE(String) - 有效期</li>
* <li> DATE(String) - 日期</li>
* <li> TIME(String) - 时间</li>
* <li> KERNID (String) – kernelId 名称(如:VISA)</li>
* <li> APP_LABEL(String) – 应用标签</li>
* <li> APN(String) – apn</li>
* <li> BALANCE(String) - 电子现金余额</li>
* <li> CURRENCY(String) - 币种</li>
* <li> SEC_BALANCE(String) - 第二币种电子现金余额</li>
* <li> SEC_CURRENCY(String) – 第二币种</li>
* <li> CAP_INDEX (String) – 公钥索引</li>
* <li> RID(String) – RID</li>
* <li> CARD_ORG(String) – 卡组织</li>
* <li> CVM(String) – 持卡人验证方法</li>
* <li> CARD_PRODUCT(String) – 卡产品</li>
* <li> CARD_PRODUCT_TYPE(String) – 卡产品类别,赋值详见
Constant.CardProductType 类</li>
* <li> CARD_HOLDER_NAME(String) – 持卡人姓名</li>
* <li> BALANCE_LIMIT(String) – 圈存上限</li>
* <li> ARQC_DATA(String) – arqc 数据</li>

59
中国建设银行智能 POS 终端接口规范

* </ul>

出参 无
返回值 PBOC 流程中内核返回的数据
补充说明 参见 com.ccb.deviceservice.aidl.pboc.Constant 下的常量定义:
Constant.PBOCData:PBOC 数据元标签定义;
Constant.CardOrg:卡组织常量定义;
卡组织常量:
* <ul>
* <li> VIS - VISA 卡(Constant.CardOrg.VISA)</li>
* <li> MCC -MASTER 卡(Constant.CardOrg.MASTER)</li>
* <li> MAE - AMEX 卡(Constant.CardOrg.AMEX)</li>
* <li> JCB - JCB 卡(Constant.CardOrg.JCB)</li>
* <li> CUP – 银联卡(Constant.CardOrg.CUP)</li>
* <li> 000 – 未知卡(Constant.CardOrg.UNKNOWN)</li>
* </ul>
Constant.CVM:持卡人验证方法常量定义;
持卡人验证方法常量:
* <ul>
* <li> CVM_NOCVM – 无需 CVM (Constant. CVM. CVM_NOCVM)</li>
* <li> CVM_SIGN – 签名 (Constant. CVM. CVM_SIGN)</li>
* <li> CVM_OFFLINE_PIN – 脱机 PIN (Constant. CVM. CVM_OFFLINE_PIN)</li>
* <li> CVM_ONLINE_PIN – 联机 PIN (Constant. CVM. CVM_ONLINE_PIN)</li>
* <li> CVM_PBOC_CERT – 证件验证 (Constant. CVM. CVM_PBOC_CERT)</li>
* <li> CVM_CONFCODE – 查看手机 (Constant. CVM. CVM_CONFCODE)</li>
* </ul>

3.11.3.18. 获取卡片候选应用信息

函数原型 CandidateAppInfo getCandidateAppInfo();


功能说明 获取 IC 卡卡片候选应用信息,如 AID,APN 等。
用于电子签名上送和小额免签免密支付。
参数说明 入参 无
出参 无
返回值 卡片候选应用信息,具体见{@link CandidateAppInfo}定义

补充说明

3.12 设备信息

包名定义:com.ccb.deviceservice.aidl.deviceinfo.IDeviceInfo

60
中国建设银行智能 POS 终端接口规范

3.12.1. 功能描述

提供获取终端的序列号、设备型号、厂商、系统版本、固件版本等相关设备信息。

3.12.2. 接口列表

函数原型 功能说明
String getSerialNo(); 获取终端设备序列号
String getIMSI(); 获取终端 IMSI 号
String getIMEI(); 获取终端 IMEI 号
String getICCID(); 获取终端 SIM 卡 ICCID 号
String getManufacture(); 获取厂商名称

String getModel(); 获取终端型号


String getAndroidOSVersion(); 获取 Android 操作系统版本
String getAndroidKernelVersion(); 获取 Android 内核版本

String getROMVersion(); 获取终端 ROM 版本


String getFirmwareVersion(); 获取终端固件版本

String getHardwareVersion(); 获取终端硬件版本


boolean updateSystemTime(String date, String time); 更新终端系统时间

TusnData getTUSN(int mode, in byte[] input); 获取银联终端唯一终端号 TUSN


boolean setVirtualKey(Bundle bundle); 设置虚拟按键
String getHardWareSn(String deviceName); 获取设备硬件序列号
boolean enableStatusBar(boolean enable); 设置状态栏下拉状态

3.12.3. 接口说明

3.12.3.1. 获取设备序列号

函数原型 String getSerialNo();


功能说明 获取终端设备序列号
参数说明 入参 无
出参 无
返回值 终端设备序列号

61
中国建设银行智能 POS 终端接口规范

补充说明

3.12.3.2. 获取 IMSI 号

函数原型 String getIMSI();


功能说明 获取终端 IMSI 号
参数说明 入参 无
出参 无
返回值 终端 IMSI 号
补充说明

3.12.3.3. 获取 IMEI 号

函数原型 String getIMEI();


功能说明 获取终端 IMEI 号
参数说明 入参 无
出参 无
返回值 终端 IMEI 号
补充说明

3.12.3.4. 获取 ICCID 号

函数原型 String getICCID();


功能说明 获取终端上 SIM 卡的 ICCID 号
参数说明 入参 无
出参 无
返回值 终端上 SIM 卡的 ICCID 号
补充说明

3.12.3.5. 获取厂商名称

函数原型 String getManufacture();


功能说明 获取设备厂商名称
参数说明 入参 无

62
中国建设银行智能 POS 终端接口规范

出参 无
返回值 设备厂商名称
补充说明

3.12.3.6. 获取终端型号

函数原型 String getModel();


功能说明 获取终端设备型号
参数说明 入参 无
出参 无
返回值 设备厂商名称
补充说明

3.12.3.7. 获取 Android 操作系统版本

函数原型 String getAndroidOSVersion();


功能说明 获取 Android 操作系统版本号
参数说明 入参 无
出参 无
返回值 终端 Android 操作系统版本号
补充说明

3.12.3.8. 获取 Android 内核版本

函数原型 String getAndroidKernelVersion();


功能说明 获取 Android 内核版本号
参数说明 入参 无
出参 无
返回值 终端 Android 内核版本号
补充说明

3.12.3.9. 获取 ROM 版本号

函数原型 String getROMVersion();

63
中国建设银行智能 POS 终端接口规范

功能说明 获取 ROM 版本号


参数说明 入参 无
出参 无
返回值 终端 ROM 版本号
补充说明

3.12.3.10. 获取终端固件版本

函数原型 String getFirmwareVersion();


功能说明 获取终端固件版本
参数说明 入参 无
出参 无
返回值 终端固件版本号
补充说明

3.12.3.11. 获取终端硬件版本

函数原型 String getHardwareVersion();


功能说明 获取终端硬件版本
参数说明 入参 无
出参 无
返回值 终端硬件版本
补充说明

3.12.3.12. 更新终端系统时间

函数原型 boolean updateSystemTime(String date, String time);


功能说明 更新终端系统时间
参数说明 入参 date – 日期:yyyyMMdd
time – 时间:HHmmss
出参 无
返回值 更新成功返回 true,失败返回 false
补充说明

64
中国建设银行智能 POS 终端接口规范

3.12.3.13. 获取银联终端唯一终端号 TUSN

函数原型 TusnData getTUSN(int mode, in byte[] input);


功能说明 获取银联终端唯一终端号 TUSN
参数说明 入参 mode 模式, 预留参数, 需为0
input 指 对 TUSN 计算 MAC 时,参与计算的随机数(随机因
子),允许范围:4~10 字节
出参 无
返回值 成功返回 TUSN 数据,失败返回 null
补充说明 TusnData 说明:
public TusnData {
/** 终端类型: 1 为旧终端 2 为新终端 */
private int mTerminalType;
/** 使用终端 TUSN_AUK 对传入随机数与 TUSN 进行 MAC 运算的
结果,对于旧终端,为 8 个空格 */
private String mMac;
/** 唯一终端序列号 */
private String mTusn;

public TusnData() {}

public void setTerminalType(int type) {


mTerminalType = type;
}

public void setMac(String mac) {


mMac = mac;
}

public void setTusn(String tusn) {


mTusn = tusn;
}

public String getMac() {


return mMac;
}

public String getTusn() {


return mTusn;
}

public int getTerminalType() {


return mTerminalType;
}
}

65
中国建设银行智能 POS 终端接口规范

3.12.3.14. 设置虚拟按键

函数原型 void setVirtualKey(Bundle bundle);


功能说明 设置终端虚拟按键
参数说明 入参 bundle – 请求参数
<ul>
<li>enableKey(boolean) - 是否显示虚拟按键</li>
</ul>
出参 无
返回值 无
补充说明

3.12.3.15. 获取设备硬件序列号

函数原型 String getHardWareSn(String deviceName);


功能说明 获取设备硬件序列号
参数说明 入参 deviceName - 设备名称,详见 pinpad 模块 Constant.DeviceName
定义
出参 无
返回值 获取成功返回设备硬件序列号,失败返回空串
补充说明

3.12.3.16. 设置状态栏下拉状态

函数原型 boolean enableStatusBar(boolean enable);


功能说明 设置状态栏下拉状态
参数说明 入参 enable – 是否使能
出参 无
返回值 成功返回 true,失败返回 false
补充说明

3.13 参数文件

包名定义:com.ccb.deviceservice.aidl.paramfile.IParamFile

66
中国建设银行智能 POS 终端接口规范

3.13.1. 功能描述

实现参数配置文件参数的判断和读取功能。

3.13.2. 接口列表

函数原型 功能说明
booleanisExists(); 检查参数文件是否存在
booleanisFirstRun(); 检查是否首次运行
boolean getBoolean(String name, boolean defaultValue); 获取 BOOL 类型参数
String geString(String name, String defaultValue); 获取 String 类型参数
boolean setBoolean(String name, boolean value); 设置 BOOL 类型参数
boolean seString(String name, String value); 设置 String 类型参数

3.13.3. 接口说明

3.13.3.1. 检查是否存在

函数原型 booleanisExists();
功能说明 检查参数文件是否存在
入参 无
参数说明
出参 无
返回值 存在返回 true,不存在返回 false
补充说明

3.13.3.2. 是否首次运行

函数原型 booleanisFirstRun();
功能说明 检查是否首次运行
入参 无
参数说明
出参 无
返回值 是返回 true,不是返回 false
补充说明

67
中国建设银行智能 POS 终端接口规范

3.13.3.3. 获取 BOOL 类型参数

函数原型 boolean getBoolean(String name, boolean defaultValue);


功能说明 获取 BOOL 类型参数
入参 name – 参数名称
参数说明 defaultValue – 默认值
出参 无
返回值 参数值
补充说明

3.13.3.4. 获取 String 类型参数

函数原型 String getString(String name, String defaultValue);


功能说明 获取 String 类型参数
入参 name – 参数名称
参数说明 defaultValue – 默认值
出参 无
返回值 参数值
补充说明

3.13.3.5. 设置 BOOL 类型参数

函数原型 boolean setBoolean(String name, boolean value);


功能说明 设置 BOOL 类型参数
入参 name – 参数名称
参数说明 value – 参数值
出参 无
返回值 成功返回 true,失败返回 false
补充说明

68
中国建设银行智能 POS 终端接口规范

3.13.3.6. 设置 String 类型参数

函数原型 boolean setString(String name, String value);


功能说明 设置 String 类型参数
入参 name – 参数名称
参数说明 value – 参数值
出参 无
返回值 成功返回 true,失败返回 false
补充说明

3.14 钱箱

包名定义:com.ccb.deviceservice.aidl.cashbox.ICashBox

3.14.1. 功能描述

实现 POS 设备外接钱箱功能。

3.14.2. 接口列表

函数原型 功能说明
void open(OnBoxListener listener); 打开钱箱

3.14.3. 接口说明

3.14.3.1. 打开钱箱

函数原型 void open(OnBoxListener listener);


功能说明 开启钱箱
listener - 钱箱监听器,详见补充说明
出参 无
返回值 无
补充说明 1、监听器说明
包名定义:com.ccb.deviceservice.aidl.cashbox. OnBoxListener

/**

69
中国建设银行智能 POS 终端接口规范

* 钱箱监听接口定义
*/
interface OnBoxListener {
/**
* 钱箱打开成功回调
*/
void onSuccess();

/**
* 钱箱打开失败回调
* @param error - 错误码
* <ul>
* <li>ERROR_NONE(0) - 成功</li>
* <li>ERROR_NONE(141) - 设备不存在</li>
* <li>ERROR_NONE(137) - 已经打开</li>
* <li>ERROR_NONE(1) - 失败</li>
* <li>ERROR_NONE(255) - 未知异常</li>
* </ul>
* @param message - 错误描述
*/
void onFail(int error, String message);
}
2、错误码
参见 com.ccb.deviceservice.aidl.cashbox.Constant 下的常量定义:
Constant.ErrorCode:错误码;

3.15 签名板

包名定义:com.ccb.deviceservice.aidl.signpanel.ISignPanel

3.15.1. 功能描述

实现 POS 设备签名板功能。

3.15.2. 接口列表

函数原型 功能说明
boolean open(); 打开签名板

void startSign(in Bundle param, OnSignListener listener); 开始签名

70
中国建设银行智能 POS 终端接口规范

void close(); 关闭签名板

boolean setParameter(int key, int value); 设置参数

boolean getParameter(int key, out IntValue value); 获取参数值

boolean jbigCompression(in byte[] data, int dataType, out JBIG 压缩


BytesValue compData);
boolean jbigDecompression(in byte[] data, int dataType, out JBIG 解压缩
BytesValue decompData);
boolean transBitmapToPrinter(in byte[] data, out BytesValue 把 BMP 或者 PBM 格式的数据转换
printData); 为 POS 可打印的数据格式
boolean bmpResizeForStylusPrinter(in byte[] srcBmp, out 将传入的二值位图转成适合进行针
BytesValue outBmp, out IntValue width, out IntValue height, 打的位图(废弃)
out IntValue size);

3.15.3. 接口说明

3.15.3.1. 打开签名板

函数原型 boolean open();


功能说明 开启签名板
入参 无
出参 无
返回值 成功:true,失败:false
补充说明

3.15.3.2. 开始签名

函数原型 void startSign(in Bundle param, OnSignListener listener);


功能说明 开始签名
入参 param – 请求参数
<ul>
<li>pecialCode(String) - 交易的交易特征码,传送给签名板用
于跟图像合成</li>
<li>timeout(int) - 等待应答信息的延时时间。单位:秒 </li>
</ul>
listener - 签名过程监听器
出参 无
返回值
补充说明 interface OnSignListener {

71
中国建设银行智能 POS 终端接口规范

/**
* 签名成功
* @param bitmap - 签名图像
*/
void onSigned(in Bitmap bitmap);

/**
* 签名取消
*/
void onCancel();

/**
* 签名超时
*/
void onTimeout();

/**
* 其他指令回调
* @param cmd - 指令
* @param state - 状态
*/
void onCmdResp(int cmd, int state);

/**
* 签名板断开连接
*/
void onDisconnected();

/**
* 签名失败
* @param error - 错误码,详见 Constant.ErrorCode 类
* <ul>
* <li>ERROR_ABOLISH(0x1B) - 系统异常 </li>
* <li>ERROR_ALLOCERR(0x8E) - 内存不足</li>
* <li>ERROR_DEVICE_DISABLE(0x8D) - 设备不存在或无法使
用</li>
* <li>ERROR_DEVICE_USED(0x89) - 设备已打开</li>
* <li>ERROR_HANDLE(0x8C) - 句柄错误</li>
* <li>ERROR_OTHER(0x01) - 其他错误</li>
* <li>ERROR_PARAM(0x8B) - 参数错误</li>
* <li>ERROR_SIGN_COMMERR(0x33) - 通信失败(只在操作外
置时返回)</li>
* <li>ERROR_NONE(0x00) - 正常,无错误</li>
* </ul>
*/
void onFail(int error);
}

72
中国建设银行智能 POS 终端接口规范

3.15.3.3. 关闭签名板

函数原型 void close();


功能说明 关闭签名板
入参 无
出参 无
返回值
补充说明

3.15.3.4. 设置参数

函数原型 boolean setParameter(int key, int value);


功能说明 设置参数
入参 key – 参数键
value – 参数值(取值 0 或 1)
出参 无
返回值 成功:true,失败:false
补充说明

3.15.3.5. 获取参数值

函数原型 boolean getParameter(int key, out IntValue value);


功能说明 获取参数值
入参 key – 参数键
value – 参数值
出参 无
返回值 成功:true,失败:false
补充说明

3.15.3.6. JBIG 压缩

函数原型 boolean jbigCompression(in byte[] data, out IntValue dataType, out


BytesValue compData);
功能说明 对 PBM 位图数据或者 BMP 二值单色位图数据进行 JBIG 压缩
(该接口暂不支持,预留)

73
中国建设银行智能 POS 终端接口规范

入参 data - 要进行压缩的数据
出参 dataType - 压缩前数据的格式,详见 Constant.DataType
compData - 压缩后数据
返回值 成功:true,失败:false
补充说明

3.15.3.7. JBIG 解压缩

函数原型 boolean jbigDecompression(in byte[] data, int dataType, out BytesValue


decompData);
功能说明 对压缩过的二值位图数据进行解压缩,解压后的数据可是 PBM 格式或
单色 BMP 格式
入参 data - 要进行解压缩的数据
dataType – 解压缩后数据的格式,详见 Constant.DataType
出参 decompData - 解压缩后数据
返回值 成功:true,失败:false
补充说明

3.15.3.8. 转换数据格式为 POS 可打印的数据格式

函数原型 boolean transBitmapToPrinter(in byte[] data, out BytesValue printData);


功能说明 把 BMP 或者 PBM 格式的数据转换为 POS 可打印的数据格式
入参 data - 要进行打印的数据(目前只支持单色的 BMP 位图数据
和 PBM 文件数据)
出参 printData - 转换后的打印数据
返回值 成功:true,失败:false
补充说明

3.15.3.9. 二值位图转成适合进行针打的位图(废弃)

函数原型 boolean bmpResizeForStylusPrinter(in byte[] srcBmp, out BytesValue


outBmp, out IntValue width, out IntValue height, out IntValue size);
功能说明 将传入的二值位图转成适合进行针打的位图。
主要用于将 240x80 大小的签名信息图片适合进行针式打印的大小,目前
转换后的大小固定为 120x40
入参 srcBmp - 单色的 bmp 位图数据,要求:长>=120,高>=40
出参 outBmp - 转换后适合针打的 BMP 位图数据

74
中国建设银行智能 POS 终端接口规范

width - 转换后位图的宽度
height - 转换后位图的高度
size - 转换后位图的大小
返回值 成功:true,失败:false
补充说明

3.16 Psam 卡读卡器

3.16.1. 功能描述

与终端 psam 卡槽上卡片数据交互。

3.16.2. 接口列表

函数原型 功能说明
boolean powerUp(out BytesValue atr); 卡上电

boolean powerDown(); 卡下电

boolean isCardIn(); 卡是否在位

int exchangeApdu(byte[] apdu, BytesValue result); APDU 数据通讯

void setPowerupMode(int mode); 设置上电模式

void setPowerupVoltage(int vol); 设置上电电压

3.16.3. 接口说明

3.16.3.1. 卡上电

函数原型 boolean powerUp(out BytesValue atr);


功能说明 对 IC 卡上电
参数说明 入参 无
出参 atr – 卡片上电响应的 atr 数据
返回值 上电成功 true,失败 false。
补充说明

75
中国建设银行智能 POS 终端接口规范

3.16.3.2. 卡下电

函数原型 boolean powerDown();


功能说明 对 IC 卡下电
参数说明 入参 无
出参 无
返回值 下电成功 true,失败 false。
补充说明 无

3.16.3.3. 卡是否在位

函数原型 boolean isCardIn();


功能说明 判断卡片是否在位
参数说明 入参 无
出参 无
返回值 卡在位返回 true,不在位返回 false。
补充说明 无

3.16.3.4. APDU 数据通讯

函数原型 int exchangeApdu(byte[] apdu, out BytesValue result);


功能说明 与卡片 APDU 数据通讯
参数说明 入参 apdu – APDU 指令数据
出参 result – 卡片应答数据
返回值 成功返回 0,其他失败
补充说明 无

3.16.3.5. 设置上电模式

函数原型 void setPowerupMode(int mode);


功能说明 设置上电模式
参数说明 入参 mode– 上电模式,详见 PowerupMode 类
出参 无
返回值 无

76
中国建设银行智能 POS 终端接口规范

补充说明 PowerupMode 类:
public interface PowerupMode {
int MODE_EMV = 0x01;
int MODE_BPS_576 = 0x02;
int MODE_BPS_384 = 0x03;
int MODE_BPS_192 = 0x04;
int MODE_SHB = 0x05;
int MODE_ISO = 0x06;
int MODE_TCR = 0x07;
int MODE_DEFAULT = 0x01;
}

3.16.3.6. 设置上电电压

函数原型 void setPowerupVoltage(int vol);


功能说明 设置上电电压
参数说明 入参 mode– 上电电压,详见 PowerupVoltage 类
出参 无
返回值 无
补充说明 PowerupVoltage 类:
public interface PowerupVoltage {
int VOL_3 = 0x01;
int VOL_5 = 0x02;
int VOL_DEFAULT = 0x02;
int VOL_18 = 0x03;
}

3.17 二代证读卡器

包名定义:com.ccb.deviceservice.aidl.idcardreader.IIDCardReader

3.17.1. 功能描述

该设备用于采集二代证数据信息。

3.17.2. 接口列表

函数原型 功能说明
void searchCard(in Bundle param, OnSearchListener listener); 开始读卡

void stopSearch(); 停止读卡

77
中国建设银行智能 POS 终端接口规范

3.17.3. 接口说明

3.17.3.1. 开始读卡

函数原型 void searchCard(in Bundle param, OnSearchListener listener);


功能说明 开始寻卡
参数说明 入参 param - 寻卡参数
<ul>
<li>deviceType(String):读卡设备类型,详见
Constant.DeviceType 类</li>
<li>timeout(int):检卡超时时间(单位秒)</li>
</ul>
listener: 磁条卡刷卡监听器
出参 无
返回值 无
补充说明 包名定义:com.ccb.deviceservice.aidl.iccardreader.OnSearchListener

二代证寻卡监听器说明:
interface OnSearchListener{
/**
* 读卡成功回调
* @param cardInfo -卡片信息,根据samv模式及nfc读卡模式返回信息如下:
* <ul>samv模式
* <li>name(String) - 姓名</li>
* <li>sex(String) - 性别,如:男</li>
* <li>nation(String) - 民族</li>
* <li>birthday(String) - 出生日期,格式yyyyMMdd</li>
* <li>address(String) - 地址</li>
* <li>idCardNo(String) - 身份证号</li>
* <li>department(String) - 签发机构</li>
* <li>signDate(String) - 签发日期,格式yyyyMMdd</li>
* <li>expiredDate(String) - 有效日期,格式yyyyMMdd</li>
* <li>imageData(byte[]) - 证件照图象数据</li>

* <ul>nfc模式
* <li>name(String) - 姓名</li>
* <li>sex(String) - 性别,如:男</li>
* <li>nation(String) - 民族(大陆身份证具备此字段,港澳台居住证无此字段返
回) </li>
* <li>birthday(String) - 出生日期,格式yyyyMMdd</li>
* <li>address(String) - 地址</li>
* <li>idCardNo(String) - 身份证号</li>

78
中国建设银行智能 POS 终端接口规范

* <li>department(String) - 签发机构</li>
* <li>signDate(String) - 签发日期,格式yyyyMMdd</li>
* <li>expiredDate(String) - 有效日期,格式yyyyMMdd</li>
* <li>imageData(byte[]) - 证件照图象数据</li>
* <li>dn(String) - 证件唯一编码 </li>

* 以下为港澳台居住证具备:
* <li>cardType(String) – 卡类型,详见Constant.CardType(港澳台:J) </li>
* <li>passportNo(String) – 通行证号码 </li>
* <li>visaCount(String) – 签证次数 </li>
* </ul>
*/
void onSuccess(in Bundle cardInfo);

/**
* 读卡失败回调
* @param error - 错误码
* @param message - 错误描述
*/
void onError(int error, String message);

/**
* 读卡超时回调
*/
void onTimeout();
}

3.17.3.2. 停止读卡

函数原型 void stopSearch();


功能说明 停止读卡
参数说明 入参 无
出参 无
返回值 无
补充说明 无

3.18 底座

包名定义:com.ccb.deviceservice.aidl.pedestal.IPedestal

79
中国建设银行智能 POS 终端接口规范

3.18.1. 功能描述

该设备用于底座相关操作。

3.18.2. 接口列表

函数原型 功能说明
boolean isConnected(); 底座是否和 POS 已连接

3.18.3. 接口说明

3.18.3.1. 底座是否和 POS 已连接

函数原型 boolean isConnected();


功能说明 底座是否和 POS 已连接
参数说明 入参 无
出参 无
返回值 已连接返回 true,否则返回 false
补充说明 无

80
中国建设银行智能 POS 终端接口规范

4. 附录

4.1 PBOC 流程调用时序图

应用App PBOC服务 后台服务器

1、检卡

2、检卡结果回调

3、启动PBOC流程

4、请求输入金额
5、导入交易金额

6、请求应用选择(多应用卡)
7、导入应用选择结果

8、请求确认卡号信息

9、卡号信息确认

10、请求PIN输入

11、输入PIN(联机/脱机PIN)

12、请求持卡人身份认证

13、导入持卡人认证结果

14、交易联机请求

15、联机数据上送

16、联机数据应答

17、导入联机响应数据
发卡行数据认证/执行发卡行脚本

18、交易结果通知(批准/拒绝/出错)

19、结束PBOC交易流程

4.2 密钥索引说明

为统一各厂商密钥存储差异及应用密钥下装,做如下约定:
1. 密钥索引使用范围:1-30。
2. 密钥索引 1-20 号由总行使用,地方版应用建议使用 20-30 号索引值。
总行密钥使用情况如下:

81
中国建设银行智能 POS 终端接口规范

密钥索引 KeyId 应用
1 信用卡中心惠兜圈支付(总行版)
2 信用卡中心缴费通支付(总行版)
3 保留
4 保留
5 保留
6 建行支付个金部(总行版)
7 建行支付个金部(总行版)
8 建行支付个金部(总行版)
9 保留
10 保留
11 保留
12 保留
13 保留
14 保留
15 保留
16 保留
17 保留
18 保留
19 保留
20 保留

82

You might also like