事件码回调模式

EDC(电子数据捕获)设备广泛应用于各种零售和服务行业,尤其在餐饮、超市和便利店等场所。本文为您介绍如何通过集成 Antom SDK 实现 EDC 终端支持事件码回调模式,帮助买家高效便捷地独立完成支付操作。

集成步骤

  1. 获取硬件设备
  2. 安装 EasyCard App 和 EZ Control App
  3. 安装 SDK 资源包
  4. 初始化 SDK
  5. 发送设备指令

步骤 1:获取硬件设备

如何获取机具设备请联系 Antom 商务专员了解详细信息。

步骤 2:安装 EasyCard App 和 EZ Control App

请联系 Antom 商务专员获取 EasyCard App 和 EZ Control App 的安装说明。获取设备并完成配置后,您可以按以下步骤完成 SDK 集成。

步骤 3:安装 SDK 资源包

版本要求:

  • Android 8.1(API level 27)或更高版本。
  • Java 1.8 及以上。

请按照以下步骤通过 Maven 集成 SDK 资源包。

  1. 添加 Maven 库:

在项目根目录的 build.gradle 文件中增加如下代码配置:

copy
// 添加 Maven 库
maven {
    credentials {
        username "antomsdk@aliyun.com"
        password "Admin1234"
    }
    url "https://globaltech.alipay.com/api/v1/file/repository/antom/"
}
  1. 添加 Maven 依赖:

使用下面的代码在 build.gradle 文件中添加依赖项。

copy
// 在应用的 build.gradle 中  
// 如果与现有 SDK 存在冲突,请将其排除
dependencies {
    implementation 'com.alipay.antom.sdk:instore-core:${antom_version}'
    implementation 'com.alipay.antom.sdk:instore-edc-cmd:1.1.0'
    implementation 'com.alipay.antom.sdk:foundation-jsengine:1.0.0'
}

将下面代码中 ANTOM_VERSION 的值替换为最新版本号 1.25.0,以便在 build.gradle 文件中外部化版本号,进行代码升级管理。

copy
ext {
    antom_version = 'ANTOM_VERSION'
}

步骤 4:初始化 SDK

建议在应用启动时调用 init 接口进行全局初始化,以确保设备能够快速响应

通过使用 AMSEDCGlobalConfiguration 并指定基础配置来创建 SDK 实例。配置对象包括以下参数:

参数名称

类型

是否必需

描述

options

Map

预留扩展参数信息。它包含以下参数:

  • merchantId:商户的 ID 号,必传,String 类型。

initCallback

InitCallback

初始化回调函数。它包含以下参数:

  • eventCode:相关结果码,String 类型。
  • result:结果的具体信息,String 类型。

EDCProvider

String

连接设备的类型。

useBuiltInDialog

Boolean

内置弹窗配置,默认值为 true。要使用事件码回调模式,此值必须设为 false,您需要根据 EDCServiceEvent 返回的事件码自行渲染。

通过调用 InitCallback 可以得到 onInitResult 回调事件。以下示例代码展示了如何处理回调事件onInitResult

copy
void onInitResult(String code, String result)

以下示例代码展示了如何实例化 SDK:

copy
AMSEDCGlobalConfiguration globalConfiguration = new AMSEDCGlobalConfiguration()
globalConfiguration.setEDCProvider("KICC");
globalConfiguration.setOption("useBuiltInDialog", false);
globalConfiguration.setOption("merchantId","xxxxxxx");
globalConfiguration.setInitCallback(new AMSEDCInitCallback() {
    @Override
    public void onInitResult(String code, String message) {
        if("INIT_SUCCESS".equals(code)){

        }
    }
});
AMSEDCPayment.init(this.getApplicationContext(), globalConfiguration);
AMSEDCPayment.init(getContext(), globalConfiguration);

注册 UI 事件

以下代码展示了如何在 AMSEDCPayment 中注册 UI 事件,以确保能正确处理设备状态更新及用户交互。

copy
AMSEDCPayment amsEDCPayment = new AMSEDCPayment();

DeviceCommandRequest deviceCommandRequest = new KICCCommandRequest();
deviceCommandRequest.setCommandName(commandName);
deviceCommandRequest.setCommandRequestParams(requestParams);
KICCCommandCallback callback = new KICCCommandCallback() {
    @Override
    public void onSuccess(CommandResult result) {
        // 指令响应成功
    }

    @Override
    public void onCommandFailed(CommandFailInfo commandFailInfo) {
        // 指令响应失败
    }

    @Override
    public void onBusinessFailed(CommandResult result) {
        // 如有倒计时请停止,可能需要关闭对话框
        stopCountdown();
        // 业务响应错误
    }
};

amsEDCPayment.setEDCServiceListener(new EDCServiceListener() { // 注册监听器
    @Override
    public void onEvent(EDCServiceEvent edcServiceEvent) {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                switch (edcServiceEvent.getCode) {
                    case "READY":
                        // 处理 READY,展示对话框
                        // 根据 paymentExpiryTime 开始倒计时
                        startCountdown(paymentExpiryTime);
                        break;
                    case "PENDING_SIGNATURE":
                        // 签名倒计时 20s
                        stopCountdown();
                        startCountdown(20);
                        break;
                    case "START_TRANSACTION": 
                        // 停止倒计时
                        stopCountdown();
                        // 渲染对话内容
                        break;
                        // 根据用例处理其他情况
                    default:
                        break;
                }
            }
        });
    }
});

amsEDCPayment.sendCommand(getContext(), deviceCommandRequest, callback);

以下是 EDCServiceEvent可能返回的事件码:

事件码

描述

READY

读卡指示(开始倒计时)。

CARD_DETECTED

检测到卡片插入。

CARD_READ_COMPLETED

卡片读取完成。

PENDING_SIGNATURE

等待签名(重启倒计时,20 秒超时)。

START_TRANSACTION

支付处理中(读卡结束,关闭倒计时)。

CANCELLING

设备通信取消中。

FALLBACK_MAGCARDREADER

刷卡失败,请插入卡片。

REQUIRE_CARD_INSERT

请使用 IC 卡交易。

CARD_TRY_AGAIN

请重试读取卡片。

CARD_MISSING

未检测到卡片/卡片掉落。

DEVICE_INITIALIZE

设备初始化。

步骤 5:发送设备指令

您可以调用 sendCommand 接口,给指定的 EDC 设备发送指令和数据,如 commandName=xxxx,具体实现的指令请参考机具指令

向设备发送 KICCCommandRequest 请求后,您将收到 KICCCommandCallback 响应。发送KICCCommandRequest 请求涉及以下参数:

参数名称

类型

是否必需

描述

commandName

String

指令名称。有效指令包括:

  • 发起支付(Purchase
  • 取消支付(PurchaseCancel
  • 查询最近一笔交易(GetLastTransaction
  • 取消指令(CommandCancel

commandRequestParams

JSONObject

指令请求参数。

options

Map<String, String>

预留扩展参数。

以下代码展示了一个 KICCCommandCallback 响应的示例,其中包含以下参数:

  • CommandResult :指令结果,包含以下参数:
    • responseData:返回结果,JSONObject 类型。
  • onCommandFailed:设备响应失败。
  • onBusinessFailed:业务响应失败。
copy
KICCCommandCallback callback = new KICCCommandCallback() {
    @Override
    public void onSuccess(CommandResult result) {
        // 指令响应成功
    }

    @Override
    public void onCommandFailed(CommandFailInfo commandFailInfo) {
        // 指令响应失败
    }

    @Override
    public void onBusinessFailed(CommandResult result) {
        // 业务响应错误
    }
};
mAMSEDCPayment.sendCommand(this, requestJson, callback);

注意:发出取消指令 CommandCancel 返回 onSuccess ,如果有读卡倒计时启动,请确保取消该计时。

以下代码展示了一个 responseData 的示例:

copy
{
  "requestId": "123456XXXX",
  "paymentAmount": {
    "value": "$TOTAL_AMOUNT",
    "currency": "KRW"
  },
  "taxAmount": {
    "value": "$TAX",
    "currency": "KRW"
  },
  "tipAmount": {
    "value": "$TIP",
    "currency": "KRW"
  },
  "creditPayPlan": {
    "installmentNum": "0"
  },
  "result": {
    "resultCode": "SUCCESS",
    "resultMessage": "XXX"
  },
  "acquirerInfo": {
    "acquirerResultCode": "$RESULT_CODE",
    "acquirerResultMessage": "$RESULT_MSG",
    "acquirerTransactionId": "$TRAN_SERIALNO",
    "acquirerTerminalId": "$SHOP_TID",
    "acquirerRegistrationNo": "$SHOP_BIZ_NUM",
    "acquirerMerchantId": "$SHOP_TIDMERCHANT_NUM",
    "acquirerApprovalNum": "$APPROVAL_NUM",
    "acquirerName": "KICC",
    "notice": "               매입사제출테스트 거래임",
    "acquirerMetaData":"ImNyZWRpdFBheVBsYW4iOiB7CiAgICAiaW5zdGFsbG1lbnROdW0iOiAiMCIKICB9LAogICJyZXN1bHQiOiB7CiAgICAicmVzdWx0Q29kZSI6ICJTVUNDRVNTIiwKICAgICJyZXN1bHRNZXNzYWdlIjogIiIKICB9Cg=="
  },
  "paymentResultInfo": {
    "cardBin": "52364979",
    "paymentMethodId": "",
    "issuerCode": "$CARD_NAME",
    "funding": "DEBIT/CREDIT/PREPAID",
    "paymentMethodRegion": "KR",
    "paymentMethodType": "CARD/CONNECT_WALLET/SAMSUNGPAY"
  }
}

以下代码展示了一个 onBusinessFailed 的示例:

copy
{
  "requestId": "c9d707ee-639d-4bf2-9a43-cc36c0a3beac",
  "result": {
    "resultCode": "PROCESS_FAIL",
    "resultMessage": "Please check network"
  },
  "acquirerInfo": {}
}

超时

以下是各指令的默认超时时间。

指令场景

默认值/秒

支付

Purchase

95(当金额超过 50000 KRW 时需要签名,此时默认值为 115)

注意:如果需要为 Purchase 指令自定义超时时间,请确保设置的超时时间不低于其默认值。

支付取消

PurchaseCancel

85

查询上一笔交易时间

GetLastTransaction

5

取消指令

CommandCancel

5

调用 sendCommand 接口的示例代码

copy
KICCCommandRequest deviceCommandRequest = new KICCCommandRequest();
deviceCommandRequest.setCommandName("Purchase");
deviceCommandRequest.setCommandRequestParams(new JSONObject("{\n" +
                "  \"requestId\": \"123456XXXX\",\n" +
                "  \"paymentAmount\": {\n" +
                "    \"value\": \"104\",\n" +
                "    \"currency\": \"KRW\"\n" +
                "  },\n" +
                "  \"taxAmount\": {\n" +
                "    \"value\": \"9\",\n" +
                "    \"currency\": \"KRW\"\n" +
                "  },\n" +
                "  \"tipAmount\": {\n" +
                "    \"value\": \"0\",\n" +
                "    \"currency\": \"KRW\"\n" +
                "  },\n" +
                "  \"creditPayPlan\": {\n" +
                "    \"installmentNum\": \"0\"\n" +
                "  },\n" +
                "  \"paymentExpiryTime\": \"30\",\n" +
                "  \"acquirerInfo\": {\n" +
                "    \"acquirerTerminalId\": \"0788888\",\n" +
                "    \"acquirerRegistrationNo\": \"0216001234\"\n" +
                "  }\n" +
                "}"));
KICCCommandCallback callback = new KICCCommandCallback() {
    @Override
    public void onSuccess(CommandResult result) {
        JSONObject responseData = result.getResponseData();
        Log.d(TAG, "onSuccess responseData: " + responseData);
    }

    @Override
    public void onCommandFailed(CommandFailInfo commandFailInfo) {
        Log.e(TAG, "error:" + commandFailInfo.errorCode + ":" + commandFailInfo.errorMessage);
    }

    @Override
    public void onBusinessFailed(BusinessFailInfo businessFailInfo) {
        Log.e(TAG, "error" + businessFailInfo.getErrorCode() + ":" + businessFailInfo.getErrorMessage());
    }
};
mAMSEDCPayment.sendCommand(activity, deviceCommandRequest, callback);

机具指令

以下为 KICC 设备支持的指令模式,请使用 sendCommand 接口来调用,具体信息请参考发送设备指令

发起支付

使用 Purchase 指令来发起支付,以下为其包含的参数及示例代码。

请求参数

参数名称

是否必需

说明

示例

requestId

商户侧交易号。

paymentAmount.value

总支付金额。

paymentAmount.currency

支付的币种。

KRW

tipAmount.value

服务费金额。

tipAmount.currency

服务费的币种。

KRW

creditPayPlan.installmentNum

分期付款的期数。

paymentExpiryTime

支付等待超时时间,默认为 30s。

注意:在发起支付时,需要启动读卡倒计时,通过 paymentExpiryTime 设置倒计时时长。

acquirerInfo.acquirerTerminalId

终端机具的 ID(通常情况下,卡和钱包使用不同的 ID)。

acquirerInfo.acquirerRegistrationNo

加盟店营业执照号码。

以下代码是请求报文的示例:

copy
{
  "requestId": "123456XXXX",
  "paymentAmount": {
    "value": "104",
    "currency": "KRW"
  },
  "tipAmount": {
    "value": "0",
    "currency": "KRW"
  },
  "creditPayPlan": {
    "installmentNum": "0"
  },
  "paymentExpiryTime": "30",
  "acquirerInfo": {
    "acquirerTerminalId": "0788888",
    "acquirerRegistrationNo": "0216001234"
  }
}

返回参数

参数名称

是否必需

说明

示例

requestId

商户侧交易号。

paymentAmount.value

总支付金额。

paymentAmount.currency

支付的币种。

KRW

taxAmount.value

增值税金额。

taxAmount.currency

增值税的币种。

KRW

tipAmount.value

服务费金额。

tipAmount.currency

服务费的币种。

KRW

creditPayPlan.installmentNum

分期付款的期数。

result.resultCode

支付结果码。

result.resultMessage

支付结果信息。

acquirerInfo.acquirerResultCode

收单机构返回的结果码。

acquirerInfo.acquirerResultMessage

收单机构返回的消息描述。

acquirerInfo.acquirerTerminalId

终端机具的 ID(通常情况下,卡和钱包使用不同的 ID)。

acquirerInfo.acquirerRegistrationNo

加盟店营业执照号码。

acquirerInfo.signData

签名数据(仅在已签名的交易中传送)。

acquirerInfo.notice

交易描述。

" 매입사제출테스트 거래임"

"현금영수증 문의 Tel.126-1-1 http:\/\/hometax.go.kr"

"전표:효력없음 userLoginId 000000000602"

acquirerInfo.acquirerTransactionId

收单机构的交易序列号。

acquirerInfo.acquirerMerchantId

门店在收单机构的商户号。

acquirerInfo.acquirerName

收单机构名称。

KICC

acquirerInfo.acquirerMetaData

收单机构返回的原始数据,在进行退款时必须传入。

acquirerInfo.acquirerApprovalNum

KICC 的交易批准号码。

paymentResultInfo.cardBin

支付卡 BIN(银行卡前八位)。在卡片支付时需要获取卡 BIN 信息。

paymentResultInfo.paymentMethodId

识别号码。钱包支付场景下需要获取付款码。

paymentResultInfo.issuerCode

发卡行代码。详细列表请查看附件。

📎전체 카드사 신용카드_발급사 매입사 정보(2023.07.25 기준) .xlsx

paymentResultInfo.funding

卡的资金类型包括:借记卡、信用卡和预付卡。

注意:当使用国际卡、钱包和 Samsung PAY 支付时,此参数的值为空。

paymentResultInfo.paymentMethodRegion

代表支付方式所在国家或地区的区域代码。此参数的值为两位字母的 ISO 国家代码GLOBAL

paymentResultInfo.paymentMethodType

支付方式。

extendInfo.AD1

收单机构的额外注释 1。

extendInfo.AD2

收单机构的额外注释 2。

以下代码是响应报文的示例:

copy
{
  "requestId": "123456XXXX",
  "paymentAmount": {
    "value": "$TOTAL_AMOUNT",
    "currency": "KRW"
  },
  "taxAmount": {
    "value": "$TAX",
    "currency": "KRW"
  },
  "tipAmount": {
    "value": "$TIP",
    "currency": "KRW"
  },
  "creditPayPlan": {
    "installmentNum": "0"
  },
  "result": {
    "resultCode": "SUCCESS",
    "resultMessage": "XXX"
  },
  "acquirerInfo": {
    "acquirerResultCode": "$RESULT_CODE",
    "acquirerResultMessage": "$RESULT_MSG",
    "acquirerTransactionId": "$TRAN_SERIALNO",
    "acquirerTerminalId": "$SHOP_TID",
    "acquirerRegistrationNo": "$SHOP_BIZ_NUM",
    "acquirerMerchantId": "$SHOP_TIDMERCHANT_NUM",
    "acquirerApprovalNum": "$APPROVAL_NUM",
    "acquirerName": "KICC",
    "notice": "               매입사제출테스트 거래임",
    "acquirerMetaData":"ImNyZWRpdFBheVBsYW4iOiB7CiAgICAiaW5zdGFsbG1lbnROdW0iOiAiMCIKICB9LAogICJyZXN1bHQiOiB7CiAgICAicmVzdWx0Q29kZSI6ICJTVUNDRVNTIiwKICAgICJyZXN1bHRNZXNzYWdlIjogIiIKICB9Cg=="
  },
  "paymentResultInfo": {
    "cardBin": "52364979",
    "paymentMethodId": "",
    "issuerCode": "$CARD_NAME",
    "funding": "DEBIT/CREDIT/PREPAID",
    "paymentMethodRegion": "KR",
    "paymentMethodType": "CARD/CONNECT_WALLET/SAMSUNGPAY"
  }
}

取消支付

使用 PurchaseCancel 指令来取消支付,以下为其包含的参数及示例代码。

请求参数

参数名称

是否必需

说明

示例

requestId

商户侧的取消 ID。针对每个请求,requestId 具有唯一性。

paymentAmount.value

总支付金额。

paymentAmount.currency

支付的币种。

KRW

tipAmount.value

服务费金额。

tipAmount.currency

服务费的币种。

KRW

creditPayPlan.installmentNum

分期付款的期数。

acquirerInfo.acquirerMetaData

收单机构返回的原始数据。将 Purchase 指令中返回的 acquirerInfo.acquirerMetaData 的值传入此参数。

acquirerInfo.acquirerTerminalId

终端机具的 ID(通常情况下,卡和钱包使用不同的 ID)。

acquirerInfo.acquirerRegistrationNo

加盟店营业执照号码。

以下是请求报文的示例:

copy
{
  "requestId":"123456XXXX",
  "paymentAmount": {
    "value": "104",
    "currency": "KRW"
  },
  "tipAmount": {
    "value": "0",
    "currency": "KRW"
  },
  "creditPayPlan": {
    "installmentNum":"0"
  },
  "acquirerInfo": {
    "acquirerTerminalId": "$SHOP_TID",
    "acquirerRegistrationNo": "$SHOP_BIZ_NUM",
    "acquirerMetaData":"ImNyZWRpdFBheVBsYW4iOiB7CiAgICAiaW5zdGFsbG1lbnROdW0iOiAiMCIKICB9LAogICJyZXN1bHQiOiB7CiAgICAicmVzdWx0Q29kZSI6ICJTVUNDRVNTIiwKICAgICJyZXN1bHRNZXNzYWdlIjogIiIKICB9Cg=="
  }
}

返回参数

参数名称

是否必需

说明

示例

requestId

商户侧的取消 ID。针对每个请求,requestId 具有唯一性。

result.resultCode

撤销结果。

result.resultMessage

撤销结果信息。

paymentAmount.value

总支付金额。

paymentAmount.currency

支付的币种。

KRW

taxAmount.value

增值税金额。

taxAmount.currency

增值税的币种。

KRW

tipAmount.value

服务费金额。

tipAmount.currency

服务费的币种。

KRW

creditPayPlan.installmentNum

分期付款的期数。

acquirerInfo.notice

交易描述。

" 매입사제출테스트 거래임"

"현금영수증 문의 Tel.126-1-1 http:\/\/hometax.go.kr"

"전표:효력없음 userLoginId 000000000602"

acquirerInfo.acquirerResultCode

收单机构返回的结果码。

acquirerInfo.acquirerResultMessage

收单机构返回的消息描述。

acquirerInfo.acquirerTerminalId

终端机具的 ID(通常情况下,卡和钱包使用不同的 ID)。

acquirerInfo.acquirerRegistrationNo

加盟店营业执照号码。

acquirerInfo.acquirerApprovalNum

KICC 的交易批准号码。

acquirerInfo.acquirerMerchantId

门店在收单机构的商户号。

acquirerInfo.acquirerTransactionId

收单机构交易序列号。

acquirerInfo.acquirerMetaData

收单机构返回的原始数据。

acquirerInfo.acquirerName

收单机构名称。

KICC

extendInfo.AD1

收单机构的额外注释 1。

extendInfo.AD2

收单机构的额外注释 2。

以下是响应报文的示例:

copy
{
  "requestId":"123456XXXX",
  "paymentAmount": {
    "value": "104",
    "currency": "KRW"
  },
  "taxAmount": {
    "value": "9",
    "currency": "KRW"
  },
  "tipAmount": {
    "value": "0",
    "currency": "KRW"
  },
  "creditPayPlan": {
    "installmentNum":"0"
  },
  "result":{
    "resultCode":"SUCCESS",
    "resultMessage":""
  },
  "acquirerInfo": {
    "acquirerTerminalId": "$SHOP_TID",
    "acquirerRegistrationNo": "$SHOP_BIZ_NUM",
    "acquirerResultCode": "$RESULT_CODE",
    "acquirerResultMessage": "$RESULT_MSG",
    "acquirerTransactionId": "$TRAN_SERIALNO",
    "acquirerApprovalNum": "16263485",
    "acquirerMerchantId": "608525310521",
    "acquirerName": "KICC",
    "notice": "$NOTICE"
  }
}

查询最近一笔交易

GetLastTransaction 指令用于查询最近一笔交易,其返回参数的格式不固定,具体格式取决于 responseCommand 字段的类型,其类型包括:

  • Purchase:发起支付。
  • PurchaseCancel:取消支付。

以下为 Purchase 返回格式的示例:

copy
{
  "responseCommand":"Purchase"
  "paymentAmount": {
    "value": "104",
    "currency": "KRW"
  },
  "taxAmount": {
    "value": "9",
    "currency": "KRW"
  },
  "tipAmount": {
    "value": "0",
    "currency": "KRW"
  },
  "creditPayPlan": {
    "installmentNum": "0"
  },
  "result": {
    "resultCode": "SUCCESS",
    "resultMessage": ""
  },
  "acquirerInfo": {
    "acquirerTerminalId": "$SHOP_TID",
    "acquirerRegistrationNo": "$SHOP_BIZ_NUM",
    "acquirerResultCode": "$RESULT_CODE",
    "acquirerResultMessage": "$RESULT_MSG",
    "acquirerTransactionId": "$TRAN_SERIALNO",
    "acquirerMetaData":"ImNyZWRpdFBheVBsYW4iOiB7CiAgICAiaW5zdGFsbG1lbnROdW0iOiAiMCIKICB9LAogICJyZXN1bHQiOiB7CiAgICAicmVzdWx0Q29kZSI6ICJTVUNDRVNTIiwKICAgICJyZXN1bHRNZXNzYWdlIjogIiIKICB9Cg=="
  }
}

取消指令

参考以下代码实例,实现取消指令 CommandCancel 功能:

注意:取消指令只能在读取卡片前和发起支付前使用。

copy
KICCCommandRequest deviceCommandRequest = new KICCCommandRequest();
deviceCommandRequest.setCommandName("CommandCancel");
deviceCommandRequest.setCommandRequestParams(new JSONObject());
KICCCommandCallback callback = new KICCCommandCallback() {
    @Override
    public void onSuccess(CommandResult result) {
        // 取消成功,接着取消倒计时
        stopTimer();
    }

    @Override
    public void onCommandFailed(CommandFailInfo commandFailInfo) {
        // 根据错误码,可能需要取消倒计时
    }

    @Override
    public void onBusinessFailed(CommandResult result) {
        // 无需操作
    }
};
mAMSEDCPayment.sendCommand(this, deviceCommandRequest, callback);

事件码

事件码分类如下:

  • 初始化关联:在全局初始化阶段由 onInitResult 返回。
  • 指令执行关联:若设备响应失败,由 onCommandFailed 返回。
  • 业务关联:若业务响应失败,由 onBusinessFailed 返回。

类型

事件码

描述

后续操作

初始化关联

INIT_SUCCESS

初始化成功。

无需进一步操作。

INIT_FAILED

初始化失败。

建议重试。

INIT_PARAM_ERROR

初始化参数错误。

请阅读步骤 4:初始化 SDK,检查输入的参数。

指令执行关联

CommandInvalidResponse

指令返回结果不正确。

建议重试。

CommandResponseTimeout

指令已执行,但是无响应。更多信息请参考超时。收到此事件码后,如果有读卡倒计时启动,请确保取消该计时。

建议重试。

CommandNotSupport

指令不支持。

请阅读步骤 5:发送设备指令,输入有效指令。

CommandDeviceBusy

设备指令进行中。

等待上一个指令返回后再重试。

CommandParamError

参数异常。

检查输入指令的参数。

CommandInvalid

无效指令。CommandCancel 指令的发起时机不符合条件。

请检查 CommandCancel 指令的发起时机,其只能在读取卡片前和发起支付前使用。

业务关联

REPEAT_REQ_REJECT

有一个具有相同 requestId 的现有订单。

请使用新的 requestId 重试。

INVALID_CONTRACT

合同无效。

请检查输入的 merchantId 是否有效。

ACCESS_DENIED

访问被拒绝。

请联系 KICC 获取详细原因及帮助。

PROCESS_FAIL

发生了常见的业务失败。

请勿重试。通常需要人工干预。建议您联系 Antom 技术支持来解决问题。

PARAM_ILLEGAL

缺少必需的参数,或者存在非法参数。例如,非数字输入、无效的日期,或者参数的长度和类型错误。

检查并验证当前接口所需的请求字段(包括头部字段和正文字段)是否正确传递并有效。

ORDER_STATUS_INVALID

订单状态无效。

请检查订单状态。

ORDER_IS_CANCELED

交易已取消。

您不能对交易进行退款,因为此交易已被取消。

USER_AMOUNT_EXCEED_LIMIT

支付金额超过了用户的支付限额。

使用不超过账户可用余额的金额创建新支付,或联系 Antom 技术支持。

USER_BALANCE_NOT_ENOUGH

由于对应支付方式的用户余额不足,支付无法完成。

请充值账户或选择其他支付方式。

INVALID_CARD_NUMBER

用于交易的卡号无效。

检查并验证当前接口所需的请求字段是否正确传递和有效。

IDENTITY_VERIFY_FAILED

身份验证超时或无法检索结果。

请确认您的身份信息并重试。

UNKNOWN

未知场景。

请联系 KICC 获取详细原因及帮助。