# 回调通知

KIC支持一系列的事件(Event)回调通知。在业务流程中当触发这些事件时,KIC会通过HTTP POST方式将事件的相关信息回调至您设置的回调地址(CallbackURL)上。

TIP

  • 回调通知对于事件的处理是单向的,它仅支持将事件推送给 Web 服务,并不关心 Web 服务的返回。

  • 借助回调通知可以完成设备在线状态、上下线记录,实时接收扫描结果等诸多业务。

# 回调消息

  • 回调请求URI:

    1. 设备 相关事件回调(如:如设备上线、离线),回调至应用设置的CallbackURL,若未设置则不进行回调

    2. 业务流程 触发的时间回调(如:打印、扫描),回调至业务接口设置的CallbackURL,若未设置则不进行回调

  • 回调请求方法(Request Method):POST

  • 回调请求头(Request Header):

名称 说明
User-Agent 固定为:KIC
Content-Type 固定为:application/json
X-KIC-Callback-ID 回调消息ID,例如:1607df56-5077-478e-a252-2054f1292ba6
X-KIC-Signature 回调消息签名,可用于接收端验证回调消息的合法性,详见 消息签名
  • 回调请求消息体(Request Body):

消息体固定为JSON 格式,包含以下结构:

名称 类型 必选 说明
event String 事件名称
app_key String 对应应用的AppKey
timestamp Integer 消息发出前的Unix时间戳(毫秒)
client_uuid String 对应触发事件的设备UUID
data Object 相关对应事件的业务详细数据,详见 事件数据

请求Body示例:

{
	"event": "scan.ack", // 设备已接收扫描指令
	"app_key": "xxxxxxx",
	"timestamp": 1628843904245,
	"client_uuid": "941e2dad-xxxx-xxxx-xxxx-ec78d66e227d",
	"data": {
		"uuid": "e7f761e2-8eee-401f-95d8-78761bf69004"
	}
}
1
2
3
4
5
6
7
8
9
  • 回调请求的响应(Respons):

HTTP状态码必须为:HTTP StatusOK (Status Code 200) ,Header:不做要求,Body: 不做要求(建议为空)。

注意

  • 当Web服务接收到回调请求后,需要在 5秒 内给出任意的 HTTP StatusOK (Status Code 200) Response响应(建议返回空字符串)。

  • 若5秒内未完成响应或响应的状态码不是200,则认为此次回调失败。失败后会再进行3次重试,分别在前次回调失败后的 8秒13秒21秒

# 消息签名

KIC会对每个发出的回调消息体进行HMAC-SHA1算法签名,可用于接收端验证回调消息的合法性。

HMAC-SHA1签名内容:Request Body。

HMAC-SHA1签名秘钥:对应应用的AppSecret。

签名验证方法:

  1. 读取回调请求Header中的X-KIC-Signature,存为字符串remoteSign

  2. 读取回调请求的Body,存为字符串bodyStr

  3. 获取对应应用的AppSecret,存为字符串key

  4. 使用HMAC-SHA1算法对bodyStr进行本地签名,秘钥为key,得到签名结果localSign字符串

  5. 对比localSign与remoteSign字符串,若完全一致表示签名合法

TIP

消息签名的验证是可选的,在调试时可以不进行校验。若在生产环境使用时,强烈建议您对消息签名进行校验。

# 事件列表

目前支持的回调事件:

事件名称(Event) 事件类型 说明
client.online 设备 设备上线
client.offline 设备 设备离线
client.scanner_state 设备 扫描仪状态变更
client.printer_state 设备 打印机状态变更
client.gpio 设备 GPIO触发器事件
client.scanner 设备 扫描仪触发器事件
scan.ack 业务流程 扫描流程,终端已收到扫描任务
scan.item_data 业务流程 扫描流程,本次扫描的PDF数据(如开启连续扫描,则会收到多次)
scan.finish 业务流程 扫描流程,回调扫描的最终状态
print.ack 业务流程 打印流程,终端已收到打印任务
print.start 业务流程 打印流程,已开始打印
print.finish 业务流程 打印流程,已结束打印

注意

如未设置对应的回调地址(CallbackURL),则不会进行回调通知

# 事件数据

事件数据对象位于请求消息体的data字段,不同事件会收到不同的事件数据。

# client.online

设备上线

名称 类型 必选 说明
ip String 设备的IP地址
connected_at Integer 设备上线连接时的Unix时间戳(单位:毫秒)

# client.offline

设备离线

名称 类型 必选 说明
disconnect_at Integer 设备离线时的Unix时间戳(单位:毫秒)

# client.scanner_state

扫描仪状态变更

名称 类型 必选 说明
connected Bool 是否已连接扫描仪
supported Bool 扫描仪型号是否支持
make String 扫描仪厂家名称
model String 扫描仪型号名称
connection_type String 扫描仪连接方式

# client.printer_state

打印机状态变更

名称 类型 必选 说明
connected Bool 是否已连接打印机
supported Bool 打印机型号是否支持
make String 打印机厂家名称
model String 打印机型号名称
connection_type String 打印机连接方式
error_code Integer 打印机错误状态码 详见 打印机错误码

# client.gpio

设备GPIO触发器事件

名称 类型 必选 说明
port String GPIO编号(K1只有两种:GPIO1、GPIO2)
method Integer 触发的方式
取值: 0 触发或按下一次、 1 长按或长时间触发(超过1秒)、 2 连续触发或按下两次(1秒内)
trigger_at Integer 触发时的Unix时间戳 (单位:毫秒)

# client.scanner

扫描仪触发器事件

名称 类型 必选 说明
method Integer 触发的方式
取值: 0 物理按钮按下
trigger_at Integer 触发时的Unix时间戳 (单位:毫秒)

# scan.ack

扫描流程,终端已收到扫描任务

名称 类型 必选 说明
scan_uuid String 扫描任务的UUID
action_ack_at Integer 任务接收时的Unix时间戳 (单位:毫秒)

# scan.item_data

扫描流程,本次扫描的PDF文件数据(如开启连续扫描,则会收到多次)

名称 类型 必选 说明
scan_uuid String 扫描任务的UUID
item_id Integer 此次扫描数据的ID,从1开始自增
pages Integer PDF页数,扫描面数 direct_mode=1时无值
file_size Integer 文件大小(单位:KB,direct_mode=1时无值
upload_spent Integer 上传耗时(单位:秒,direct_mode=1时无值
check_sum String 文件的md5值,direct_mode=1时无值
scanned_at Integer 此次扫描完成时间戳(单位:毫秒)
cipher String 加密密文(Hex编码)direct_mode=1时无值
temp_download_url String 文件临时下载链接(一般有效期为 1小时direct_mode=1时无值

# scan.finish

扫描流程,扫描结束,扫描的最终状态

名称 类型 必选 说明
scan_uuid String 扫描任务的UUID
item_size Integer 扫描数据的数量,即item_data的数量
total_pages Integer 总页数
total_file_size Integer 总文件大小(单位:KB)direct_mode=1时无值
error_code Integer 扫描流程错误码 ,当扫描流程发生异常,此字段非0
详见 扫描错误码
finished_at Integer 扫描任务完成时间戳(单位:毫秒)

打印流程,终端已收到打印任务

名称 类型 必选 说明
print_uuid String 打印任务的UUID
action_ack_at Integer 任务接收时的Unix时间戳 (单位:毫秒)

打印流程,已开始打印

名称 类型 必选 说明
print_uuid String 打印任务的UUID
started_at Integer 打印开始时的Unix时间戳 (单位:毫秒)
pages Integer 预估页数 (根据文件与份数设置的评估值,非实际打印页数)

打印流程,已结束打印

名称 类型 必选 说明
print_uuid String 打印任务的UUID
finished_at Integer 打印结束时的Unix时间戳 (单位:毫秒)
error_code Integer 打印错误码(当打印流程发生异常,打印失败时,此字段非0)
详见 打印错误码
file_size Integer 终端下载到的文件大小(单位:KB)
download_spent Integer 终端下载文件耗时(单位:秒)
pages Integer 预估页数 (根据文件与份数设置的评估值,非实际打印页数)
printed_pages Integer 使用严格模式时的实际打印面数 (只有在使用严格模式时有值)
注意:此值为打印面数,如打印的文档页数为3页并启用双面打印模式,此时值为4
(空白面也会计算,当启用双面打印时,printed_pages/2 即可得到实际使用的纸张数量)