public class EMVKernel extends Object
轻 EMV L2 内核,以下简称轻内核,区别于传统 EMVL2 内核,通过整体设计,接口优化, 将复杂的 EMV 交易流程集成固化在轻内核中,由专业内核开发人员维护。同时轻内核又开 放出足够的窗口以实现各类应用开发的个性化和差异化。轻内核是一套更简单,更快捷,更 灵活的 EMV 应用开发内核。
EMV 交易采用事件和信号的机制来实现所有的交易流程。应用激活一笔 EMV 交易后,EMV 内核会主导这笔交易的流程,在需要应用交互行为时, 或者需要应用设置交易参数时,内核会向应用发送事件请求,并且等待应用处理事件的结果通知。一旦内核向应用请求了事件,内核将进入休眠, 只有应用将事件处理结果通知内核后,内核才会被唤醒并继续执行交易流程,直到内核发出交易结束的通知。
支持的交易类型:
限定符和类型 | 字段和说明 |
---|---|
static int |
DEBUG_MODE_AFTERTRANS
内核调试模式:交易结束输出内核日志
|
static int |
DEBUG_MODE_CLOSE
内核调试模式:关闭输出内核日志
|
static int |
DEBUG_MODE_REALTIME
内核调试模式:交易过程实时输出内核日志
|
static int |
DOL_TYPE_DDOL
DOL类型:DDOL
|
static int |
DOL_TYPE_TDOL
DOL类型:TDOL
|
static int |
DOL_TYPE_UDOL
DOL类型:UDOL
|
static int |
EMV_ACTION_AAC
行为分析类型(AC Type):拒绝交易
|
static int |
EMV_ACTION_ARQC
行为分析类型(AC Type):请求联机
|
static int |
EMV_ACTION_TC
行为分析类型(AC Type):批准交易
|
static int |
EMV_CVMFLAG_CCV
持卡人验证类型(CVM Flag):Confirmation Code Verified(PayPass)
|
static int |
EMV_CVMFLAG_CDV
持卡人验证类型(CVM Flag):Consumer Device Verification(qVSDC/qPBOC)
|
static int |
EMV_CVMFLAG_CERTIFICATE
持卡人验证类型(CVM Flag):证件验证(证件类型: 00-身份证 01-军官证 02-护照 03-入境证 04-临时身份证 05-其他)
|
static int |
EMV_CVMFLAG_ECASHPIN
持卡人验证类型(CVM Flag):电子现金充值 PIN
|
static int |
EMV_CVMFLAG_NOCVM
持卡人验证类型(CVM Flag):无需CVM验证
|
static int |
EMV_CVMFLAG_OFFLINEPIN
持卡人验证类型(CVM Flag):脱机PIN
|
static int |
EMV_CVMFLAG_OLPIN_SIGN
持卡人验证类型(CVM Flag):联机PIN加签名
|
static int |
EMV_CVMFLAG_ONLINEPIN
持卡人验证类型(CVM Flag):联机PIN
|
static int |
EMV_CVMFLAG_SIGNATURE
持卡人验证类型(CVM Flag):签名
|
static int |
EMV_FLAG_ADD
动作标识(Action Flag):添加
|
static int |
EMV_FLAG_CLEAR
动作标识(Action Flag):清除所有
|
static int |
EMV_FLAG_DELETE
动作标识(Action Flag):删除
|
static int |
EMV_FLAG_EXECUTE_CDCVM
寻卡回调参数标识:CDCVM 未执行,提示用户根据手机提示操作,并重新挥卡
|
static int |
EMV_FLAG_ISS_SCRIPT_UPDATE
寻卡回调参数标识:提示再次出卡,但不显示金额
|
static int |
EMV_FLAG_NORMAL
寻卡回调参数标识:正常交易的寻卡标志
|
static int |
EMV_FLAG_SHOW_CARD_AGAIN
寻卡回调参数标识:重新激活卡片
|
static int |
EMV_FLOWTYPE_A_XP2_EMV
交易流程标识(FlowType):AMEX ExpressPay Card EMV Mode
|
static int |
EMV_FLOWTYPE_A_XP2_MS
交易流程标识(FlowType):AMEX ExpressPay Card Magstripe Mode
|
static int |
EMV_FLOWTYPE_A_XPM_EMV
交易流程标识(FlowType):AMEX ExpressPay Mobile EMV Mode
|
static int |
EMV_FLOWTYPE_A_XPM_MS
交易流程标识(FlowType):AMEX ExpressPay Mobile Magstripe Mode
|
static int |
EMV_FLOWTYPE_D_DPAS_EMV
交易流程标识(FlowType):Discover D-PAS EMV Mode
|
static int |
EMV_FLOWTYPE_D_DPAS_MS
交易流程标识(FlowType):Discover D-PAS Magstripe Mode
|
static int |
EMV_FLOWTYPE_D_ZIP
交易流程标识(FlowType):Discover ZIP Mode
|
static int |
EMV_FLOWTYPE_ECASH
交易流程标识(FlowType):接触式小额支付(电子现金)
|
static int |
EMV_FLOWTYPE_EMV
交易流程标识(FlowType):EMV/PBOC标准借贷记
|
static int |
EMV_FLOWTYPE_M_CHIP
交易流程标识(FlowType):MASTER Card PayPass-Chip
|
static int |
EMV_FLOWTYPE_M_STRIPE
交易流程标识(FlowType):MASTER Card
|
static int |
EMV_FLOWTYPE_MSD
交易流程标识(FlowType):MSD交易
|
static int |
EMV_FLOWTYPE_MSD_LEGACY
交易流程标识(FlowType):MSD Legacy交易
|
static int |
EMV_FLOWTYPE_PBOC_CTLESS
交易流程标识(FlowType):非接标准借贷记
|
static int |
EMV_FLOWTYPE_QPBOC
交易流程标识(FlowType):非接小额支付(qPBOC)
|
static int |
EMV_FLOWTYPE_QVSDC
交易流程标识(FlowType):Visa qVSDC
|
static int |
EMV_FLOWTYPE_WAVE2
交易流程标识(FlowType):Visa PayWave2
|
static int |
EMV_INS_APPSELECT_DATA
内核指令:发送应用选择数据
|
static int |
EMV_INS_CLOSERF
内核指令:通知应用端关闭非接载波
|
static int |
EMV_INS_DBLOG
内核指令:发送 debug 日志信息
|
static int |
EMV_INS_DEL_FAIL_WATER
内核指令:通知应用删除闪卡保存的失败交易记录
|
static int |
EMV_INS_DEL_TORN
内核指令:通知应用端删除闪卡记录
|
static int |
EMV_INS_DISPLAY
内核指令:通知应用端显示信息
|
static int |
EMV_INS_GET_TORN
内核指令:内核请求闪卡记录
|
static int |
EMV_INS_SET_FAIL_WATER
内核指令:发生闪卡,通知应用保存失败交易记录
|
static int |
EMV_INS_SET_TORN
内核指令:内核发送闪卡记录,应用端存储记录数据
|
static int |
EMV_INS_TLVDATA
内核指令:发送 TLV 数据串
|
static int |
EMV_KERNELID_AMEX
内核类型:AMEX
|
static int |
EMV_KERNELID_DEFINE
内核类型:Kernel Defined
|
static int |
EMV_KERNELID_DISCOVER
内核类型:DISCOVER
|
static int |
EMV_KERNELID_EMV
内核类型:接触EMV标准流程
|
static int |
EMV_KERNELID_EMVCTLess
内核类型:EMV Contactless
|
static int |
EMV_KERNELID_JCB
内核类型:JCB
|
static int |
EMV_KERNELID_MASTER
内核类型:Master Card
|
static int |
EMV_KERNELID_NSICC
内核类型:Indonesian
|
static int |
EMV_KERNELID_PBOC
内核类型:PBOC
|
static int |
EMV_KERNELID_UNIVERSAL
内核类型:未指定通用的kernelID,用于设置AID时使用
|
static int |
EMV_KERNELID_VISA
内核类型:VISA
|
static int |
EMV_L1_ERR_PROTOCOL
错误定位码:ICC transmit protocol error
|
static int |
EMV_L1_ERR_TIMEOUT
错误定位码: ICC APDU communicate time out
|
static int |
EMV_L1_ERR_TRANSMISSION
错误定位码:ICC APDU transmission error
|
static int |
EMV_L2_ERR_CAM_FAILED
错误定位码:CAM fail
|
static int |
EMV_L2_ERR_ICC_DATA
错误定位码:ICC data error
|
static int |
EMV_L2_ERR_ICC_DATA_MISS
错误定位码:ICC Data missing
|
static int |
EMV_L2_ERR_ICC_STATUS
错误定位码:APDU status error
|
static int |
EMV_L2_ERR_MAG_NOT_SUP
错误定位码:Don't support magnetic
|
static int |
EMV_L2_ERR_MAX_EXCEEDED
错误定位码:Exceed max limit
|
static int |
EMV_L2_ERR_NO_CAND_AID
错误定位码:Candidate AID list is empty
|
static int |
EMV_L2_ERR_NO_PPSE
错误定位码:Don't support PPSE
|
static int |
EMV_L2_ERR_PARSING
错误定位码:ICC data parsing error
|
static int |
EMV_L2_ERR_PPSE_FAULT
错误定位码:PPSE fault
|
static int |
EMV_L2_ERR_TERM_DATA
错误定位码:Terminate parameter error
|
static int |
EMV_L3_ERR_AMOOUNT
错误定位码:Amount is absent
|
static int |
EMV_L3_ERR_STOP
错误定位码:Transaction being terminated
|
static int |
EMV_L3_ERR_TIMEOUT
错误定位码:Time out
|
static int |
EMV_MSGID_APPROVED
信息标识(Message ID):交易批准
|
static int |
EMV_MSGID_APPROVED_SIGN
信息标识(Message ID):交易批准并请求签名
|
static int |
EMV_MSGID_AUTH_WAIT
信息标识(Message ID):等待授权
|
static int |
EMV_MSGID_CLEAR_DISPLAY
信息标识(Message ID):清空屏幕显示
|
static int |
EMV_MSGID_DECLINED
信息标识(Message ID):交易拒绝
|
static int |
EMV_MSGID_ERR_OTH_CARD
信息标识(Message ID):交易终止,请尝试其它卡片
|
static int |
EMV_MSGID_ICC_ACOUNT
信息标识(Message ID):Icc Acount
|
static int |
EMV_MSGID_INSERT_CARD
信息标识(Message ID):请插入卡片
|
static int |
EMV_MSGID_ONLINE_ODA_RESULT
信息标识(Message ID):In OnlineOda process, the result of ODA
|
static int |
EMV_MSGID_PCII
信息标识(Message ID):按PICC显示消息
|
static int |
EMV_MSGID_READ_CARD_FAIL
信息标识(Message ID):In All flash tron recovery process, read card fail
|
static int |
EMV_MSGID_READCARD_OK
信息标识(Message ID):读卡完成,可移走卡片(不代表交易成功)
|
static int |
EMV_MSGID_SEE_PHONE
信息标识(Message ID):请查看手机
|
static int |
EMV_MSGID_TRY_AGAIN
信息标识(Message ID):请重试
|
static int |
EMV_MSGID_UNMATCH_PAN
信息标识(Message ID):In current tron recovery process, unmatch pan
|
static int |
EMV_RESULT_ALL_FLASH_CARD
交易返回码(Return Code):返回全部闪卡待处理流程
|
static int |
EMV_RESULT_APDU_ERROR
交易返回码(Return Code):APDU执行失败
|
static int |
EMV_RESULT_APDU_STATUS_ERROR
交易返回码(Return Code):APDU状态码错误
|
static int |
EMV_RESULT_APPLOCK
交易返回码(Return Code):应用锁定(SW=6283)
|
static int |
EMV_RESULT_BUSY
交易返回码(Return Code):EMV工作线程正工作中,请稍候再尝试
|
static int |
EMV_RESULT_CARDLOCK
交易返回码(Return Code):卡片锁定(SW=6A81)
|
static int |
EMV_RESULT_EXCEED_CTLMT
交易返回码(Return Code):交易金额超过非接限额
|
static int |
EMV_RESULT_EXPIRY
交易返回码(Return Code):卡片应用过期,交易终止
|
static int |
EMV_RESULT_FLASHCARD
交易返回码(Return Code):非接快速支付,发生闪卡
|
static int |
EMV_RESULT_NOAPP
交易返回码(Return Code):终端AID列表为空或者卡片与终端AID不匹配,无候选应用
|
static int |
EMV_RESULT_NOPUBKEY
交易返回码(Return Code):非接小额支付,检测到未设置交易公钥,交易终止
|
static int |
EMV_RESULT_NORMAL
交易返回码(Return Code):交易正常结束
|
static int |
EMV_RESULT_REFUSESERVICE
交易返回码(Return Code):卡片不允许服务
|
static int |
EMV_RESULT_REPOWERICC
交易返回码(Return Code):卡片通讯错误
|
static int |
EMV_RESULT_STOP
交易返回码(Return Code):STOP信号请求终止,交易主动退出
|
static int |
EMV_SERVETYPE_CASH
服务类型(Service Type):现金
|
static int |
EMV_SERVETYPE_CASHBACK
服务类型(Service Type):返现
|
static int |
EMV_SERVETYPE_GOOD
服务类型(Service Type):商品
|
static int |
EMV_SERVETYPE_REFUND
服务类型(Service Type):退款
|
static int |
EMV_SERVETYPE_SERVICE
服务类型(Service Type):服务
|
static int |
EMV_SIGNAL_ACT
信号类型(Signal Type):从应用选择开始,激活一笔新交易
|
static int |
EMV_SIGNAL_ACT_GPO
信号类型(Signal Type):从 GPO 开始,激活一笔新交易
|
static int |
EMV_SIGNAL_CLEAN
信号类型(Signal Type):清理内核交易数据
|
static int |
EMV_SIGNAL_NEXT
信号类型(Signal Type):回调正常返回,执行下一步操作
|
static int |
EMV_SIGNAL_STOP
信号类型(Signal Type):终止交易
|
限定符和类型 | 方法和说明 |
---|---|
int |
getBalance(BytesBuffer balance)
通过向卡片发送 APDU 指令的方式获取接触或非接卡片可用余额
编程说明:该接口调用时机,需要在最终选择事件
EMVEventHandler.onFinalSelect(FinalSelectData) 产生后。 |
int |
getDataAPDU(int p1,
int p2,
BytesBuffer data)
通过发送 APDU 指令获取卡片内部数据元
编程说明:该接口调用时机,需要在最终选择事件
EMVEventHandler.onFinalSelect(FinalSelectData) 产生后。 |
int |
getDOL(int type,
BytesBuffer dol)
获取终端缺省 DDOL、 TDOL、 UDOL
|
int |
getECCLog(String aid,
List<ECCLog> logs)
获取 IC 卡卡片圈存日志
编程说明:
该接口调用时机,需要在应用选择事件
EMVEventHandler.onAppSelection(boolean, List, byte[]) 产生后,并且针对支持圈存交易的卡片。 |
int |
getICCLog(String aid,
List<ICCLog> logs)
获取 IC 卡卡片交易日志
编程说明:
该接口调用时机,需要在应用选择事件
EMVEventHandler.onAppSelection(boolean, List, byte[]) 产生后。 |
static EMVKernel |
getInstance()
获取EMV内核实例对象
|
static EMVKernel |
getInstance(String packageName)
获取EMV内核实例对象
|
int |
getTLV(String tag,
BytesBuffer value)
获取单个 Tag 的值
|
int |
initEMV()
初始化EMV内核
在开始任何交易流程之前,需要对 EMV 内核执行初始化操作。
|
int |
manageAID(int action,
int kernelId,
String aid,
int partSelect)
管理终端支持的 AID 列表
编程说明:
启动 EMV 交易之前,应用必须设置终端所支持的 AID。
|
int |
manageRecCert(int action,
RecCert cert)
回收公钥证书管理
编程说明:
该接口用于管理 EMV 内核维护的 CA 公钥回收证书列表,当前最多可存储 100 个。
|
void |
release()
释放EMV流程资源
编程说明:
EMV流程执行结束,调用该接口释放相关资源,否则可能存在内存泄漏的风险。
|
int |
setCAPubKey(CAPKey capKey)
设置 CA 公钥数据( RSA 算法公钥)
编程说明:
该接口用于设置当前的 IC 卡交易所请求的 CA 公钥。
|
int |
setCAPubKeySM(SMCAPKey smCapKey)
设置 CA 公钥数据( SM 算法公钥)
编程说明:
该接口用于设置当前的 IC 卡交易所请求的 CA 公钥。
|
int |
setDOL(int type,
String dol)
设置终端缺省 DDOL、 TDOL、 UDOL
|
int |
setTLV(int kernelId,
String tag,
String value)
设置单个 TLV 数据元
|
int |
setTLVList(int kernelId,
String tlvList)
设置 TLV 数据元列表
|
int |
signalInDriver(CpuCardDriver<?> cardDriver)
设置卡驱动,激发EMV内核流程继续执行
编程说明:
一般在请求卡片处理
EMVEventHandler.onWaitCard(int) 事件中调用,用于设置用于该笔EMV流程的卡设备驱动对象。 |
int |
signalInNext(String tlvData)
响应EMV内核事件,驱动EMV流程继续执行
编程说明:
一般在EMV内核回调事件中调用,比如应用选择事件
EMVEventHandler.onAppSelection(boolean, List, byte[]) ,激发EMV内核流程继续执行。 |
int |
signalInTLV(int signal,
String tlvData)
EMV 交易信号输入,驱动EMV内核继续执行流程
编程说明:
一般在EMV内核回调事件中调用,比如应用选择事件
EMVEventHandler.onAppSelection(boolean, List, byte[]) ,激发EMV内核流程继续执行。 |
int |
startEMV(String tlvData,
CpuCardDriver<?> cardDriver,
EMVEventHandler eventHandler)
启动EMV流程
|
int |
stopEMV()
停止EMV流程
|
void |
switchDebug(int debugMode)
设置EMV内核调试模式
|
int |
transferEMV(String appName)
转移EMV流程,EMV完整流程分属在两个应用进程中完成
编程说明:
第一个应用负责EMV的读卡和应用选择,建议在最终应用选择事件后发起转移EMV请求
第二个应用负责EMV的其他步骤
完成两个步骤,需要将EMV流程从第一个应用向第二个应用转移
|
int |
updateCAIndexList(String rid,
int[] indexList)
根据 RID,更新对应的 CA 公钥索引列表
编程说明:
该接口针对非接触快速支付而设计,可以基本杜绝非接快速支付交易中因 CA 公钥缺失带来的卡片脱机余额扣款但交易失败的现象。
|
public static final int EMV_RESULT_NORMAL
public static final int EMV_RESULT_BUSY
public static final int EMV_RESULT_NOAPP
public static final int EMV_RESULT_NOPUBKEY
public static final int EMV_RESULT_EXPIRY
public static final int EMV_RESULT_FLASHCARD
public static final int EMV_RESULT_STOP
public static final int EMV_RESULT_REPOWERICC
public static final int EMV_RESULT_REFUSESERVICE
public static final int EMV_RESULT_CARDLOCK
public static final int EMV_RESULT_APPLOCK
public static final int EMV_RESULT_EXCEED_CTLMT
public static final int EMV_RESULT_APDU_ERROR
public static final int EMV_RESULT_APDU_STATUS_ERROR
public static final int EMV_RESULT_ALL_FLASH_CARD
public static final int EMV_KERNELID_UNIVERSAL
public static final int EMV_KERNELID_EMV
public static final int EMV_KERNELID_EMVCTLess
public static final int EMV_KERNELID_MASTER
public static final int EMV_KERNELID_VISA
public static final int EMV_KERNELID_AMEX
public static final int EMV_KERNELID_JCB
public static final int EMV_KERNELID_DISCOVER
public static final int EMV_KERNELID_PBOC
public static final int EMV_KERNELID_NSICC
public static final int EMV_KERNELID_DEFINE
public static final int EMV_FLOWTYPE_EMV
public static final int EMV_FLOWTYPE_ECASH
public static final int EMV_FLOWTYPE_QPBOC
public static final int EMV_FLOWTYPE_PBOC_CTLESS
public static final int EMV_FLOWTYPE_MSD
public static final int EMV_FLOWTYPE_MSD_LEGACY
public static final int EMV_FLOWTYPE_QVSDC
public static final int EMV_FLOWTYPE_WAVE2
public static final int EMV_FLOWTYPE_M_CHIP
public static final int EMV_FLOWTYPE_M_STRIPE
public static final int EMV_FLOWTYPE_A_XP2_MS
public static final int EMV_FLOWTYPE_A_XP2_EMV
public static final int EMV_FLOWTYPE_A_XPM_MS
public static final int EMV_FLOWTYPE_A_XPM_EMV
public static final int EMV_FLOWTYPE_D_DPAS_MS
public static final int EMV_FLOWTYPE_D_DPAS_EMV
public static final int EMV_FLOWTYPE_D_ZIP
public static final int EMV_SERVETYPE_GOOD
public static final int EMV_SERVETYPE_SERVICE
public static final int EMV_SERVETYPE_CASH
public static final int EMV_SERVETYPE_CASHBACK
public static final int EMV_SERVETYPE_REFUND
public static final int EMV_CVMFLAG_NOCVM
public static final int EMV_CVMFLAG_OFFLINEPIN
public static final int EMV_CVMFLAG_ONLINEPIN
public static final int EMV_CVMFLAG_SIGNATURE
public static final int EMV_CVMFLAG_OLPIN_SIGN
public static final int EMV_CVMFLAG_CDV
public static final int EMV_CVMFLAG_CCV
public static final int EMV_CVMFLAG_CERTIFICATE
public static final int EMV_CVMFLAG_ECASHPIN
public static final int EMV_ACTION_AAC
public static final int EMV_ACTION_TC
public static final int EMV_ACTION_ARQC
public static final int EMV_FLAG_ADD
public static final int EMV_FLAG_DELETE
public static final int EMV_FLAG_CLEAR
public static final int DOL_TYPE_DDOL
public static final int DOL_TYPE_TDOL
public static final int DOL_TYPE_UDOL
public static final int EMV_INS_SET_TORN
public static final int EMV_INS_DEL_TORN
public static final int EMV_INS_DISPLAY
public static final int EMV_INS_TLVDATA
public static final int EMV_INS_CLOSERF
public static final int EMV_INS_DBLOG
public static final int EMV_INS_GET_TORN
public static final int EMV_INS_APPSELECT_DATA
public static final int EMV_INS_SET_FAIL_WATER
public static final int EMV_INS_DEL_FAIL_WATER
public static final int EMV_MSGID_READCARD_OK
public static final int EMV_MSGID_TRY_AGAIN
public static final int EMV_MSGID_APPROVED
public static final int EMV_MSGID_APPROVED_SIGN
public static final int EMV_MSGID_DECLINED
public static final int EMV_MSGID_ERR_OTH_CARD
public static final int EMV_MSGID_INSERT_CARD
public static final int EMV_MSGID_SEE_PHONE
public static final int EMV_MSGID_AUTH_WAIT
public static final int EMV_MSGID_CLEAR_DISPLAY
public static final int EMV_MSGID_ICC_ACOUNT
public static final int EMV_MSGID_PCII
public static final int EMV_MSGID_UNMATCH_PAN
public static final int EMV_MSGID_READ_CARD_FAIL
public static final int EMV_MSGID_ONLINE_ODA_RESULT
public static final int EMV_L1_ERR_TIMEOUT
public static final int EMV_L1_ERR_TRANSMISSION
public static final int EMV_L1_ERR_PROTOCOL
public static final int EMV_L2_ERR_ICC_DATA_MISS
public static final int EMV_L2_ERR_CAM_FAILED
public static final int EMV_L2_ERR_ICC_STATUS
public static final int EMV_L2_ERR_PARSING
public static final int EMV_L2_ERR_MAX_EXCEEDED
public static final int EMV_L2_ERR_ICC_DATA
public static final int EMV_L2_ERR_MAG_NOT_SUP
public static final int EMV_L2_ERR_NO_PPSE
public static final int EMV_L2_ERR_PPSE_FAULT
public static final int EMV_L2_ERR_NO_CAND_AID
public static final int EMV_L2_ERR_TERM_DATA
public static final int EMV_L3_ERR_TIMEOUT
public static final int EMV_L3_ERR_STOP
public static final int EMV_L3_ERR_AMOOUNT
public static final int EMV_FLAG_NORMAL
public static final int EMV_FLAG_SHOW_CARD_AGAIN
public static final int EMV_FLAG_ISS_SCRIPT_UPDATE
public static final int EMV_FLAG_EXECUTE_CDCVM
public static final int EMV_SIGNAL_ACT
public static final int EMV_SIGNAL_NEXT
public static final int EMV_SIGNAL_ACT_GPO
public static final int EMV_SIGNAL_STOP
public static final int EMV_SIGNAL_CLEAN
public static final int DEBUG_MODE_AFTERTRANS
public static final int DEBUG_MODE_REALTIME
public static final int DEBUG_MODE_CLOSE
public static EMVKernel getInstance()
public static EMVKernel getInstance(String packageName)
packageName
- 应用程序包名public int initEMV()
在开始任何交易流程之前,需要对 EMV 内核执行初始化操作。该初始化操作只需要在每次应用开启时执行一次即可。 如果应用需要设置,全局的,不因交易类型改变的参数,应该在执行完成初始化后,通过相应的 API 设置到内核。
public int startEMV(String tlvData, CpuCardDriver<?> cardDriver, EMVEventHandler eventHandler)
tlvData
- 启动EMV流程TLV参数cardDriver
- 卡设备驱动对象,启动EMV流程时,已激活卡片,则需要传入卡驱动设备对象;如果未激活卡片,则传入nulleventHandler
- EMV事件监听器,用于监听EMV内核事件,并根据流程执行反馈NullPointerException
- 如果eventHandler入参为nullpublic int stopEMV()
public void release()
编程说明: EMV流程执行结束,调用该接口释放相关资源,否则可能存在内存泄漏的风险。
public int manageAID(int action, int kernelId, String aid, int partSelect)
编程说明: 启动 EMV 交易之前,应用必须设置终端所支持的 AID。当卡片 AID 与终端 AID 匹配后才能执行后续的 EMV 交易流程。
action
- 动作标识
EMV_FLAG_ADD
- 新增 EMV_FLAG_DELETE
- 删除 EMV_FLAG_CLEAR
- 清除所有 kernelId
- 内核类型
EMV_KERNELID_UNIVERSAL
- 未指定通用的KernelID EMV_KERNELID_EMV
- EMV EMV_KERNELID_EMVCTLess
- EMVCTLess EMV_KERNELID_MASTER
- MASTER CARD EMV_KERNELID_VISA
- VISA EMV_KERNELID_AMEX
- AMEX EMV_KERNELID_JCB
- JCB EMV_KERNELID_DISCOVER
- DISCOVER EMV_KERNELID_PBOC
- PBOC EMV_KERNELID_NSICC
- Indonesian aid
- AID数据,如:“9F0608A000000333010106DF0101009F08020020”,当action为EMV_FLAG_CLEAR
时,aid入参为null或空。partSelect
- 是否部分选择标志,0-不支持,1-支持
public int manageRecCert(int action, RecCert cert)
编程说明: 该接口用于管理 EMV 内核维护的 CA 公钥回收证书列表,当前最多可存储 100 个。
action
- 动作标识
EMV_FLAG_ADD
- 新增 EMV_FLAG_DELETE
- 删除 EMV_FLAG_CLEAR
- 清除所有 cert
- 回收公钥证书,当action为EMV_FLAG_CLEAR
时,cert入参可以为null。public int setDOL(int type, String dol)
type
- DOL 类型
DOL_TYPE_DDOL
- DDOL DOL_TYPE_TDOL
- TDOL DOL_TYPE_UDOL
- UDOL dol
- DOL数据public int getDOL(int type, BytesBuffer dol)
type
- DOL 类型
DOL_TYPE_DDOL
- DDOL DOL_TYPE_TDOL
- TDOL DOL_TYPE_UDOL
- UDOL dol
- DOL数据NullPointerException
- 如果dol入参为nullpublic int setCAPubKey(CAPKey capKey)
编程说明: 该接口用于设置当前的 IC 卡交易所请求的 CA 公钥。应用在处理读卡片记录回调请求时,应根据内核反馈的公钥 RID 与公钥索引将对应的公钥数据传入给内核。 内核只能存储一组公钥数据,应用如果多次设置公钥数据,内核只保留最后一组。
capKey
- CA 公钥数据,传入null表示清空EMV内核已存储的公钥数据public int setCAPubKeySM(SMCAPKey smCapKey)
编程说明: 该接口用于设置当前的 IC 卡交易所请求的 CA 公钥。应用在处理读卡片记录回调请求时,应根据内核反馈的公钥 RID 与公钥索引将对应的公钥数据传入给内核。 内核只能存储一组公钥数据,应用如果多次设置公钥数据,内核只保留最后一组。
smCapKey
- SM 算法公钥,传入null表示清空EMV内核已存储的公钥数据public int updateCAIndexList(String rid, int[] indexList)
编程说明: 该接口针对非接触快速支付而设计,可以基本杜绝非接快速支付交易中因 CA 公钥缺失带来的卡片脱机余额扣款但交易失败的现象。 对于支持 qPBOC 或者 qVSDC 的应用建议设置,如果应用未设置公钥索引列表,则内核将不执行预判处理,会提高因公钥缺失带来的 交易失败且脱机扣款的风险。 对于不支持非接触快速支付的应用可以不设置。
rid
- CA公钥RID(HEX格式字符串),如:"A000000004"indexList
- CA 公钥索引列表,如:indexList[] = [0x01, 0x02, 0x03, 0x05, 0x06, 0x07],入参为null或空数组表示清除该 RID 的公钥索引列表public int signalInDriver(CpuCardDriver<?> cardDriver)
编程说明:
一般在请求卡片处理EMVEventHandler.onWaitCard(int)
事件中调用,用于设置用于该笔EMV流程的卡设备驱动对象。
cardDriver
- 设备卡驱动对象,接触/非接触卡驱动对象NullPointerException
- 如果cardDriver入参为nullpublic int signalInNext(String tlvData)
编程说明:
一般在EMV内核回调事件中调用,比如应用选择事件EMVEventHandler.onAppSelection(boolean, List, byte[])
,激发EMV内核流程继续执行。
tlvData
- TLV 参数数据(HEX格式字符串),如:"9F1A0208405F2A020156"EMV_RESULT_BUSY
- EMV工作线程忙碌中,请稍后再尝试public int signalInTLV(int signal, String tlvData)
编程说明:
一般在EMV内核回调事件中调用,比如应用选择事件EMVEventHandler.onAppSelection(boolean, List, byte[])
,激发EMV内核流程继续执行。
signal
- 信号类型
EMV_SIGNAL_ACT
- 从应用选择开始,激活一笔新交易 EMV_SIGNAL_NEXT
- 回调正常返回,执行下一步操作 EMV_SIGNAL_ACT_GPO
- 从 GPO 开始,激活一笔新交易 EMV_SIGNAL_STOP
- 终止交易 EMV_SIGNAL_CLEAN
- 清理内核交易数据 tlvData
- TLV 参数数据(HEX格式字符串),如:"9F1A0208405F2A020156"EMV_RESULT_BUSY
- EMV工作线程忙碌中,请稍后再尝试IllegalStateException
- 如果当前EMV流程不是处于SIGNAL_IN_TLV状态public int setTLV(int kernelId, String tag, String value)
kernelId
- 内核类型
EMV_KERNELID_EMV
- EMV EMV_KERNELID_EMVCTLess
- EMVCTLess EMV_KERNELID_MASTER
- MASTER CARD EMV_KERNELID_VISA
- VISA EMV_KERNELID_AMEX
- AMEX EMV_KERNELID_JCB
- JCB EMV_KERNELID_DISCOVER
- DISCOVER EMV_KERNELID_PBOC
- PBOC EMV_KERNELID_NSICC
- Indonesian EMV_KERNELID_DEFINE
- Kernel Defined tag
- 要设置的标签(HEX格式字符串,如:"9F39"),见EMVTag
常量定义value
- 要设置的值(HEX格式字符串),如:"91",如果入参为null,则表示清空该TAG数据元public int setTLVList(int kernelId, String tlvList)
kernelId
- 内核类型
EMV_KERNELID_EMV
- EMV EMV_KERNELID_EMVCTLess
- EMVCTLess EMV_KERNELID_MASTER
- MASTER CARD EMV_KERNELID_VISA
- VISA EMV_KERNELID_AMEX
- AMEX EMV_KERNELID_JCB
- JCB EMV_KERNELID_DISCOVER
- DISCOVER EMV_KERNELID_PBOC
- PBOC EMV_KERNELID_NSICC
- Indonesian EMV_KERNELID_DEFINE
- Kernel Defined tlvList
- TLV 格式数据串(HEX格式字符串),如:"9F1A0208405F2A020156"public int getTLV(String tag, BytesBuffer value)
tag
- 要获取的数据的标签(HEX格式字符串,如:"5A"),见EMVTag
常量定义value
- 获取到的标签值NullPointerException
- 如果tag或value入参为nullpublic int getBalance(BytesBuffer balance)
编程说明:该接口调用时机,需要在最终选择事件EMVEventHandler.onFinalSelect(FinalSelectData)
产生后。
balance
- 卡片余额,金额单位为分(0-6字节),BCD格式,如果余额为1元(100分),则为:[0x01,0x00]NullPointerException
- 如果balance入参为nullpublic int getDataAPDU(int p1, int p2, BytesBuffer data)
编程说明:该接口调用时机,需要在最终选择事件EMVEventHandler.onFinalSelect(FinalSelectData)
产生后。
p1
- 标签首字节,如:0x9Fp2
- 标签次字节,如:0x36,如果为单字节标签,该字节传入0x00data
- 获取数据元的值NullPointerException
- 如果data入参为nullpublic int getICCLog(String aid, List<ICCLog> logs)
编程说明:
该接口调用时机,需要在应用选择事件EMVEventHandler.onAppSelection(boolean, List, byte[])
产生后。
aid
- AID标识(HEX格式字符串),如:“A000000004”logs
- IC卡卡片日志NullPointerException
- 如果aid或logs入参为nullpublic int getECCLog(String aid, List<ECCLog> logs)
编程说明:
该接口调用时机,需要在应用选择事件EMVEventHandler.onAppSelection(boolean, List, byte[])
产生后,并且针对支持圈存交易的卡片。
例如PBOC3.0 电子现金卡。
aid
- AID标识(HEX格式字符串),如:“A000000004”logs
- IC卡卡片圈存日志NullPointerException
- 如果aid或logs入参为nullpublic void switchDebug(int debugMode)
debugMode
- 内核调试模式
DEBUG_MODE_AFTERTRANS
- 交易结束后输出EMV内核日志 DEBUG_MODE_REALTIME
- 交易过程实时输出EMV内核日志 DEBUG_MODE_CLOSE
- 关闭输出EMV内核日志 public int transferEMV(String appName)
编程说明:
appName
- 接收EMV流程控制权的应用进程完整包名,如:com.xxx.yyy.zzz