Skip to main content
虽然集成方应使用 libecodsdk 提供的 C API,但 JSON-RPC API 会被 EMV Core 日志使用,在集成调试期间非常有用。

协议规则

语法规则

所有命令均遵循以下格式约定:
  • 所有命令和事件均使用带有命名参数的 JSON-RPC 2.0 协议。
  • 所有命令和事件都需要响应,除了 log() 和 ReaderMessageEvent(),它们没有 id。
  • 消息格式:
  • 为每个命令使用不同的 id(例如递增计数器)以帮助同步。
  • 非法命令会收到 EMV Core 返回的 "Not existing command" 响应。

发送和接收

发送消息:
  1. 发送 JSON-RPC 消息。
  2. 等待 JSON-RPC 响应。
  3. 一旦开始接收到数据,请等待完整的 JSON(所有括号都闭合),或者等待 1 秒超时。
接收消息(循环):
  1. 等待接收数据。
  2. 一旦数据开始到达,请等待 JSON 数据完整到达,或者等待 1 秒超时。
  3. 解析并处理 JSON-RPC 消息。
  4. 发送 JSON-RPC 响应(ReaderMessageEvent 无需响应;socket_data_received 不发送响应)。

支付流程

典型的支付流程如下:
  1. POS 发送 PreAuthorize。
  2. EMV Core(在轻触卡片和授权后)以 TransactionComplete 响应。
  3. POS 发送 ConfirmTransaction(商品已交付)或 VoidTransaction(否则)。
  4. POS 可随时发送 CancelTransaction;TransactionComplete 将以 Cancelled 状态返回。
重要提示:
  • 始终使用 Confirm 或 Void/Cancel 关闭 PreAuthorize 会话。未关闭的会话在一段时间后会被处理机构撤销,这可能会产生更高的费用。
  • 一旦 EMV Core 确认收到 ConfirmTransaction,请勿重新发送。
  • 要强制同步处理,请设置 PAYMENT_SVC_SYNCHRONOUS=1。

闭环(CLP)流

对于预付卡,EMV Core 会通过 TransactionComplete 立即将卡 UID 返回给主机应用程序,而不发送到 Nayax 服务器。

命令

PreAuthorize

通过支付处理机构对卡进行预授权。EMV Core 等待卡片,读取卡片,处理卡片,然后发送 TransactionComplete。 示例:
参数:

ConfirmTransaction

确认预授权,以便完成付款结算。 示例:
参数:

VoidTransaction

在以下两种情况下可以撤销交易:
  • 交易已获得预授权但尚未确认,以释放预留资金。
  • 交易已完成,但需要撤销(例如,产品未售出)。
示例:
VoidTransaction 不返回事件。请在 TMS 中通过搜索 Cancel 和 Cancel Declined 状态来检查已撤销交易的状态。

CancelTransaction

取消由 PreAuthorize 启动的最后一笔交易:
  • 卡片尚未轻触: 停止读卡器轮询序列。显示屏显示 “Cancelling”(取消中);主机应用程序必须更新显示内容。
  • 卡片已被轻触但尚未完成: 返回 CannotCancel。TransactionComplete 会在联机授权结果返回后到达。
  • 交易已完成: 返回 NoTransaction。
  • 对于 CannotCancel 或 NoTransaction,请使用 VoidTransaction 撤销已成功的交易。
  • 如果 TransactionComplete 返回 Decline,则无需 VoidTransaction。
示例:

GetCardToken

返回卡令牌而不执行支付交易。返回 CardTokenReceived 事件。
  • 对于支付卡:返回 base64 卡片令牌。
  • 对于 CLP(例如 Mifare)卡:返回卡 UID。
示例:
注意:
  • 需要将标签 DFA155 添加到读卡器的 Clear results 标签列表中。
  • 仅当 CLP_MIFARE_ENABLED=2 时才会返回 CLP 卡 UID。

GetStatus

返回当前 EMV Core 状态。 示例:
结果值: {NotReady, Ready, PaymentTransaction, Update, NoReader, NoTerminalId}

ShowMessage

在 OTI Saturn 读卡器显示屏上显示一条消息。 示例:

GetVersion

返回系统中组件的版本。 示例:

GetKioskID

返回自助服务终端识别号码。 示例:

GetAttribute

返回 EMV Core 配置属性的值。 示例:

事件

TransactionComplete

EMV Core 在交易完成(成功或失败)时发送。包含生成收据和解决争议所需的所有数据。 注意: 如果未收到确认,EMV Core 最多会重新发送 2 次(共计 3 次)。如果仍然没有收到回复,则会假定消息已被接收,并且不会取消该交易。 示例(开环):
参数: 授权详情字段: 闭环卡类型:

CardTokenReceived

在 GetCardToken 完成时发送。 示例:

ReaderMessageEvent

Saturn 读卡器上显示的消息发生变化时发送。使用此事件可将自助终端应用与读卡器状态同步。 注意: 需要将读卡器配置为发送外部显示消息事件(标签 DF 46,索引 04)。此事件不需要确认。 示例:
消息索引:

网络协议

Socket API

socket_connect

打开与远程主机的 TCP 套接字。
成功时返回一个正的套接字 ID,失败时返回一个负的错误号。

socket_send

以二进制形式发送数据。发送数据前会阻塞。hex_data 是十六进制编码字符串(每字节 2 个 ASCII 字符)。

socket_recv

从套接字接收数据。返回十六进制编码的数据。

socket_close

socket_data_received(事件)

当打开的套接字上有数据可用时,主机发送此消息。设备无响应。

网络管理 API

network_get_status

如果网络可用,则返回 "on"。

network_get_info

返回网络信道、运营商、技术(3G/4G)、信号强度和误码率。

resolve_host_name

DNS 解析:返回 IP 地址列表和 TTL 值。