物联网通信 数据转发到第三方服务

将通过规则提取出来的消息字段转发给第三方服务时,可以自定义如何处理这些数据。这种方式是提供给用户灵活性最高的一种消息处理方式。

相关产品
物联网通信 产品页,含版本规格、价格与购买入口。

一、概述

注意:第三方服务必须以 HTTP 或 HTTPS 的方式提供服务。配置转发第三方服务,需要提供支持 HTTP 或 HTTPS 的网站 URL 和端口。规则引擎转发成功后,第三方服务将收到来自42.193.134.62、106.52.211.220、157.255.11.202、14.215.166.14、120.233.106.237 的数据包。

二、填写服务器配置

按 操作指南 创建规则和筛选数据,再添加行为操作,选择转发到第三方服务。

·选择行为类型为“数据转发到第三方服务(Forward)”。

·填写你的 HTTP 或 HTTPS 服务地址。物联网通信平台会将设备上报的数据转发至 HTTP 或 HTTPS 服务地址。

·为保证你的服务请求为合法有效的请求,请勾选 “增加鉴权 Token”,且填写你的服务对应的 Token;你可以任意填写 Token,用作生成签名(该 Token 会和接口 URL 中包含的 Token 进行比对,从而验证安全性)。当勾选 “增加鉴权 Token”后,你的服务需实现 验证消息 逻辑。

三、验证消息

注意:为了你后台稳定使用,请选择增加鉴权 Token。

四、请求标识

用户如果在转发到第三方服务(Forward)即 HTTP 转发,已选择“增加鉴权 Token”,物联网通信平台将在 HTTP 或 HTTPS 请求中头部增加如下字段:

参数 描述
Signature Signature 结合了“添加规则”中填写的 Token 参数和请求中的 Timestamp 参数、Nonce 参数。
Timestamp 时间戳。
Nonce 随机数。

1. 将 Token、Timestamp、Nonce 三个参数进行字典序排序。

2. 将三个参数字符串拼接成一个字符串进行 sha1 加密。

3. 开发者获得加密后的字符串可与 Signature 对比,标识该请求来源于物联网通信平台。

检验 Signature 的 PHP 示例代码如下:

private function checkSignature(){ $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ){ return true; }else{ return false; }}

例如某次请求,相关参数如下,用户设置 Token 为 aaa。

Nonce: IkOaKMDalrAzUTxCSignature: c259ed29ec13ba7c649fe0893007401a36e70453Timestamp: 1604458421

排序后的字符串是1604458421IkOaKMDalrAzUTxCaaa,最终计算 sha1 结果为c259ed29ec13ba7c649fe0893007401a36e70453。

服务地址校验

1. 当开启规则引擎时,物联网通信平台将发送一次 GET 请求到填写的服务器地址 URL 上,GET 请求头部增加如下字段:

参数 描述
Signature Signature 结合了“添加规则”中填写的 Token 参数和请求中的 Timestamp 参数、Nonce 参数。
Timestamp 时间戳。
Nonce 随机数。
Echostr 随机字符串。

物联网通信平台向第三方服务发送报文示例:

GET / HTTP/1.1Host: **.**.**.**:4443User-Agent: Go-http-client/1.1Content-Type: application/jsonEchostr: UPWIAFASvDUFcTEENonce: testranceSignature: abb6c316a8134596d825c5a1295bfa6f7657664dTimestamp: 1623149590Accept-Encoding: gzip

2. 第三方服务若确认此次 GET 请求来自物联网通信平台,请在 body 中原样返回 Echostr 参数内容。
第三方服务回复物联网通信平台报文示例:

HTTP/1.1 200 OKDate: Tue, 08 Jun 2021 10:53:10 GMTContent-Length: 16Content-Type: text/plain; charset=utf-8UPWIAFASvDUFcTEE

3. 物联网通信平台校验返回的 Echostr 参数内容,确认服务器地址 URL 是否有效。

五、数据格式

消息类型包括设备上报的 Topic 消息和平台监测到设备状态变化的通知消息,两类消息转发成功后,第三方服务收到的数据格式不同,如下:

·设备上报的 Topic 消息:

转发成功后,第三方服务收到的数据格式如下:

{ "payload": { "device_inf": "car_device", "temperature": 26 }, "timemills": 1660210398035, "seq": 212934692, "timestamp": 1660210398, "topic": "RTOYL6STQ0/dev_01/event", "devicename": "dev_01", "productid": "RTOYL6STQ0"}

各字段含义如下:

·payload:按编写的数据筛选规则,从设备上报的Topic消息中,筛选出来的数据;如果设备上报的是二进制格式数据,payload为原数据进行 Base64 编码。

·seq:序列号。

·topic:此消息上报的Topic。

·productid:产品 ID。

·devicename:设备名称。

·timestamp:该转发行为触发时的 Unix 时间戳。

·timemills:转发行为触发时的时间戳,毫秒级别。

·设备状态变化通知:

当平台监测到设备状态变化后,会触发此消息转发,转发成功后,第三方服务收到的数据格式如下:

{ "MsgType": "Forward", "Event": "", "Topic": "$state/report/K72CRAIG98/pskDevice001", "Seq": 0, "PayloadLen": 178, "ProductId": "K72CRAIG98", "DeviceName": "pskDevice001", "Payload": "eyJkZXZpY2VOYW1lIjoicHNrRGV2aWNlMDAxIiwiZXZlbnQiOiJFVl9PTkxJTkUiLCJwcm9kdWN0SUQiOiJLNzJDUkFJRzk4IiwicmVhc29uIjoiUkVBU09OX0RFVklDRV9DT05ORUNUIiwidGltZXN0YW1wIjoxNjc2OTY1MzUxLCJ0b3BpYyI6IiRzdGF0ZS9yZXBvcnQvSzcyQ1JBSUc5OC9wc2tEZXZpY2UwMDEifQ==", "Time": "2023-02-21 15:42:31", "TimeMills": 1676965351605, "Reason": ""}

Payload进行Base64解码后:

{ "deviceName": "dev_01", "event": "EV_OFFLINE", "productID": "KXUCF9GJ9H", "reason": "REASON_DEVICE_DISCONNECT", "timestamp": 1677068839, "topic": "$state/report/KXUCF9GJ9H/dev_01"}

各字段含义如下:

·event:"EV_ONLINE"上线,"EV_OFFLINE"下线。

·reason 设备状态变化原因:

·"REASON_DEVICE_DISCONNECT":设备断连。

·"REASON_STATE_KICKED":服务端主动踢下线。

·"REASON_DEVICE_KICKED":设备端互踢下线。

·"REASON_KEEPALIVE_TIMEOUT":设备端超时断连。

·productID:产品 ID。

·deviceName:设备名称。

·timestamp:时间戳。

·topic:主题信息。

六、重发机制

重发机制用于在消息转发过程中发生失败的情况下,进行再次重发以达到接受消息的目的,具体说明如下:

·若消息转发失败,系统则会进行转发重试,重试按照1s、3s、10s的时间间隔依次进行,若三次重试均失败,则将消息丢弃掉。

·若用户配置了“转发错误行为操作”,在三次重试失败后,将按“转发错误行为操作”的配置,再进行一次消息转发,如果仍失败,则将消息丢弃掉。

赞 (0)
上一篇 4天前
下一篇 4天前