在使用推送服务时,OneNET作为客户端,而用户的第三方应用是作为服务器,第三方应用需要支持URL验证以及数据接收两部分服务。
URL验证流程如下图所示:
用户在配置页面完成配置并点击“提交”时,OneNET平台会向填写URL地址发送HTTP GET请求进行URL验证,请求形式示例如下:
http://url?msg=xxx&nonce=xxx&signature=xxx
其中,url为用户在页面配置时填写的URL,nonce、msg、signature用于URL及token的验证
token验证过程如下:
将配置页面中配置的token与nonce、msg的值计算MD5,并且编码为Base64字符串值
将上一步中Base64字符串值通过URL Decode计算后的值与请求参数signature的值进行对比,如果相等则表示token验证成功
如果token验证成功,返回msg参数值,表示URL验证通过。
如果用户不想验证token,可以选择跳过MD5计算过程,直接返回msg参数值
平台以HTTP POST请求形式向第三方平台URL地址推送数据,第三方平台接收到数据后需要返回 HTTP 200,否则OneNET会认为此次推送无效并重试
推送数据相关信息以JSON串的形式置于HTTP请求中的body部分,其中各个字段的含义如下
字段 | 类型 | 字段说明 |
---|---|---|
type | int | 标识消息类型 1:设备上传数据点消息 2:设备上下线消息 7:缓存命令下发后结果上报(仅支持NB设备) |
dev_id | int | 设备ID |
ds_id | string | 数据流名称 |
at | int | 平台时间戳,单位ms |
value | 具体数据部分,为设备上传至平台或触发的相关数据 | |
status | int | 设备上下线标识 0:设备下线 1:设备上线 |
login_type | int | 设备登录协议类型 1-EDP, 6-MODBUS, 7-MQTT, 10-NB-IoT |
cmd_type | int | 命令响应的类型 1:设备收到cmd的ACK响应信息 2:设备收到cmd的Confirm响应信息 |
cmd_id | string | 命令ID |
msg_signature | string | 消息摘要 |
nonce | string | 用于计算消息摘要的随机串 |
enc_msg | string | 加密密文消息体,对明文JSON串(msg字段)的加密 |
示例1:数据点消息
{
"msg": {
"type": 1,
"dev_id": 2016617,
"ds_id": "datastream_id",
"at": 1466133706841,
"value": 42
},
"msg_signature": "message signature",
"nonce": "abcdefgh"
}
示例2:批量数据点消息(需要配置数据缓存)
{
"msg": [{
"type": 1,
"dev_id": 2016617,
"ds_id": "datastream_id",
"at": 1466133706841,
"value": 42
},
{
"type": 1,
"dev_id": 2016617,
"ds_id": "datastream_id",
"at": 1466133706842,
"value": 43
},
...
],
"msg_signature": "message signature ",
"nonce": "abcdefgh"
}
示例3:设备上下线消息
{
"msg": {
"type": 2,
"dev_id": 2016617,
"status": 0,
"login_type": 1,
"at": 1466133706841
},
"msg_signature": "message signature",
"nonce": "abcdefgh"
}
示例4:缓存命令下发后结果上报(仅支持NB设备)
{
"msg": {
"type": 7,
"cmd_id": "3a351323-c4fe-5f21-9e9e-a9adc321182f",
"imei": "865820060031939",
"dev_id": 2016690,
"cmd_type": 0,
"send_time": 1466133706841,
"send_status": 5,
"confirm_time": 146613371921,
"confirm_status": 0,
"confirm_body": {
"obj_id": 3,
"obj_inst": [{
"obj_inst_id": 0,
"res": [{
"res_inst": [{
"val": 0,
"res_inst_id": 0
}],
"res_id": 11
},
{
"val": 1530496927000,
"res_id": 13
}
]
}]
}
},
"msg_signature": "message signature",
"nonce": "abcdefgh"
}
说明:
用户在配置推送服务时,可配置为数据加密传输,OneNET支持AES对称加密,用户可通过页面配置密钥,并在应用端通过该密钥进行解密操作
示例:密文格式
{
"enc_msg": "XXXXXXXXXXX",
"msg_signature": "message signature",
"nonce": "abcdefgh"
}
183.230.102.83 | 183.230.102.84 | 183.230.102.85 | 183.230.102.86 | 183.230.40.120 | 183.230.40.121 |
218.201.45.1 | 218.201.45.2 | 218.201.45.3 | 218.201.45.4 | 218.201.45.5 | 218.201.45.6 |