Skip to main content

销售结果超时(销售成功超时)

此参数设置设备在向外围设备发送“Vend Approved”(授权交易)消息后,等待外围设备响应(“Vend Approved”/“Vend Failure”)的时间。在 Nayax Core 中,此参数的最大值为 65535 秒(18 小时 12 分 15 秒)。如果您需要更长的等待时间,可以使用多会话模式,该模式下信用卡超时时间为 23 小时(截至2025年,最长可达72小时。 ),而对于专用卡,则需要 72 小时。

状态命令

配对过程完成后,当网络通信中断时,设备会立即发送“状态”命令,以便机器知晓。在 Java SDK 中,该命令大致如下所示(C# 和 C 中的代码格式相同):
Java SDK's log
您可以看到状态为 21 (0x15),如下表所示,这意味着设备不可用(以下字节表明原因)。 通信恢复后,设备回到空闲状态,将发送值为 20 的状态命令:
Java SDK's log
总结一下:设备与外界失去通信(SIM卡故障/以太网连接故障等)-> 外围设备发送“保持连接”信号,设备响应该信号 -> 设备发送值为21(0x15)的“状态”命令。 设备恢复与外界通信 -> 外围设备发送“保持连接”消息,设备响应该消息 -> 设备发送值为 20 的“状态”命令 [0x14] 此外,与上述信息无关,状态命令还可以在消费者刷卡期间提供相关信息: 如果消费者在读卡时遇到问题,系统会提示其插入卡片或使用其他卡片。但如果卡片余额不足,屏幕上不会显示相关信息,因为我们不想让消费者感到尴尬(我们也不会将其记录在 SDK 日志中,因为这与 VPOST 和机器之间的通信无关,而是与设备和收单机构之间的通信有关)。通常,您可以在 Nayax Core 中查看交易取消/卡片被拒的原因。

沟通障碍

Marshall 协议使用 ACK 命令来响应每个发送的命令,这意味着如果您的外设向设备发送命令,它将收到一个 ACK 命令作为回复,反之亦然。该命令是接收方对发送方的响应,表明已收到该命令。如果没有收到 ACK,则该命令会发送两次。如果三次尝试(原始命令 + 两次重试)均未收到 ACK,则 SDK 将停止发送保持连接命令,设备将发送重置命令以重新建立配对过程。 交易过程中未收到确认:如果在“售卖成功”后未收到确认,则由 Nayax 负责结算。如果在授权后或“售卖成功”前未收到确认,Nayax 将取消交易。(如果在授权阶段之前未收到确认,交易也会被取消。)

第三方服务器审批——机器如何通知SDK卡片是否获得批准

请注意,对于专用卡(MiFare、HID 和磁条卡),消费者的卡片详细信息在每笔交易中会提供 2 次:第一次(通过 Transfer Data)在 Begin Session, 之前第二次(通过 Transfer Data)在第三方完成卡片授权流程之后提供,这意味着会在 Vend Request 之后、Vend Approved / Vend Denied 之前打印
发送“Vend Request”后,消费者出示银行卡,随后会发送 Transfer Data 命令,外围设备会获取卡片详细信息,并(自行处理,与 SDK 无关)将其转发给所需的第三方服务器。 一旦服务器批准/拒绝了该卡,外围设备将通过调用“client_gateway_auth(bool approved)”命令通知 SDK(从而也通知设备):
在 SDK 的演示应用程序中,他们会模拟外围设备返回“已批准”值的情况(该函数将返回“true”):

取消命令

如果您发送了“供应商请求”但尚未收到“供应商批准”(/“供应商拒绝”),您可以发送“取消”命令,这将导致发送“供应商拒绝”。 如果您在收到“vend approved”消息之前发送了“cancel”命令,但此时“vend approved”消息已经发送到您的机器,那么您将不会在日志中看到“vend cancel”的打印信息,因为在“vend approved”之后不能再发送“cancel”命令,因此外设端会发送“vend failure”消息。您也可以避免此时使用“cancel”命令,直接回复“vend failure”,这样也能得到相同的结果。 如果消费者想要开始交易,但在你发送“供应商请求”之前又取消了(无论是在出示卡片之前,还是在你收到“开始会话”之后,在你能够发送“供应商请求”之前——如果是第一种情况,你将在 SDK 的日志中看到“读卡器启用”),你也可以在发送“供应商请求”之前取消交易。

仅在信用卡授权后才开始发送会话信息

使用预付卡时,会先进行授权,然后再发送“开始会话”指令。
否则,“开始会话”操作会先执行,授权操作会在之后进行。
必须当 VPOST/Onyx 处于空闲模式(而不是在进行活动交易的过程中)时执行关闭会话。
在有活动交易的情况下,您不得发送“Close Session”,因为这可能导致问题:设备会优先处理“Close Session”,这可能使活动交易卡住。请确保仅在 onReady 触发时才发送“Close Session”命令。

不向消费者收费/以0的价格结束会话——这是什么问题?

关于以价格 0 发送“close session”——如果您想取消交易,应发送状态不为“ok”的“close session”,例如“failed to dispense”(因为以状态“ok”和价格 0 发送“close session”会被视为您机器端价格计算方面的某种错误)。 原因在于,任何查看该设备虚拟机 last sales 记录的人都会认为我们这边在结算交易上存在问题(支付问题、配置问题等)。相比之下,在您这边,外围设备与设备之间的交易流程完全没有问题,您只是出于自身原因不想向消费者收费。 这就是我们提供“vend failure”选项,以及“close session”状态“vend failure”和“cancel by user”的原因,因为这些状态表明产品未被提供,因此我们不会向消费者收费,并且我们会在 Last Sales/DTM 上显示相应的原因。 一旦你将交易状态更改为除“确定”以外的任何状态,你发送的价格将变得无关紧要,因为交易将被视为已取消。 可能的状态有: 0- 状态正常 1- 用户取消 2. 产品分发失败 4- 拒绝出价 然后您可以发送“关闭会话”命令。

多渠道销售:如何进行部分自动售货的示例

部分自动售货仅适用于 Multivend,意味着只能售卖部分选定的产品。 例如,如果消费者选择了五件商品:
并且想要模拟只售出两件商品的场景。您可以在演示应用程序的 onVendApproved 回调函数中添加以下代码:

会话超时——最多延迟一分钟。

该设备每 1 分钟查询一次已打开的会话,这意味着设备结算交易的时间可能会比 Nayax Core 中定义的超时时间延迟最多 1 分钟。 例如: 如果您将超时设置为 1 分钟,会话将在开始后的 1 分钟到 1 分 59 秒之间的某个时间过期。 如果您将超时设置为 5 分钟,会话将在开始后的 5 分钟到 5 分 59 秒之间的某个时间过期。如果您将超时设置为 1 小时,会话将在开始后的 1 小时到 1 小时 59 秒之间的某个时间过期。